| 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 |