72 lines
1.4 KiB
Coq
72 lines
1.4 KiB
Coq
|
|
module whoever_wrote_this_should_be_shot ( Q, D, G );
|
||
|
|
output Q;
|
||
|
|
input D, G;
|
||
|
|
|
||
|
|
wire Q_int;
|
||
|
|
|
||
|
|
assign ( pull0, pull1 ) Q_int = Q_int;
|
||
|
|
|
||
|
|
bufif1 buf_D ( Q_int, D, G );
|
||
|
|
buf buf_Q ( Q, Q_int );
|
||
|
|
endmodule
|
||
|
|
|
||
|
|
module testbench;
|
||
|
|
wire Q;
|
||
|
|
reg D, G;
|
||
|
|
|
||
|
|
whoever_wrote_this_should_be_shot uut ( Q, D, G );
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
D = 1'b0;
|
||
|
|
forever #5 D = ~ D;
|
||
|
|
end
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
G = 1'b0;
|
||
|
|
forever #27 G = ~ G;
|
||
|
|
end
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
$monitor( $time,,,G,,,D,,,Q );
|
||
|
|
|
||
|
|
// time 28: G=1, D=1, Q=1
|
||
|
|
#28 if (Q !== 1) begin
|
||
|
|
$display("FAILED -- Q should be 1, is %b", Q);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
|
||
|
|
// time 31: G=1, D=0, Q=0
|
||
|
|
#3 if (Q !== 0) begin
|
||
|
|
$display("FAILED -- Q should be 0, is %b", Q);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
|
||
|
|
// time 51: G=1, D=0, Q=0
|
||
|
|
#20 if (Q !== 0) begin
|
||
|
|
$display("FAILED -- Q should be 0, is %b", Q);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
|
||
|
|
// time 56: G=0, D=1, Q=0
|
||
|
|
#5 if (Q !== 0) begin
|
||
|
|
$display("FAILED -- Q should be 0, is %b", Q);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
|
||
|
|
// time 82: G=1, D=0, Q=0
|
||
|
|
#26 if (Q !== 0) begin
|
||
|
|
$display("FAILED -- Q should be 0, is %b", Q);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
|
||
|
|
// time 86: G=1, D=1, Q=1
|
||
|
|
#5 if (Q !== 1) begin
|
||
|
|
$display("FAILED -- Q should be 1, is %b", Q);
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
|
||
|
|
#1000 $display("PASSED");
|
||
|
|
$finish;
|
||
|
|
end
|
||
|
|
endmodule
|