sv2v/test/core/unbased_unsized.sv

154 lines
4.5 KiB
Systemverilog

`define TEST(value) \
logic [63:0] val_``value = 'value; \
initial $display(`"'value -> %b (%0d) %b (%0d)`", \
val_``value, $bits(val_``value), \
'value, $bits('value) \
);
module top;
`TEST(1);
`TEST(0);
`TEST(x);
`TEST(z);
logic flag;
logic [31:0] i;
logic [31:0] a;
logic [31:0] b;
logic [31:0] c;
logic [63:0] j;
logic [63:0] d;
logic [63:0] e;
initial begin
i = 42;
j = 42;
flag = 1;
a = (flag ? '1 : i);
b = (flag ? 'x : i);
c = (flag ? '1 : '0);
d = (flag ? '1 : j);
e = (flag ? 'x : j);
$display("%b", a);
$display("%b", b);
$display("%b", c);
$display("%b", d);
$display("%b", e);
end
initial begin
$display("%b", {'1, 'x, 'z, '0});
$display("%b", {2 {'1, 'x, 'z, '0}});
end
initial begin
$display($bits('1));
$display($bits(flag ? '1 : 'x));
$display($bits(type('1)));
$display($bits(type(flag ? '1 : 'x)));
end
parameter P = 1;
M m1('0, '1, 'x, 'z);
M #( 2) m2('0, '1, 'x, 'z);
M #(28) m3('0, '1, 'x, 'z);
M #(29) m4('0, '1, 'x, 'z);
M #(30) m5('0, '1, 'x, 'z);
M #(31) m6('0, '1, 'x, 'z);
M #(32) m7('0, '1, 'x, 'z);
M #(33) m8('0, '1, 'x, 'z);
M #(34) m9('0, '1, 'x, 'z);
M #(31) mA(P ? '0 : '1, !P ? '0 : '1, 'x, 'z);
M #(34) mB(P ? '0 : '1, !P ? '0 : '1, 'x, 'z);
M #(31) mC(P ? '0 : '0 + '1, !P ? '0 : '0 + '1, 'x, 'z);
M #(34) mD(P ? '0 : '0 + '1, !P ? '0 : '0 + '1, 'x, 'z);
`define TEST_OP(left, op, right, expected) \
$display(`"%s: (left) op (right) -> %b (ref: %b)`", \
((left) op (right)) == expected ? "PASS" : "FAIL", \
(left) op (right), expected \
);
initial begin
`TEST_OP( 1'h1 , ==, '1, 1'b1)
`TEST_OP( 2'h3 , ==, '1, 1'b1)
`TEST_OP(31'h7fffffff , ==, '1, 1'b1)
`TEST_OP(32'hffffffff , ==, '1, 1'b1)
`TEST_OP(33'h1ffffffff, ==, '1, 1'b1)
`TEST_OP('1, ==, 1'h1 , 1'b1)
`TEST_OP('1, ==, 2'h3 , 1'b1)
`TEST_OP('1, ==, 31'h7fffffff , 1'b1)
`TEST_OP('1, ==, 32'hffffffff , 1'b1)
`TEST_OP('1, ==, 33'h1ffffffff, 1'b1)
`TEST_OP( 1'h1 , <=, '1, 1'b1)
`TEST_OP( 2'h3 , <=, '1, 1'b1)
`TEST_OP(31'h7fffffff , <=, '1, 1'b1)
`TEST_OP(32'hffffffff , <=, '1, 1'b1)
`TEST_OP(33'h1ffffffff, <=, '1, 1'b1)
`TEST_OP( 1'h1 , >=, '1, 1'b1)
`TEST_OP( 2'h3 , >=, '1, 1'b1)
`TEST_OP(31'h7fffffff , >=, '1, 1'b1)
`TEST_OP(32'hffffffff , >=, '1, 1'b1)
`TEST_OP(33'h1ffffffff, >=, '1, 1'b1)
`TEST_OP( 1'h1 , &, '1, 1'h1 )
`TEST_OP( 2'h3 , &, '1, 2'h3 )
`TEST_OP(31'h7fffffff , &, '1, 31'h7fffffff )
`TEST_OP(32'hffffffff , &, '1, 32'hffffffff )
`TEST_OP(33'h1ffffffff, &, '1, 33'h1ffffffff)
`TEST_OP(33'h1ffffffff, &, P ? '1 : '0, 33'h1ffffffff)
`TEST_OP(33'h1ffffffff, &, '1 & '1, 33'h1ffffffff)
`TEST_OP('1 & '1, &, 33'h1ffffffff, 33'h1ffffffff)
`TEST_OP(33'h1ffffffff, &, !P ? '1 : '0 - 1, 33'h1ffffffff)
`TEST_OP(34'h3ffffffff, &, '0 - 1, 34'h3ffffffff)
`TEST_OP(1, ==, 2'h3 == '1, 1'b1)
end
parameter A = 8;
parameter B = 5;
logic [A-1:0][B-1:0] arr;
initial begin
arr = '{default: '1}; $display("%b", arr);
arr = '{default: '0}; $display("%b", arr);
arr = '{default: 'x}; $display("%b", arr);
arr = '{default: 'z}; $display("%b", arr);
end
reg pick;
logic [8:0] w0, w1, w2, w3, w4;
assign w0 = pick ? '1 : $unsigned(4'd0);
assign w1 = pick ? '1 : unsigned'(5'd0);
assign w2 = pick ? '1 : $signed(6'd0);
assign w3 = pick ? '1 : signed'(7'd0);
assign w4 = pick ? (* foo *) (* bar *) 'z : 3'(~w3);
initial begin
$monitor("%0d %b %b %b %b %b %b", $time, pick, w0, w1, w2, w3, w4);
#1 pick = 0;
#1 pick = 1;
#1 pick = 0;
#1 pick = 1;
end
initial begin
$display("tern %b", A ? '1 : 'X);
$display("tern %b", A ? '1 : A);
$display("tern %b", A ? A : '1);
end
endmodule
module M(a, b, c, d);
parameter W = 1;
parameter type T = logic;
input T [W+0:1] a;
input T [W+1:1] b;
input T [W+2:1] c;
input T [W+3:1] d;
initial $display("M W=%0d %b %b %b %b", W, a, b, c, d);
endmodule