| module testbench; | |
| reg clk; | |
| initial begin | |
| // $dumpfile("testbench.vcd"); | |
| // $dumpvars(0, testbench); | |
| #5 clk = 0; | |
| repeat (10000) begin | |
| #5 clk = 1; | |
| #5 clk = 0; | |
| end | |
| $display("OKAY"); | |
| end | |
| function [31:0] xorshift32; | |
| input [31:0] arg; | |
| begin | |
| xorshift32 = arg; | |
| // Xorshift32 RNG, doi:10.18637/jss.v008.i14 | |
| xorshift32 = xorshift32 ^ (xorshift32 << 13); | |
| xorshift32 = xorshift32 ^ (xorshift32 >> 17); | |
| xorshift32 = xorshift32 ^ (xorshift32 << 5); | |
| end | |
| endfunction | |
| reg [31:0] rng = 123456789; | |
| always @(posedge clk) rng <= xorshift32(rng); | |
| wire dinA = xorshift32(rng * 5); | |
| wire dinC = xorshift32(rng * 7); | |
| wire doutB; | |
| top uut ( | |
| .clk (clk ), | |
| .a (dinA ), | |
| .c (dinC), | |
| .b (doutB ) | |
| ); | |
| assert_dff ff_test(.clk(clk), .test(doutB), .pat(1'b1)); | |
| endmodule |