iverilog/ivtest/ivltests/pr2136787.v

31 lines
602 B
Verilog

module signed_mux_bug();
reg s;
reg [3:0] a, b;
reg [7:0] y, z;
initial begin
// Example vector
s = 1'b1;
a = 4'b1010;
b = 4'b0000;
// Manually sign extend operands before multiplexer
y = s ? {{4{a[3]}}, a} : {{4{b[3]}}, b};
// Use $signed() to sign extend operands before multiplexer
// - Note that Icarus is not sign extending as expected
z = s ? $signed(a) : $signed(b);
// Display results
$display("a = %b", a);
$display("b = %b", b);
$display("y = %b", y);
$display("z = %b", z);
// Finished
$finish(0);
end
endmodule