Dual port memories work properly
diff --git a/verilog/dv/la_test/la_test.c b/verilog/dv/la_test/la_test.c
index a11e1a4..30031e8 100644
--- a/verilog/dv/la_test/la_test.c
+++ b/verilog/dv/la_test/la_test.c
@@ -67,6 +67,81 @@
int clk = 0;
int i;
+void write_dp_sram(int sel) {
+ // Configure LA probes as outputs from the cpu
+ 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]
+
+ reg_la3_data = 0xA0000000 | sel << 12;
+ reg_la2_data = 0x10000000;
+ reg_la1_data = 0x13C00000;
+ reg_la0_data = 0x00000030;
+
+ // Toggle clock to load into SRAM register
+ reg_la3_data = 0x20000000 | sel << 12;
+ reg_la3_data = 0xA0000000 | sel << 12;
+
+ // Toggle clock to write SRAM
+ reg_la3_data = 0x08000000 | sel << 12;
+ reg_la3_data = 0x80000000 | sel << 12;
+
+ // Write 2 to address 2
+ // Send input packet
+ reg_la3_data = 0xA0000000 | sel << 12;
+ reg_la2_data = 0x20000000;
+ reg_la1_data = 0x23C00000;
+ reg_la0_data = 0x00000030;
+
+ // Toggle clock to load into SRAM register
+ reg_la3_data = 0x20000000 | sel << 12;
+ reg_la3_data = 0xA0000000 | sel << 12;
+
+ // Toggle clock to write SRAM
+ reg_la3_data = 0x08000000 | sel << 12;
+ reg_la3_data = 0x80000000 | sel << 12;
+}
+
+void read_dp_sram(int sel){
+ // Read back data
+ // Send input packet
+ reg_la3_data = 0xA0000000 | sel << 12;
+ reg_la2_data = 0x20000000;
+ reg_la1_data = 0x04000040;
+ reg_la0_data = 0x00000010;
+
+ // Toggle clock to load into SRAM register
+ reg_la3_data = 0x20000000 | sel << 12;
+ reg_la3_data = 0xA0000000 | sel << 12;
+
+ // Toggle clock to read SRAM
+ reg_la3_data = 0x08000000 | sel << 12;
+ reg_la3_data = 0x80000000 | sel << 12;
+
+ // Toggle clock to store into dout FF
+ reg_la3_data = 0x00000000 | sel << 12;
+ reg_la3_data = 0x80000000 | sel << 12;
+
+ // Toggle clock to replace din with dout
+ reg_la3_data = 0x10000000 | sel << 12;
+ reg_la3_data = 0x90000000 | sel << 12;
+
+ // 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 | 1 << (sel + 1);
+ }
+}
+
void main()
{
reg_spimaster_config = 0xa002; // Enable, prescaler = 2,
@@ -87,12 +162,6 @@
/* Apply configuration */
reg_mprj_xfer = 1;
while (reg_mprj_xfer == 1);
-
- // Configure LA probes as outputs from the cpu
- 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]
// To start, set pin 0 to 1
reg_mprj_datal = 0x00000001;
@@ -100,376 +169,32 @@
/* DUAL PORT MEMORIES */
//SRAM 0
- // Write 1 to address 1
- // Send input packet
- reg_la3_data = 0xA0000000;
- reg_la2_data = 0x10000000;
- reg_la1_data = 0x13C00000;
- reg_la0_data = 0x00000030;
+ write_dp_sram(0);
+ read_dp_sram(0);
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20000000;
- reg_la3_data = 0xA0000000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08000000;
- reg_la3_data = 0x80000000;
-
- // Write 2 to address 2
- // Send input packet
- reg_la3_data = 0xA0000000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x23C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20000000;
- reg_la3_data = 0xA0000000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08000000;
- reg_la3_data = 0x80000000;
-
- // Read back data
- // Send input packet
- reg_la3_data = 0xA0000000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x04000040;
- reg_la0_data = 0x00000010;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20000000;
- reg_la3_data = 0xA0000000;
-
- // Toggle clock to read SRAM
- reg_la3_data = 0x08000000;
- reg_la3_data = 0x80000000;
-
- // Toggle clock to store into dout FF
- reg_la3_data = 0x00000000;
- reg_la3_data = 0x80000000;
-
- // Toggle clock to replace din with dout
- 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
- reg_la3_data = 0xA0001000;
- reg_la2_data = 0x10000000;
- reg_la1_data = 0x13C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20001000;
- reg_la3_data = 0xA0001000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08001000;
- reg_la3_data = 0x80001000;
-
- // Write 2 to address 2
- // Send input packet
- reg_la3_data = 0xA0001000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x23C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20001000;
- reg_la3_data = 0xA0001000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08001000;
- reg_la3_data = 0x80001000;
-
- // Read back data
- // Send input packet
- reg_la3_data = 0xA0001000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x04000040;
- reg_la0_data = 0x00000010;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20001000;
- reg_la3_data = 0xA0001000;
-
- // Toggle clock to read SRAM
- reg_la3_data = 0x08001000;
- reg_la3_data = 0x80001000;
-
- // Toggle clock to store into dout FF
- reg_la3_data = 0x00001000;
- reg_la3_data = 0x80001000;
-
- // Toggle clock to replace din with dout
- 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 = 0x00000005;
- }
-
- // 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]
+ write_dp_sram(1);
+ read_dp_sram(1);
// SRAM 2
- // Write 1 to address 1
- // Send input packet
- reg_la3_data = 0xA0002000;
- reg_la2_data = 0x10000000;
- reg_la1_data = 0x13C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20002000;
- reg_la3_data = 0xA0002000;
+ write_dp_sram(2);
+ read_dp_sram(2);
- // Toggle clock to write SRAM
- reg_la3_data = 0x08002000;
- reg_la3_data = 0x80002000;
-
- // Write 2 to address 2
- // Send input packet
- reg_la3_data = 0xA0002000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x23C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20002000;
- reg_la3_data = 0xA0002000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08002000;
- reg_la3_data = 0x80002000;
-
- // Read back data
- // Send input packet
- reg_la3_data = 0xA0002000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x04000040;
- reg_la0_data = 0x00000010;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20002000;
- reg_la3_data = 0xA0002000;
-
- // Toggle clock to read SRAM
- reg_la3_data = 0x08002000;
- reg_la3_data = 0x80002000;
-
- // Toggle clock to store into dout FF
- reg_la3_data = 0x00002000;
- reg_la3_data = 0x80002000;
-
- // Toggle clock to replace din with dout
- 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 = 0x00000009;
- }
-
- // 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
- reg_la3_data = 0xA0003000;
- reg_la2_data = 0x10000000;
- reg_la1_data = 0x13C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20003000;
- reg_la3_data = 0xA0003000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08003000;
- reg_la3_data = 0x80003000;
-
- // Write 2 to address 2
- // Send input packet
- reg_la3_data = 0xA0003000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x23C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20003000;
- reg_la3_data = 0xA0003000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08003000;
- reg_la3_data = 0x80003000;
-
- // Read back data
- // Send input packet
- reg_la3_data = 0xA0003000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x04000040;
- reg_la0_data = 0x00000010;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20003000;
- reg_la3_data = 0xA0003000;
-
- // Toggle clock to read SRAM
- reg_la3_data = 0x08003000;
- reg_la3_data = 0x80003000;
-
- // Toggle clock to store into dout FF
- reg_la3_data = 0x00003000;
- reg_la3_data = 0x80003000;
-
- // Toggle clock to replace din with dout
- 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 = 0x00000011;
- }
-
- // 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]
+ write_dp_sram(3);
+ read_dp_sram(3);
// SRAM 4
- // Write 1 to address 1
- // Send input packet
- reg_la3_data = 0xA0004000;
- reg_la2_data = 0x10000000;
- reg_la1_data = 0x13C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20004000;
- reg_la3_data = 0xA0004000;
+ write_dp_sram(4);
+ read_dp_sram(4);
- // Toggle clock to write SRAM
- reg_la3_data = 0x08004000;
- reg_la3_data = 0x80004000;
-
- // Write 2 to address 2
- // Send input packet
- reg_la3_data = 0xA0004000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x23C00000;
- reg_la0_data = 0x00000030;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20004000;
- reg_la3_data = 0xA0004000;
-
- // Toggle clock to write SRAM
- reg_la3_data = 0x08004000;
- reg_la3_data = 0x80004000;
-
- // Read back data
- // Send input packet
- reg_la3_data = 0xA0004000;
- reg_la2_data = 0x20000000;
- reg_la1_data = 0x04000040;
- reg_la0_data = 0x00000010;
-
- // Toggle clock to load into SRAM register
- reg_la3_data = 0x20004000;
- reg_la3_data = 0xA0004000;
-
- // Toggle clock to read SRAM
- reg_la3_data = 0x08004000;
- reg_la3_data = 0x80004000;
-
- // Toggle clock to store into dout FF
- reg_la3_data = 0x00004000;
- reg_la3_data = 0x80004000;
-
- // Toggle clock to replace din with dout
- reg_la3_data = 0x100004000;
- reg_la3_data = 0x900004000;
-
- // Read from the LA
- // This will trigger a sample of the LA bits to read
+ /* SINGLE PORT MEMORIES */
// 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 = 0x000000021;
- }
-
- // 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