2019-09-19 05:35:15 +02:00
|
|
|
`define TEST(value) \
|
2021-07-02 05:17:08 +02:00
|
|
|
reg [63:0] val_``value = {64{1'b``value}}; \
|
2020-07-07 05:40:07 +02:00
|
|
|
initial $display(`"'value -> %b (%0d) %b (%0d)`", \
|
2020-06-15 03:43:32 +02:00
|
|
|
val_``value, $bits(val_``value), \
|
|
|
|
|
1'b``value, $bits(1'b``value) \
|
|
|
|
|
);
|
2019-09-19 05:35:15 +02:00
|
|
|
|
|
|
|
|
module top;
|
|
|
|
|
`TEST(1)
|
|
|
|
|
`TEST(0)
|
|
|
|
|
`TEST(x)
|
|
|
|
|
`TEST(z)
|
2020-06-06 03:40:59 +02:00
|
|
|
|
|
|
|
|
reg flag;
|
|
|
|
|
reg [31:0] i;
|
|
|
|
|
reg [31:0] a;
|
|
|
|
|
reg [31:0] b;
|
|
|
|
|
reg [31:0] c;
|
2020-06-15 03:43:32 +02:00
|
|
|
reg [63:0] j;
|
|
|
|
|
reg [63:0] d;
|
|
|
|
|
reg [63:0] e;
|
2020-06-06 03:40:59 +02:00
|
|
|
initial begin
|
|
|
|
|
i = 42;
|
2020-06-15 03:43:32 +02:00
|
|
|
j = 42;
|
2020-06-06 03:40:59 +02:00
|
|
|
flag = 1;
|
|
|
|
|
a = (flag ? 32'hFFFFFFFF : i);
|
2020-06-06 23:01:27 +02:00
|
|
|
b = (flag ? 32'hXXXXXXXX : i);
|
2020-07-07 05:40:07 +02:00
|
|
|
c = (flag ? 32'hFFFFFFFF : i);
|
2020-06-15 03:43:32 +02:00
|
|
|
d = (flag ? 64'hFFFFFFFFFFFFFFFF : j);
|
|
|
|
|
e = (flag ? 64'hXXXXXXXXXXXXXXXX : j);
|
2020-06-06 03:40:59 +02:00
|
|
|
$display("%b", a);
|
|
|
|
|
$display("%b", b);
|
|
|
|
|
$display("%b", c);
|
2020-06-15 03:43:32 +02:00
|
|
|
$display("%b", d);
|
|
|
|
|
$display("%b", e);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
|
$display("%b", 4'b1xz0);
|
|
|
|
|
$display("%b", {4'b1xz0, 4'b1xz0});
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
|
$display(1);
|
|
|
|
|
$display(1);
|
|
|
|
|
$display(1);
|
|
|
|
|
$display(1);
|
2020-06-06 03:40:59 +02:00
|
|
|
end
|
2020-07-07 05:40:07 +02:00
|
|
|
|
|
|
|
|
M m1({ 1 {1'b0}}, { 2 {1'b1}}, { 3 {1'bx}}, { 4 {1'bz}});
|
|
|
|
|
M #( 2) m2({ 2 {1'b0}}, { 3 {1'b1}}, { 4 {1'bx}}, { 5 {1'bz}});
|
|
|
|
|
M #(28) m3({28 {1'b0}}, {29 {1'b1}}, {30 {1'bx}}, {31 {1'bz}});
|
|
|
|
|
M #(29) m4({29 {1'b0}}, {30 {1'b1}}, {31 {1'bx}}, {32 {1'bz}});
|
|
|
|
|
M #(30) m5({30 {1'b0}}, {31 {1'b1}}, {32 {1'bx}}, {33 {1'bz}});
|
|
|
|
|
M #(31) m6({31 {1'b0}}, {32 {1'b1}}, {33 {1'bx}}, {34 {1'bz}});
|
|
|
|
|
M #(32) m7({32 {1'b0}}, {33 {1'b1}}, {34 {1'bx}}, {35 {1'bz}});
|
|
|
|
|
M #(33) m8({33 {1'b0}}, {34 {1'b1}}, {35 {1'bx}}, {36 {1'bz}});
|
|
|
|
|
M #(34) m9({34 {1'b0}}, {35 {1'b1}}, {36 {1'bx}}, {37 {1'bz}});
|
|
|
|
|
|
|
|
|
|
M #(31) mA({31 {1'b0}}, {32 {1'b1}}, {33 {1'bx}}, {34 {1'bz}});
|
|
|
|
|
M #(34) mB({34 {1'b0}}, {35 {1'b1}}, {36 {1'bx}}, {37 {1'bz}});
|
|
|
|
|
M #(31) mC({31 {1'b0}}, {32 {1'b1}}, {33 {1'bx}}, {34 {1'bz}});
|
|
|
|
|
M #(34) mD({34 {1'b0}}, {35 {1'b1}}, {36 {1'bx}}, {37 {1'bz}});
|
|
|
|
|
|
|
|
|
|
`define TEST_OP(left, op, right, expected) \
|
|
|
|
|
$display(`"PASS: (left) op (right) -> %b (ref: %b)`", expected, 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)
|
|
|
|
|
|
2021-07-30 01:54:20 +02:00
|
|
|
`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)
|
|
|
|
|
|
2020-07-07 05:40:07 +02:00
|
|
|
`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)
|
2021-07-30 01:54:20 +02:00
|
|
|
`TEST_OP('1 & '1, &, 33'h1ffffffff, 33'h1ffffffff)
|
2020-07-07 05:40:07 +02:00
|
|
|
`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
|
2020-07-07 06:26:04 +02:00
|
|
|
|
|
|
|
|
parameter A = 8;
|
|
|
|
|
parameter B = 5;
|
|
|
|
|
reg [A*B-1:0] arr;
|
|
|
|
|
initial begin
|
|
|
|
|
arr = 1'sb1; $display("%b", arr);
|
|
|
|
|
arr = 1'sb0; $display("%b", arr);
|
|
|
|
|
arr = 1'sbx; $display("%b", arr);
|
|
|
|
|
arr = 1'sbz; $display("%b", arr);
|
|
|
|
|
end
|
2020-07-18 03:18:48 +02:00
|
|
|
|
|
|
|
|
reg pick;
|
|
|
|
|
wire [8:0] w0, w1, w2, w3;
|
|
|
|
|
assign w0 = pick ? 9'h1FF : 9'h000;
|
|
|
|
|
assign w1 = pick ? 9'h1FF : 9'h000;
|
|
|
|
|
assign w2 = pick ? 9'h1FF : 9'h000;
|
|
|
|
|
assign w3 = pick ? 9'h1FF : 9'h000;
|
|
|
|
|
initial begin
|
|
|
|
|
$monitor("%0d %b %b %b %b %b", $time, pick, w0, w1, w2, w3);
|
|
|
|
|
#1 pick = 0;
|
|
|
|
|
#1 pick = 1;
|
|
|
|
|
#1 pick = 0;
|
|
|
|
|
#1 pick = 1;
|
|
|
|
|
end
|
2021-07-30 01:54:20 +02:00
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
|
$display("tern %b", 1'b1);
|
|
|
|
|
$display("tern %b", A ? -1 : A);
|
|
|
|
|
$display("tern %b", A ? A : -1);
|
|
|
|
|
end
|
2020-07-07 05:40:07 +02:00
|
|
|
endmodule
|
|
|
|
|
|
|
|
|
|
module M(a, b, c, d);
|
|
|
|
|
parameter W = 1;
|
|
|
|
|
input wire [W+0:1] a;
|
|
|
|
|
input wire [W+1:1] b;
|
|
|
|
|
input wire [W+2:1] c;
|
|
|
|
|
input wire [W+3:1] d;
|
|
|
|
|
initial $display("M W=%0d %b %b %b %b", W, a, b, c, d);
|
2019-09-19 05:35:15 +02:00
|
|
|
endmodule
|