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