iverilog/ivtest/ivltests/pr509b.v

72 lines
1.4 KiB
Verilog

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