`timescale 1ns / 1ps `default_nettype none `define assert(signal, value) \ if (signal !== value) begin \ $display("%t ASSERTION FAILED in %m: %x != %x",$realtime,signal,value); \ #100; \ $finish; \ end module tb_wrapper(); reg clk; reg reset; reg [31:0] din; reg [3:0] ds; reg wr_i; reg wr_c; reg wr_x; reg [3:0] rounds; reg start; reg rd_r; reg rd_c; reg [31:0] dout; reg idle; reg tc; reg ts; reg di; wire do; wrapper u_dut( .clk(clk), .tc(tc), .ts(ts), .di(di), .do(do) ); wire [63:0] c0 = u_dut.u_impl.c[0*64+:64]; wire [63:0] c1 = u_dut.u_impl.c[1*64+:64]; wire [63:0] c2 = u_dut.u_impl.c[2*64+:64]; wire [63:0] c3 = u_dut.u_impl.c[3*64+:64]; wire [63:0] c4 = u_dut.u_impl.c[4*64+:64]; reg [320-1:0] c_out; reg [128-1:0] r_out; wire done = ts ? 0 : do; localparam INPUT_WIDTH = 1+32+4+3+4+3; localparam OUTPUT_WIDTH = 32+1; localparam IOS_WIDTH = OUTPUT_WIDTH+INPUT_WIDTH; reg [IOS_WIDTH-1:0] ios; task wait_clock; begin @ (negedge clk); end endtask task io; integer i; begin ios = {{OUTPUT_WIDTH{1'b0}},reset,din,ds,wr_i,wr_c,wr_x,rounds,start,rd_r,rd_c}; tc=0; ts=1; //shift data in for(i=0;i