mirror of https://github.com/zachjs/sv2v.git
154 lines
4.5 KiB
Systemverilog
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
|