Merge branch 'main' of github.com:AmoghLonkar/openram_testchip into main
diff --git a/verilog/dv/gpio_test/gpio_test_tb.v b/verilog/dv/gpio_test/gpio_test_tb.v
index 4e75cb5..6f76576 100644
--- a/verilog/dv/gpio_test/gpio_test_tb.v
+++ b/verilog/dv/gpio_test/gpio_test_tb.v
@@ -21,6 +21,12 @@
`include "caravel_netlists.v"
`include "spiflash.v"
+`define assert(signal, value) \
+if (!(signal === value)) begin \
+ $display("ASSERTION FAILED in %m: signal != value"); \
+ $finish;\
+end
+
module gpio_test_tb;
reg clock;
reg RSTB;
@@ -64,26 +70,6 @@
always #12.5 gpio_clk = !gpio_clk;
- initial begin
- //$dumpfile("gpio_test.vcd");
- //$dumpvars(0, gpio_test_tb);
-
- /*
- // Repeat cycles of 1000 clock edges as needed to complete testbench
- repeat (2) begin
- repeat (1000) @(posedge clock);
- // $display("+1000 cycles");
- end
- `ifdef GL
- $display ("Monitor: Timeout, Test GPIO Full Chip Sim (GL) Failed");
- `else
- $display ("Monitor: Timeout, Test GPIO Full Chip Sim (RTL) Failed");
- `endif
- $finish;
- */
- end
-
-
integer i, j;
reg [3:0] sel;
reg [111:0] in_data;
@@ -97,12 +83,11 @@
$dumpfile("gpio_test.vcd");
$dumpvars(0, gpio_test_tb);
-
gpio_clk = 1;
global_csb = 1;
//Testing 32B Dual Port Memories
- for(i = 0; i < 4; i = i + 1) begin
+ for(i = 0; i < 5; i = i + 1) begin
sel = i;
//Write 1 to addr1 using GPIO Pins
@@ -128,8 +113,8 @@
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;
+ gpio_in = in_data[111 - j];
+ #25;
end
gpio_scan = 0;
@@ -146,8 +131,8 @@
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;
+ gpio_in = in_data[111 - j];
+ #25;
end
gpio_scan = 0;
@@ -161,30 +146,117 @@
gpio_sram_load = 0;
gpio_scan = 1;
for(j = 0; j < 112; j = j + 1) begin
- out_data[111 - j] = mprj_io_22;
- #25;
+ out_data[111 - j] = mprj_io_22;
+ #25;
end
#25;
- //`assert(out_data, {sel, 16'd1, 32'd1, 1'b0, 1'b1, 4'd0, 16'd2, 32'd2, 1'b0, 1'b1, 4'd0});
+ `assert(out_data, {sel, 16'd1, 32'd1, 1'b0, 1'b1, 4'd0, 16'd2, 32'd2, 1'b0, 1'b1, 4'd0});
end
+
+ //Testing 32B Single Port Memories
+ for(i = 8; i < 11; i = i + 1) begin
+ sel = i;
+
+ //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;
+ #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;
+
+ #25;
+ 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;
+ `assert(out_data, {sel, 16'd1, 32'd1, 1'b0, 1'b1, 4'd0, 16'd0, 32'd0, 1'b0, 1'b0, 4'd0});
+ 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;
+
+ #25;
+ 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;
+ `assert(out_data[111:92], {sel, 16'd1});
+ `assert(out_data[75:60], 16'd1);
+ `assert(out_data[59:0], {1'b0, 1'b1, 4'd0, 16'd0, 32'd0, 1'b0, 1'b0, 4'd0});
+
+
#25; $finish;
end
initial begin
- // Observe Output pin 22
- wait(mprj_io_22 == 8'h01);
-
- /*
- `ifdef GL
- $display("Monitor: Test 1 Mega-Project IO (GL) Passed");
- `else
- $display("Monitor: Test 1 Mega-Project IO (RTL) Passed");
- `endif
- */
- $finish;
- end
-
- initial begin
RSTB <= 1'b0;
CSB <= 1'b1; // Force CSB high
#2000;
@@ -208,10 +280,6 @@
power4 <= 1'b1;
end
- always @(mprj_io) begin
- //#1 $display("MPRJ-IO state = %b ", mprj_io[22]);
- end
-
wire flash_csb;
wire flash_clk;
wire flash_io0;