iverilog/ivtest/ivltests/struct_member_signed.v

42 lines
717 B
Verilog

// Tests that the signedness for struct members is handled correctly
module test;
struct packed {
logic [15:0] x;
logic signed [15:0] y;
} s;
bit failed = 1'b0;
`define check(x) \
if (!(x)) begin \
$display("FAILED: ", `"x`"); \
failed = 1'b1; \
end
initial begin
s.x = -1;
s.y = -1;
`check(!$is_signed(s.x));
`check($is_signed(s.y));
// These evaluate as signed
`check($signed(s.x) < 0);
`check(s.y < 0);
// These all evaluate as unsigned
`check(s.x > 0);
`check(s.y[15:0] > 0)
`check({s.y} > 0)
`check($unsigned(s.y) > 0)
`check(s.y > 16'h0)
if (!failed) begin
$display("PASSED");
end
end
endmodule