fixed la test
diff --git a/verilog/dv/scan_controller_la/scan_controller.c b/verilog/dv/scan_controller_la/scan_controller.c
index 1547b92..633db68 100644
--- a/verilog/dv/scan_controller_la/scan_controller.c
+++ b/verilog/dv/scan_controller_la/scan_controller.c
@@ -32,6 +32,7 @@
#define FW_READY 12
#define FW_DONE 13
#define DATA_RX 14
+#define TB_CLK 15
void main()
{
@@ -59,11 +60,14 @@
reg_mprj_io_12 = GPIO_MODE_MGMT_STD_OUTPUT; // fw ready
reg_mprj_io_13 = GPIO_MODE_MGMT_STD_OUTPUT; // fw done
reg_mprj_io_14 = GPIO_MODE_MGMT_STD_OUTPUT; // data rx
+ reg_mprj_io_15 = GPIO_MODE_MGMT_STD_OUTPUT; // tb clk
/* Apply configuration */
reg_mprj_xfer = 1;
while (reg_mprj_xfer == 1);
+ CLR(reg_mprj_datal, DATA_RX);
+
reg_la0_iena = 0x0; // input enable on
reg_la0_oenb = 0xFFFFFFFF; // enable all of bank0 logic analyser outputs (ignore the name, 1 is on, 0 off)
@@ -87,15 +91,22 @@
// clock the data out of the modules into the chain
SET(reg_la0_data, SCAN);
SET(reg_la0_data, CLK);
- CLR(reg_la0_data, CLK);
CLR(reg_la0_data, SCAN);
+
// wait for some data to arrive
- for(i = 0; i < 8; i ++)
+ for(i = 0; i < 8*20; i ++)
{
SET(reg_la0_data, CLK);
CLR(reg_la0_data, CLK);
- if(GET(reg_la0_data_in, DATA_IN))
- reg_mprj_datal |= 1 << DATA_RX;
+
+ if(GET(reg_la0_data_in, DATA_IN)) // returns 1 even if we see x in the trace
+ SET(reg_mprj_datal, DATA_RX);
+ else
+ CLR(reg_mprj_datal, DATA_RX);
+
+ // sync to tb
+ SET(reg_mprj_datal, TB_CLK);
+ CLR(reg_mprj_datal, TB_CLK);
}
reg_mprj_datal |= 1 << FW_DONE;
diff --git a/verilog/dv/scan_controller_la/scan_controller.hex b/verilog/dv/scan_controller_la/scan_controller.hex
index eada8bf..050e302 100755
--- a/verilog/dv/scan_controller_la/scan_controller.hex
+++ b/verilog/dv/scan_controller_la/scan_controller.hex
@@ -12,7 +12,7 @@
03 2F 41 00 83 2F 01 00 13 01 01 04 73 00 20 30
17 01 00 F1 13 01 01 75 17 05 00 00 13 05 85 F6
73 10 55 30 13 05 00 00 93 05 00 00 17 06 00 00
-13 06 46 4D 63 0C B5 00 83 26 06 00 23 20 D5 00
+13 06 C6 55 63 0C B5 00 83 26 06 00 23 20 D5 00
13 05 45 00 13 06 46 00 6F F0 DF FE 13 05 00 00
93 05 80 00 63 08 B5 00 23 20 05 00 13 05 45 00
6F F0 5F FF 37 15 00 00 13 05 05 88 73 10 45 30
@@ -49,43 +49,52 @@
37 27 00 00 13 07 97 80 23 A0 E7 00 B7 07 00 26
93 87 87 05 37 27 00 00 13 07 97 80 23 A0 E7 00
B7 07 00 26 93 87 C7 05 37 27 00 00 13 07 97 80
-23 A0 E7 00 B7 07 00 26 13 07 10 00 23 A0 E7 00
-13 00 00 00 B7 07 00 26 03 A7 07 00 93 07 10 00
-E3 0A F7 FE B7 37 00 F0 93 87 C7 00 23 A0 07 00
-B7 37 00 F0 93 87 C7 01 13 07 F0 FF 23 A0 E7 00
-B7 07 00 26 93 87 C7 00 83 A6 07 00 B7 07 00 26
-93 87 C7 00 37 17 00 00 33 E7 E6 00 23 A0 E7 00
-B7 37 00 F0 93 87 C7 03 03 A7 07 00 B7 37 00 F0
-93 87 C7 03 13 67 27 00 23 A0 E7 00 B7 37 00 F0
-93 87 C7 03 03 A7 07 00 B7 37 00 F0 93 87 C7 03
-13 77 B7 FF 23 A0 E7 00 23 26 04 FE 6F 00 00 07
-B7 37 00 F0 93 87 C7 03 03 A7 07 00 B7 37 00 F0
-93 87 C7 03 13 67 17 00 23 A0 E7 00 B7 37 00 F0
-93 87 C7 03 03 A7 07 00 B7 37 00 F0 93 87 C7 03
-13 77 E7 FF 23 A0 E7 00 03 27 C4 FE 93 07 30 00
-63 10 F7 02 B7 37 00 F0 93 87 C7 03 03 A7 07 00
-B7 37 00 F0 93 87 C7 03 13 77 D7 FF 23 A0 E7 00
-83 27 C4 FE 93 87 17 00 23 26 F4 FE 03 27 C4 FE
-93 07 70 00 E3 D6 E7 F8 B7 37 00 F0 93 87 C7 03
-03 A7 07 00 B7 37 00 F0 93 87 C7 03 13 67 87 00
-23 A0 E7 00 B7 37 00 F0 93 87 C7 03 03 A7 07 00
-B7 37 00 F0 93 87 C7 03 13 77 77 FF 23 A0 E7 00
-B7 37 00 F0 93 87 C7 03 03 A7 07 00 B7 37 00 F0
-93 87 C7 03 13 67 47 00 23 A0 E7 00 B7 37 00 F0
-93 87 C7 03 03 A7 07 00 B7 37 00 F0 93 87 C7 03
-13 67 17 00 23 A0 E7 00 B7 37 00 F0 93 87 C7 03
-03 A7 07 00 B7 37 00 F0 93 87 C7 03 13 77 E7 FF
+23 A0 E7 00 B7 07 00 26 93 87 07 06 37 27 00 00
+13 07 97 80 23 A0 E7 00 B7 07 00 26 13 07 10 00
+23 A0 E7 00 13 00 00 00 B7 07 00 26 03 A7 07 00
+93 07 10 00 E3 0A F7 FE B7 07 00 26 93 87 C7 00
+83 A6 07 00 B7 07 00 26 93 87 C7 00 37 C7 FF FF
+13 07 F7 FF 33 F7 E6 00 23 A0 E7 00 B7 37 00 F0
+93 87 C7 00 23 A0 07 00 B7 37 00 F0 93 87 C7 01
+13 07 F0 FF 23 A0 E7 00 B7 07 00 26 93 87 C7 00
+83 A6 07 00 B7 07 00 26 93 87 C7 00 37 17 00 00
+33 E7 E6 00 23 A0 E7 00 B7 37 00 F0 93 87 C7 03
+03 A7 07 00 B7 37 00 F0 93 87 C7 03 13 67 27 00
23 A0 E7 00 B7 37 00 F0 93 87 C7 03 03 A7 07 00
B7 37 00 F0 93 87 C7 03 13 77 B7 FF 23 A0 E7 00
-23 26 04 FE 6F 00 C0 07 B7 37 00 F0 93 87 C7 03
+23 26 04 FE 6F 00 00 07 B7 37 00 F0 93 87 C7 03
03 A7 07 00 B7 37 00 F0 93 87 C7 03 13 67 17 00
23 A0 E7 00 B7 37 00 F0 93 87 C7 03 03 A7 07 00
B7 37 00 F0 93 87 C7 03 13 77 E7 FF 23 A0 E7 00
-B7 37 00 F0 93 87 C7 02 83 A7 07 00 93 F7 17 00
-63 82 07 02 B7 07 00 26 93 87 C7 00 83 A6 07 00
-B7 07 00 26 93 87 C7 00 37 47 00 00 33 E7 E6 00
-23 A0 E7 00 83 27 C4 FE 93 87 17 00 23 26 F4 FE
-03 27 C4 FE 93 07 70 00 E3 D0 E7 F8 B7 07 00 26
-93 87 C7 00 83 A6 07 00 B7 07 00 26 93 87 C7 00
-37 27 00 00 33 E7 E6 00 23 A0 E7 00 13 00 00 00
-03 24 C1 01 13 01 01 02 67 80 00 00
+03 27 C4 FE 93 07 30 00 63 10 F7 02 B7 37 00 F0
+93 87 C7 03 03 A7 07 00 B7 37 00 F0 93 87 C7 03
+13 77 D7 FF 23 A0 E7 00 83 27 C4 FE 93 87 17 00
+23 26 F4 FE 03 27 C4 FE 93 07 70 00 E3 D6 E7 F8
+B7 37 00 F0 93 87 C7 03 03 A7 07 00 B7 37 00 F0
+93 87 C7 03 13 67 87 00 23 A0 E7 00 B7 37 00 F0
+93 87 C7 03 03 A7 07 00 B7 37 00 F0 93 87 C7 03
+13 77 77 FF 23 A0 E7 00 B7 37 00 F0 93 87 C7 03
+03 A7 07 00 B7 37 00 F0 93 87 C7 03 13 67 47 00
+23 A0 E7 00 B7 37 00 F0 93 87 C7 03 03 A7 07 00
+B7 37 00 F0 93 87 C7 03 13 67 17 00 23 A0 E7 00
+B7 37 00 F0 93 87 C7 03 03 A7 07 00 B7 37 00 F0
+93 87 C7 03 13 77 B7 FF 23 A0 E7 00 23 26 04 FE
+6F 00 80 0E B7 37 00 F0 93 87 C7 03 03 A7 07 00
+B7 37 00 F0 93 87 C7 03 13 67 17 00 23 A0 E7 00
+B7 37 00 F0 93 87 C7 03 03 A7 07 00 B7 37 00 F0
+93 87 C7 03 13 77 E7 FF 23 A0 E7 00 B7 37 00 F0
+93 87 C7 02 83 A7 07 00 93 F7 17 00 63 84 07 02
+B7 07 00 26 93 87 C7 00 83 A6 07 00 B7 07 00 26
+93 87 C7 00 37 47 00 00 33 E7 E6 00 23 A0 E7 00
+6F 00 80 02 B7 07 00 26 93 87 C7 00 83 A6 07 00
+B7 07 00 26 93 87 C7 00 37 C7 FF FF 13 07 F7 FF
+33 F7 E6 00 23 A0 E7 00 B7 07 00 26 93 87 C7 00
+83 A6 07 00 B7 07 00 26 93 87 C7 00 37 87 00 00
+33 E7 E6 00 23 A0 E7 00 B7 07 00 26 93 87 C7 00
+83 A6 07 00 B7 07 00 26 93 87 C7 00 37 87 FF FF
+13 07 F7 FF 33 F7 E6 00 23 A0 E7 00 83 27 C4 FE
+93 87 17 00 23 26 F4 FE 03 27 C4 FE 93 07 F0 09
+E3 DA E7 F0 B7 07 00 26 93 87 C7 00 83 A6 07 00
+B7 07 00 26 93 87 C7 00 37 27 00 00 33 E7 E6 00
+23 A0 E7 00 13 00 00 00 03 24 C1 01 13 01 01 02
+67 80 00 00
diff --git a/verilog/dv/scan_controller_la/scan_controller_la.gtkw b/verilog/dv/scan_controller_la/scan_controller_la.gtkw
index cf6ba1a..f22c0bc 100644
--- a/verilog/dv/scan_controller_la/scan_controller_la.gtkw
+++ b/verilog/dv/scan_controller_la/scan_controller_la.gtkw
@@ -1,22 +1,22 @@
[*]
-[*] GTKWave Analyzer v3.3.103 (w)1999-2019 BSI
-[*] Sun Aug 28 03:36:21 2022
+[*] GTKWave Analyzer v3.4.0 (w)1999-2022 BSI
+[*] Fri Sep 2 13:07:34 2022
[*]
[dumpfile] "/home/matt/work/asic-workshop/shuttle7/tinytapeout-mpw7/verilog/dv/scan_controller_la/scan_controller_tb.vcd"
-[dumpfile_mtime] "Sun Aug 28 03:33:58 2022"
-[dumpfile_size] 1544765
+[dumpfile_mtime] "Fri Sep 2 13:04:53 2022"
+[dumpfile_size] 5702199
[savefile] "/home/matt/work/asic-workshop/shuttle7/tinytapeout-mpw7/verilog/dv/scan_controller_la/scan_controller_la.gtkw"
[timestart] 0
-[size] 1795 917
+[size] 2149 1120
[pos] -1 -1
-*-29.000000 1829000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+*-32.000000 3039550000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] scan_controller_tb.
[treeopen] scan_controller_tb.uut.
[treeopen] scan_controller_tb.uut.mprj.
[sst_width] 423
-[signals_width] 261
+[signals_width] 463
[sst_expanded] 1
-[sst_vpaned_height] 254
+[sst_vpaned_height] 323
@28
scan_controller_tb.clk
scan_controller_tb.driver_sel[1:0]
@@ -27,8 +27,8 @@
@800200
-la scan chain
@28
-scan_controller_tb.uut.mprj.scan_controller.la_scan_clk
scan_controller_tb.uut.mprj.scan_controller.la_scan_data_in
+scan_controller_tb.uut.mprj.scan_controller.la_scan_clk_in
scan_controller_tb.uut.mprj.scan_controller.la_scan_data_out
scan_controller_tb.uut.mprj.scan_controller.la_scan_latch_en
scan_controller_tb.uut.mprj.scan_controller.la_scan_select
@@ -36,8 +36,9 @@
-la scan chain
@800200
-scan chain
-@28
-scan_controller_tb.uut.mprj.scan_controller.scan_clk
+@29
+scan_controller_tb.uut.mprj.scan_controller.scan_clk_in
+scan_controller_tb.uut.mprj.scan_controller.scan_clk_out
scan_controller_tb.uut.mprj.scan_controller.scan_data_in
scan_controller_tb.uut.mprj.scan_controller.scan_data_out
scan_controller_tb.uut.mprj.scan_controller.scan_latch_en
diff --git a/verilog/dv/scan_controller_la/scan_controller_tb.v b/verilog/dv/scan_controller_la/scan_controller_tb.v
index 72b5efa..4e9c4f5 100644
--- a/verilog/dv/scan_controller_la/scan_controller_tb.v
+++ b/verilog/dv/scan_controller_la/scan_controller_tb.v
@@ -39,6 +39,7 @@
wire fw_ready = mprj_io[12];
wire fw_done = mprj_io[13];
wire data_rx = mprj_io[14];
+ wire tb_clk = mprj_io[15];
wire [1:0] driver_sel;
assign mprj_io[9:8] = driver_sel;
diff --git a/verilog/dv/scan_controller_la/test_scan_controller.py b/verilog/dv/scan_controller_la/test_scan_controller.py
index 6eadd7e..261b53a 100644
--- a/verilog/dv/scan_controller_la/test_scan_controller.py
+++ b/verilog/dv/scan_controller_la/test_scan_controller.py
@@ -27,14 +27,27 @@
dut.RSTB.value = 1
# wait with a timeout for the project to become active
- await with_timeout(RisingEdge(dut.fw_ready), 350, 'us')
+ await with_timeout(RisingEdge(dut.fw_ready), 550, 'us')
print("firmware ready")
- # wait
- await with_timeout(RisingEdge(dut.fw_done), 2800, 'us')
+ print("waiting for LA to clock the scan chain - warning this will take about 15 minutes")
+ # wait a long time
+ step = 0
+ NUM_IOS=8
+ NUM_DESIGNS=20
+ START_TEST=(NUM_DESIGNS-1)*NUM_IOS
- assert(dut.fw_done == 1)
- assert(dut.data_rx == 1)
+ for i in range(NUM_IOS*NUM_DESIGNS):
+ await with_timeout(FallingEdge(dut.tb_clk), 2, 'ms')
+ print("step {} of {} received data {}".format(step, NUM_IOS*NUM_DESIGNS, dut.data_rx.value))
+ step += 1
+ if i in [START_TEST, START_TEST+1, START_TEST+2, START_TEST+3]:
+ assert dut.data_rx.value == 1
+ elif i in [START_TEST+4, START_TEST+5, START_TEST+6, START_TEST+7]:
+ assert dut.data_rx.value == 0
+
+ await with_timeout(RisingEdge(dut.fw_done), 500, 'us')
+ assert(dut.fw_done.value == 1)
await ClockCycles(dut.clk, 100)