| module middle_tb |
| ( |
| input x, |
| input y, |
| output o |
| ); |
| |
| parameter Y = 1'b1; |
| |
| urtl_tb u_urtl (.x(x),.o(o),.y(Y)); |
| endmodule |
| |
| module urtl_tb |
| ( |
| input x, |
| input y, |
| output o |
| ); |
| |
| assign o = x + y; |
| endmodule |
| |
| module testbench; |
| reg [0:2] in; |
| |
| reg patt_A = 1'bX; |
| wire patt_cout; |
| wire cout,o; |
| wire A; |
| |
| initial begin |
| // $dumpfile("testbench.vcd"); |
| // $dumpvars(0, testbench); |
| |
| #5 in = 0; |
| repeat (10000) begin |
| #5 in = in + 1; |
| end |
| |
| $display("OKAY"); |
| end |
| |
| top uut ( |
| .x(in[0]), |
| .y(in[1]), |
| .cin(in[2]), |
| .A(A), |
| .cout(cout) |
| ); |
| |
| always @(posedge in[2]) |
| patt_A <= o; |
| |
| assign pattcout = in[2]? in[1] : in[0]; |
| |
| middle_tb #(1'b0) u_mid1 (.x(in[0]),.o(o),.y(1'b0)); |
| middle_tb #(1'b0) u_mid2 (.x(in[0]),.o(o),.y(1'b1)); |
| middle_tb #(1'b0) u_mid3 (.x(in[0]),.o(o),.y(1'bX)); |
| middle_tb #(1'b0) u_mid4 (.x(in[0]),.o(o),.y(1'bX)); |
| |
| assert_comb out_test(.A(patt_A), .B(A)); |
| |
| endmodule |