I hit a case with Icarus synthesis involving embedded multiplication expressions inside concatenations. Outside a concat, the multiplier is synthesized to the correct precision. However, inside a concat, the multiplier precision is doubled. Also with this case, I find a couple of non-driven nexus in the netlist.
It must have something to do with mulitplication, because addition works fine.
I originally suspected a bug in my FNF generator, but I confirmed the behavior with the -t fpga target as well.
Any ideas?
-Tom
module test (a, b, x, y, z); input [7:0] a, b; output [7:0] x; output [8:0] y; output [8:0] z;
// Synthesizes an 8-bit multiplier as expected. assign x = a * b;
// Synthesizes an 8-bit adder as expected.
assign y = {1'b0, a + b}; // Synthesizes a 16-bit multiplier. Why not 8-bits?
// Also creates a couple of non sourced nexus.
assign z = {1'b0, a * b};endmodule
