Write tasks for write and read
diff --git a/verilog/dv/gpio_test/gpio_test_tb.v b/verilog/dv/gpio_test/gpio_test_tb.v index e6aae0f..6178a52 100644 --- a/verilog/dv/gpio_test/gpio_test_tb.v +++ b/verilog/dv/gpio_test/gpio_test_tb.v
@@ -63,10 +63,88 @@ always #12.5 gpio_clk = !gpio_clk; - integer i, j; - reg [3:0] sel; reg [111:0] in_data; reg [111:0] out_data; + reg gpio_out; + integer j; + + + + task write_sram; + input [3:0] sel; + input csb0; + input web0; + input [15:0] addr0; + input [31:0] din0; + input csb1; + input web1; + input [15:0] addr1; + input [31:0] din1; + begin + + + gpio_clk = 1; + global_csb = 1; + gpio_scan = 1; + gpio_sram_load = 0; + in_data = {sel, addr0, din0, csb0, web0, 4'hF, addr1, din1, csb1, web1, 4'hF}; + + for(j = 0; j < 112; j = j + 1) begin + gpio_in = in_data[111 - j]; + #25; + end + + gpio_scan = 0; + global_csb = 0; + #25; + global_csb = 1; + + end + endtask // write_sram + + + task read_sram; + input [3:0] sel; + input csb0; + input web0; + input [15:0] addr0; + input [31:0] din0; + input csb1; + input web1; + input [15:0] addr1; + input [31:0] din1; + begin + + + gpio_clk = 1; + global_csb = 1; + gpio_scan = 1; + gpio_sram_load = 0; + in_data = {sel, addr0, din0, csb0, web0, 4'hF, addr1, din1, csb1, web1, 4'hF}; + + for(j = 0; j < 112; j = j + 1) begin + gpio_in = in_data[111 - j]; + #25; + end + + gpio_scan = 0; + global_csb = 0; + #25; + global_csb = 1; + gpio_sram_load = 1; + #25; + + // This should scan out the results and check they match the same thing expected here: + in_data = {sel, addr0, din0, csb0, web0, 4'hF, addr1, din1, csb1, web1, 4'hF}; + gpio_scan = 1; + for(j = 0; j < 112; j = j + 1) begin + //wait(gpio_out == in_data[111 - j]; + #25; + end + end + endtask // read_sram + + integer i; initial begin @@ -79,166 +157,76 @@ gpio_clk = 1; global_csb = 1; + # 100; + + //Testing 32B Dual Port Memories for(i = 0; i < 5; i = i + 1) begin - sel = i; + // write 1 to address 1 + write_sram(i, + 1'b0, + 1'b0, + 16'd1, + 32'd1, + 1'b1, + 1'b1, + 16'd0, + 32'd0); - //Write 1 to addr1 using GPIO Pins - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd1, 32'd1, 1'b0, 1'b0, 4'd15, 16'd0, 32'd0, 1'b1, 1'b1, 4'd0}; + // write 2 to address 2 + write_sram(i, + 1'b0, + 1'b0, + 16'd2, + 32'd2, + 1'b1, + 1'b1, + 16'd0, + 32'd0); - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end + // read address 1 and 2 + read_sram(i, + 1'b0, + 1'b1, + 16'd1, + 32'd1, + 1'b0, + 1'b1, + 16'd2, + 32'd2); - gpio_scan = 0; - global_csb = 0; - #25; - global_csb = 1; - gpio_sram_load = 1; - #25; - //Write 2 to addr2 using GPIO Pins - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd2, 32'd2, 1'b0, 1'b0, 4'd15, 16'd0, 32'd0, 1'b1, 1'b1, 4'd0}; - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end - - gpio_scan = 0; - global_csb = 0; - #25; - global_csb = 1; - gpio_sram_load = 1; - #25; - - #25; - //Read addr1 and addr2 - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd1, 32'd0, 1'b0, 1'b1, 4'd0, 16'd2, 32'd0, 1'b0, 1'b1, 4'd0}; - - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end - - gpio_scan = 0; - global_csb = 0; - #25; - global_csb = 1; - gpio_sram_load = 1; - #25; - - #75; - gpio_sram_load = 0; - gpio_scan = 1; - for(j = 0; j < 112; j = j + 1) begin - out_data[111 - j] = mprj_io_22; - #25; - end - #25; end //Testing 32B Single Port Memories - for(i = 8; i < 11; i = i + 1) begin - sel = i; + for(i = 8; i < 12; i = i + 1) begin - //Write 1 to addr1 using GPIO Pins - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd1, 32'd1, 1'b0, 1'b0, 4'd15, 16'd0, 32'd0, 1'b0, 1'b0, 4'd0}; + // write 1 to address 1 + write_sram(i, + 1'b0, + 1'b0, + 16'd1, + 32'd1, + 1'b1, + 1'b1, + 16'd0, + 32'd0); - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end + // read address 1 and 2 + read_sram(i, + 1'b0, + 1'b1, + 16'd1, + 32'd1, + 1'b1, + 1'b1, + 16'd0, + 32'd0); - gpio_scan = 0; - global_csb = 0; - #25; - global_csb = 1; - gpio_sram_load = 1; - #25; - - //Read addr1 - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd1, 32'd0, 1'b0, 1'b1, 4'd0, 16'd0, 32'd0, 1'b0, 1'b0, 4'd0}; - - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end - - gpio_scan = 0; - global_csb = 0; - #25; - global_csb = 1; - gpio_sram_load = 1; - #25; - - #75; - gpio_sram_load = 0; - gpio_scan = 1; - for(j = 0; j < 112; j = j + 1) begin - out_data[111 - j] = mprj_io_22; - #25; - end - #25; end - //Testing 64b Single Port Memory - sel = 11; - - //Write 1 to addr1 using GPIO Pins - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd1, 32'd1, 1'b0, 1'b0, 4'd15, 16'd0, 32'd0, 1'b0, 1'b0, 4'd0}; - - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end - - gpio_scan = 0; - global_csb = 0; - #10; - global_csb = 1; - gpio_sram_load = 1; - #10; - - //Read addr1 - gpio_scan = 1; - gpio_sram_load = 0; - in_data = {sel, 16'd1, 32'd0, 1'b0, 1'b1, 4'd0, 16'd0, 32'd0, 1'b0, 1'b0, 4'd0}; - - for(j = 0; j < 112; j = j + 1) begin - gpio_in = in_data[111 - j]; - #25; - end - - gpio_scan = 0; - global_csb = 0; - #25; - global_csb = 1; - gpio_sram_load = 1; - #25; - - #75; - gpio_sram_load = 0; - gpio_scan = 1; - for(j = 0; j < 112; j = j + 1) begin - out_data[111 - j] = mprj_io_22; - #25; - end - - #25; + $display("Done with tests"); #25; $finish; end