204 lines
6.7 KiB
Coq
204 lines
6.7 KiB
Coq
|
|
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
|