mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-09-07 11:51:38 +02:00
By adding ivtest to the iverilog source tree, it is easier to keep the regression test synchronized with the source that is being tested. This should be especially helpful for PRs that add a new feature, and have a matching ivtest PR with the regression test for that feature.
204 lines
6.7 KiB
Verilog
204 lines
6.7 KiB
Verilog
module test();
|
|
|
|
wire [1:0] n0 = 2'bzx;
|
|
wire [1:0] n1 = 2'b0x;
|
|
wire [1:0] n2 = 2'b1x;
|
|
wire [1:0] n3 = 2'bxx;
|
|
wire [1:0] n4 = 2'bxx;
|
|
wand [1:0] n5 = 2'bxx;
|
|
wor [1:0] n6 = 2'bxx;
|
|
|
|
assign n4 = 2'b0x;
|
|
assign n4 = 2'b0x;
|
|
assign n4 = 2'b1x;
|
|
assign n4 = 2'b1x;
|
|
assign n4 = 2'b1x;
|
|
|
|
assign n5 = 2'b0x;
|
|
assign n5 = 2'b0x;
|
|
assign n5 = 2'b0x;
|
|
assign n5 = 2'b1x;
|
|
assign n5 = 2'b1x;
|
|
|
|
assign n6 = 2'b0x;
|
|
assign n6 = 2'b1x;
|
|
assign n6 = 2'b1x;
|
|
assign n6 = 2'bxx;
|
|
assign n6 = 2'bxx;
|
|
|
|
reg [15:0] multi;
|
|
reg [15:0] forced;
|
|
reg [15:0] countD;
|
|
reg [15:0] count0;
|
|
reg [15:0] count1;
|
|
reg [15:0] countX;
|
|
|
|
reg failed = 0;
|
|
|
|
task check_results;
|
|
|
|
input integer expected_multi;
|
|
input integer expected_forced;
|
|
input integer expected_countD;
|
|
input integer expected_count0;
|
|
input integer expected_count1;
|
|
input integer expected_countX;
|
|
|
|
begin
|
|
$write("multi = %0d ", multi);
|
|
if (multi !== expected_multi) failed = 1;
|
|
if (expected_forced != -1) begin
|
|
$write("forced = %0d ", forced);
|
|
if (forced !== expected_forced) failed = 1;
|
|
end
|
|
if (expected_countD != -1) begin
|
|
$write("countD = %0d ", countD);
|
|
if (countD !== expected_countD) failed = 1;
|
|
end
|
|
if (expected_count0 != -1) begin
|
|
$write("count0 = %0d ", count0);
|
|
if (count0 !== expected_count0) failed = 1;
|
|
end
|
|
if (expected_count1 != -1) begin
|
|
$write("count1 = %0d ", count1);
|
|
if (count1 !== expected_count1) failed = 1;
|
|
end
|
|
if (expected_countX != -1) begin
|
|
$write("countX = %0d ", countX);
|
|
if (countX !== expected_countX) failed = 1;
|
|
end
|
|
$write("\n");
|
|
end
|
|
|
|
endtask
|
|
|
|
initial begin
|
|
#0; // wait for initial values to propagate
|
|
|
|
// test undriven net
|
|
multi = $countdrivers(n0[1]);
|
|
check_results(0, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n0[1], forced);
|
|
check_results(0, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n0[1], forced, countD);
|
|
check_results(0, 0, 0, -1, -1, -1);
|
|
multi = $countdrivers(n0[1], forced, countD, count0);
|
|
check_results(0, 0, 0, 0, -1, -1);
|
|
multi = $countdrivers(n0[1], forced, countD, count0, count1);
|
|
check_results(0, 0, 0, 0, 0, -1);
|
|
multi = $countdrivers(n0[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 0, 0, 0, 0, 0);
|
|
force n0 = 2'bxx;
|
|
multi = $countdrivers(n0[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 1, 0, 0, 0, 0);
|
|
|
|
// test net driven to 0
|
|
multi = $countdrivers(n1[1]);
|
|
check_results(0, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n1[1], forced);
|
|
check_results(0, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n1[1], forced, countD);
|
|
check_results(0, 0, 1, -1, -1, -1);
|
|
multi = $countdrivers(n1[1], forced, countD, count0);
|
|
check_results(0, 0, 1, 1, -1, -1);
|
|
multi = $countdrivers(n1[1], forced, countD, count0, count1);
|
|
check_results(0, 0, 1, 1, 0, -1);
|
|
multi = $countdrivers(n1[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 0, 1, 1, 0, 0);
|
|
force n1 = 2'bxx;
|
|
multi = $countdrivers(n1[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 1, 1, 1, 0, 0);
|
|
|
|
// test net driven to 1
|
|
multi = $countdrivers(n2[1]);
|
|
check_results(0, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n2[1], forced);
|
|
check_results(0, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n2[1], forced, countD);
|
|
check_results(0, 0, 1, -1, -1, -1);
|
|
multi = $countdrivers(n2[1], forced, countD, count0);
|
|
check_results(0, 0, 1, 0, -1, -1);
|
|
multi = $countdrivers(n2[1], forced, countD, count0, count1);
|
|
check_results(0, 0, 1, 0, 1, -1);
|
|
multi = $countdrivers(n2[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 0, 1, 0, 1, 0);
|
|
force n2 = 2'bxx;
|
|
multi = $countdrivers(n2[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 1, 1, 0, 1, 0);
|
|
|
|
// test net driven to X
|
|
multi = $countdrivers(n3[1]);
|
|
check_results(0, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n3[1], forced);
|
|
check_results(0, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n3[1], forced, countD);
|
|
check_results(0, 0, 1, -1, -1, -1);
|
|
multi = $countdrivers(n3[1], forced, countD, count0);
|
|
check_results(0, 0, 1, 0, -1, -1);
|
|
multi = $countdrivers(n3[1], forced, countD, count0, count1);
|
|
check_results(0, 0, 1, 0, 0, -1);
|
|
multi = $countdrivers(n3[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 0, 1, 0, 0, 1);
|
|
force n3 = 2'bxx;
|
|
multi = $countdrivers(n3[1], forced, countD, count0, count1, countX);
|
|
check_results(0, 1, 1, 0, 0, 1);
|
|
|
|
// test multi-driven net
|
|
multi = $countdrivers(n4[1]);
|
|
check_results(1, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n4[1], forced);
|
|
check_results(1, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n4[1], forced, countD);
|
|
check_results(1, 0, 6, -1, -1, -1);
|
|
multi = $countdrivers(n4[1], forced, countD, count0);
|
|
check_results(1, 0, 6, 2, -1, -1);
|
|
multi = $countdrivers(n4[1], forced, countD, count0, count1);
|
|
check_results(1, 0, 6, 2, 3, -1);
|
|
multi = $countdrivers(n4[1], forced, countD, count0, count1, countX);
|
|
check_results(1, 0, 6, 2, 3, 1);
|
|
force n4 = 2'bxx;
|
|
multi = $countdrivers(n4[1], forced, countD, count0, count1, countX);
|
|
check_results(1, 1, 6, 2, 3, 1);
|
|
|
|
// test wire and
|
|
multi = $countdrivers(n5[1]);
|
|
check_results(1, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n5[1], forced);
|
|
check_results(1, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n5[1], forced, countD);
|
|
check_results(1, 0, 6, -1, -1, -1);
|
|
multi = $countdrivers(n5[1], forced, countD, count0);
|
|
check_results(1, 0, 6, 3, -1, -1);
|
|
multi = $countdrivers(n5[1], forced, countD, count0, count1);
|
|
check_results(1, 0, 6, 3, 2, -1);
|
|
multi = $countdrivers(n5[1], forced, countD, count0, count1, countX);
|
|
check_results(1, 0, 6, 3, 2, 1);
|
|
force n5 = 2'bxx;
|
|
multi = $countdrivers(n5[1], forced, countD, count0, count1, countX);
|
|
check_results(1, 1, 6, 3, 2, 1);
|
|
|
|
// test wire or
|
|
multi = $countdrivers(n6[1]);
|
|
check_results(1, -1, -1, -1, -1, -1);
|
|
multi = $countdrivers(n6[1], forced);
|
|
check_results(1, 0, -1, -1, -1, -1);
|
|
multi = $countdrivers(n6[1], forced, countD);
|
|
check_results(1, 0, 6, -1, -1, -1);
|
|
multi = $countdrivers(n6[1], forced, countD, count0);
|
|
check_results(1, 0, 6, 1, -1, -1);
|
|
multi = $countdrivers(n6[1], forced, countD, count0, count1);
|
|
check_results(1, 0, 6, 1, 2, -1);
|
|
multi = $countdrivers(n6[1], forced, countD, count0, count1, countX);
|
|
check_results(1, 0, 6, 1, 2, 3);
|
|
force n6 = 2'bxx;
|
|
multi = $countdrivers(n6[1], forced, countD, count0, count1, countX);
|
|
check_results(1, 1, 6, 1, 2, 3);
|
|
|
|
if (failed)
|
|
$display("FAILED");
|
|
else
|
|
$display("PASSED");
|
|
end
|
|
|
|
endmodule
|