Make checks consistent with gpio test
diff --git a/verilog/dv/la_test/la_test.c b/verilog/dv/la_test/la_test.c
index f7e80af..4928060 100644
--- a/verilog/dv/la_test/la_test.c
+++ b/verilog/dv/la_test/la_test.c
@@ -20,28 +20,11 @@
#include "verilog/dv/caravel/stub.c"
/*
- IO Test:
- - Configures MPRJ lower 8-IO pins as outputs
- - Observes counter value through the MPRJ lower 8 IO pins (in the testbench)
+ LA Test:
+ - Reads to and writes from each SRAM
+ - Uses Logic Analyzer interface for communication between SRAMs and CPU
*/
-
- /* wire la_clk = la_data_in[127]; */
- /* wire la_reset = la_data_in[126]; */
- /* wire la_in_load = la_data_in[125]; */
- /* wire la_sram_load = la_data_in[124]; */
- /* wire la_global_cs = la_data_in[123]; */
-/* * chip_select (4) */
-/* * addr0 (16) */
-/* * din0 (32) */
-/* * csb0 (1) */
-/* * web0 (1) */
-/* * wmask0 (1) */
-/* * addr1 (16) */
-/* * din1 (32) */
-/* * csb1 (1) */
-/* * web1 (1) */
-/* * wmask1 (4) */
typedef struct bit_fields {
unsigned int clk : 1;
@@ -91,6 +74,7 @@
// This is to signal when the code is ready to the test bench
reg_mprj_io_0 = GPIO_MODE_MGMT_STD_OUTPUT;
+ reg_mprj_io_1 = GPIO_MODE_MGMT_STD_OUTPUT;
/* Apply configuration */
reg_mprj_xfer = 1;
@@ -104,35 +88,6 @@
// To start, set pin 0 to 1
reg_mprj_datal = 0x00000001;
- /*
- union packet p;
- p.bf.rst = 1;
- p.bf.clk = 1;
- p.bf.in_load = 1;
- p.bf.sram_load = 0;
- p.bf.la_gcs = 0;
-
- p.bf.unused = 0;
-
- p.bf.cs = 0;
- p.bf.addr0 = 0;
- p.bf.din0 = 1;
- p.bf.csb0 = 0;
- p.bf.web0 = 0;
- p.bf.wmask0 = 15;
-
- p.bf.addr1 = 0;
- p.bf.din1 = 0;
- p.bf.csb1 = 1;
- p.bf.web1 = 1;
- p.bf.wmask1 = 0;
-
- //Send data
- reg_la3_data = p.wf.word3;
- reg_la2_data = p.wf.word2;
- reg_la1_data = p.wf.word1;
- reg_la0_data = p.wf.word0;
- */
/* DUAL PORT MEMORIES */
@@ -190,6 +145,26 @@
reg_la3_data = 0x10000000;
reg_la3_data = 0x90000000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la0_data != 0x00000050){
+ reg_mprj_datal = 0x00000003;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
//SRAM 1
// Write 1 to address 1
// Send input packet
@@ -244,6 +219,26 @@
reg_la3_data = 0x100001000;
reg_la3_data = 0x900001000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la0_data != 0x00000050){
+ reg_mprj_datal = 0x00000001;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// SRAM 2
// Write 1 to address 1
// Send input packet
@@ -298,6 +293,26 @@
reg_la3_data = 0x100002000;
reg_la3_data = 0x900002000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la0_data != 0x00000050){
+ reg_mprj_datal = 0x00000003;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// SRAM 3
// Write 1 to address 1
// Send input packet
@@ -352,6 +367,26 @@
reg_la3_data = 0x100003000;
reg_la3_data = 0x900003000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la0_data != 0x00000050){
+ reg_mprj_datal = 0x00000001;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// SRAM 4
// Write 1 to address 1
// Send input packet
@@ -406,8 +441,27 @@
reg_la3_data = 0x100004000;
reg_la3_data = 0x900004000;
- /* SINGLE PORT MEMORIES */
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la0_data != 0x00000050){
+ reg_mprj_datal = 0x00000003;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
+ /* SINGLE PORT MEMORIES */
// SRAM 8
// Write DEADBEEF to address 1
// Send input packet
@@ -447,6 +501,26 @@
reg_la3_data = 0x100008000;
reg_la3_data = 0x900008000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la2_data != 0x1DEADBEE){
+ reg_mprj_datal = 0x00000001;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// SRAM 9
// Write DEADBEEF to address 1
// Send input packet
@@ -486,6 +560,26 @@
reg_la3_data = 0x100009000;
reg_la3_data = 0x900009000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la2_data != 0x1DEADBEE){
+ reg_mprj_datal = 0x00000003;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// SRAM 10
// Write DEADBEEF to address 1
// Send input packet
@@ -525,6 +619,26 @@
reg_la3_data = 0x10000A000;
reg_la3_data = 0x90000A000;
+ // Read from the LA
+ // This will trigger a sample of the LA bits to read
+ // Configure LA probes as outputs from the cpu
+ reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0xFFFFFFFF; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0xFFFFFFFF; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0xFFFFFFFF; // [127:96]
+
+ reg_la_sample = 1;
+ // Now read them
+ if(reg_la2_data != 0x1DEADBEE){
+ reg_mprj_datal = 0x00000001;
+ }
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// SRAM 11
// Write DEADBEEF to address 1
// Send input packet
@@ -564,8 +678,7 @@
reg_la3_data = 0x10000B000;
reg_la3_data = 0x90000B000;
- /*
- // This is how to read from the LA
+ // Read from the LA
// This will trigger a sample of the LA bits to read
// Configure LA probes as outputs from the cpu
reg_la0_oenb = reg_la0_iena = 0xFFFFFFFF; // [31:0]
@@ -575,12 +688,16 @@
reg_la_sample = 1;
// Now read them
-
- if(reg_la0_data == 0x00000050){
- print("Passed!\n");
+ if(reg_la2_data != 0x1DEADBEE){
+ reg_mprj_datal = 0x00000003;
}
- */
- print("Done with tests\n");
+
+ // Configure LA as CPU output
+ reg_la0_oenb = reg_la0_iena = 0x00000000; // [31:0]
+ reg_la1_oenb = reg_la1_iena = 0x00000000; // [63:32]
+ reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64]
+ reg_la3_oenb = reg_la3_iena = 0x00000000; // [127:96]
+
// On end, set pin 0 to 0
reg_mprj_datal = 0x00000000;
}
diff --git a/verilog/dv/la_test/la_test_tb.v b/verilog/dv/la_test/la_test_tb.v
index 5b1ad56..b402295 100644
--- a/verilog/dv/la_test/la_test_tb.v
+++ b/verilog/dv/la_test/la_test_tb.v
@@ -68,16 +68,38 @@
wait(mprj_io_0 == 1'b0);
$display($time, " Saw bit 0: VCD stopping");
-
+ $display("Done with tests");
$finish;
end // initial begin
initial begin
- repeat (9) begin
- wait (mprj_io_1 == 1'b1);
- $display($time, " Read byte correctly using logic analyzer!");
- end
+ wait (mprj_io_1 == 1'b1);
+ $display($time, " Data mismatch while reading byte from SRAM 0!");
+
+ wait (mprj_io_1 == 1'b0);
+ $display($time, " Data mismatch while reading byte from SRAM 1!");
+
+ wait (mprj_io_1 == 1'b1);
+ $display($time, " Data mismatch while reading byte from SRAM 2!");
+
+ wait (mprj_io_1 == 1'b0);
+ $display($time, " Data mismatch while reading byte from SRAM 3!");
+
+ wait (mprj_io_1 == 1'b1);
+ $display($time, " Data mismatch while reading byte from SRAM 4!");
+
+ wait (mprj_io_1 == 1'b0);
+ $display($time, " Data mismatch while reading byte from SRAM 8!");
+
+ wait (mprj_io_1 == 1'b1);
+ $display($time, " Data mismatch while reading byte from SRAM 9!");
+
+ wait (mprj_io_1 == 1'b0);
+ $display($time, " Data mismatch while reading byte from SRAM 10!");
+
+ wait (mprj_io_1 == 1'b1);
+ $display($time, " Data mismatch while reading byte from SRAM 11!");
end
initial begin
//$dumpfile("foo.vcd");