| module testbench; |
| reg clk; |
| |
| initial begin |
| // $dumpfile("testbench.vcd"); |
| // $dumpvars(0, testbench); |
| |
| #0 clk = 0; |
| repeat (10000) begin |
| #5 clk = 1; |
| #5 clk = 0; |
| end |
| |
| $display("OKAY"); |
| end |
| |
| |
| reg [63:0] A, B, C, D = 0; |
| reg [127:0] E, F = 0; |
| reg [127:0] X_p, Y_p; |
| wire [127:0] X,Y; |
| |
| always @(posedge clk) |
| begin |
| A = A + 248; |
| B = B + 338; |
| C = C + 435; |
| D = D + 282; |
| E = E + 1248; |
| F = F + 2148; |
| end |
| |
| |
| integer i; |
| always @* begin |
| X_p = A*B + E; |
| Y_p = F; |
| for (i = 0; i < 64; i=i+1) |
| Y_p = Y_p + C[i]*D[i]; |
| end |
| |
| top uut (A,B,C,D,E,F,X,Y); |
| |
| uut_checker X_test(.clk(clk), .A(X), .B(X_p)); |
| uut_checker Y_test(.clk(clk), .A(Y), .B(Y_p)); |
| |
| endmodule |
| |
| module uut_checker(input clk, input [127:0] A, input [127:0] B); |
| always @(posedge clk) |
| begin |
| #1; |
| if (A != B) |
| begin |
| $display("ERROR: ASSERTION FAILED in %m:",$time," ",A," != ",B); |
| $stop; |
| end |
| end |
| endmodule |