add self check in testbench for actuator state
diff --git a/Makefile b/Makefile
index eab7c0f..ad0a063 100644
--- a/Makefile
+++ b/Makefile
@@ -88,6 +88,18 @@
-e MCW_ROOT=$(MCW_ROOT) \
-u $$(id -u $$USER):$$(id -g $$USER) efabless/dv_setup:latest \
sh -c $(verify_command)
+docker_run_verify-sdf=\
+ docker run -v ${TARGET_PATH}:${TARGET_PATH} -v ${PDK_ROOT}:${PDK_ROOT} \
+ -v ${CARAVEL_ROOT}:${CARAVEL_ROOT} \
+ -e TARGET_PATH=${TARGET_PATH} -e PDK_ROOT=${PDK_ROOT} \
+ -e CARAVEL_ROOT=${CARAVEL_ROOT} \
+ -e TOOLS=/opt/riscv32i \
+ -e DESIGNS=$(TARGET_PATH) \
+ -e CORE_VERILOG_PATH=$(TARGET_PATH)/mgmt_core_wrapper/verilog \
+ -e GCC_PREFIX=riscv32-unknown-elf \
+ -e MCW_ROOT=$(MCW_ROOT) \
+ -u $$(id -u $$USER):$$(id -g $$USER) efabless/caravel_openlane:2021.11.23_01.42.34 \
+ sh -c $(verify_command)
.PHONY: harden
harden: $(blocks)
@@ -105,7 +117,7 @@
$(dv-targets-gl-sdf): SIM=GL_SDF
$(dv-targets-gl-sdf): verify-%-gl-sdf: $(dv_base_dependencies)
- $(docker_run_verify)
+ $(docker_run_verify-sdk)
clean-targets=$(blocks:%=clean-%)
.PHONY: $(clean-targets)
diff --git a/openlane/spi_mod/config.tcl b/openlane/spi_mod/config.tcl
index 63461de..cd2c048 100755
--- a/openlane/spi_mod/config.tcl
+++ b/openlane/spi_mod/config.tcl
@@ -28,7 +28,7 @@
set ::env(CLOCK_PORT) "clock"
set ::env(CLOCK_NET) "clock"
-set ::env(CLOCK_PERIOD) "20"
+set ::env(CLOCK_PERIOD) "12.5"
set ::env(FP_SIZING) absolute
set ::env(DIE_AREA) "0 0 900 900"
diff --git a/openlane/system_controler/config.tcl b/openlane/system_controler/config.tcl
index fc36bfe..1f90d0d 100755
--- a/openlane/system_controler/config.tcl
+++ b/openlane/system_controler/config.tcl
@@ -28,7 +28,7 @@
set ::env(CLOCK_PORT) "clock"
set ::env(CLOCK_NET) "clock"
-set ::env(CLOCK_PERIOD) "20"
+set ::env(CLOCK_PERIOD) "12.5"
set ::env(FP_SIZING) absolute
set ::env(DIE_AREA) "0 0 900 900"
diff --git a/verilog/dv/braille_driver_test0/Makefile b/verilog/dv/actuator_driver_test0/Makefile
similarity index 100%
rename from verilog/dv/braille_driver_test0/Makefile
rename to verilog/dv/actuator_driver_test0/Makefile
diff --git a/verilog/dv/braille_driver_test0/braille_driver_test0.c b/verilog/dv/actuator_driver_test0/actuator_driver_test0.c
similarity index 100%
rename from verilog/dv/braille_driver_test0/braille_driver_test0.c
rename to verilog/dv/actuator_driver_test0/actuator_driver_test0.c
diff --git a/verilog/dv/braille_driver_test0/braille_driver_test0_tb.v b/verilog/dv/actuator_driver_test0/actuator_driver_test0_tb.v
similarity index 85%
rename from verilog/dv/braille_driver_test0/braille_driver_test0_tb.v
rename to verilog/dv/actuator_driver_test0/actuator_driver_test0_tb.v
index c915065..18456bd 100644
--- a/verilog/dv/braille_driver_test0/braille_driver_test0_tb.v
+++ b/verilog/dv/actuator_driver_test0/actuator_driver_test0_tb.v
@@ -44,6 +44,8 @@
wire [1:0] h_COLS;
wire [9:0] h_dots;
wire [9:0] dots;
+ reg [9:0] b_set_state;
+ wire trigger_out_n;
assign mprj_io[37] = enable_n;
assign mprj_io[36] = trigger_in_n;
@@ -53,6 +55,7 @@
assign mprj_io[32] = ss_n;
assign mprj_io[31] = sclk;
+ assign trigger_out_n = mprj_io[16];
assign mprj_io[7] = 1'b0;
assign uart_tx = mprj_io[6];
assign mprj_io[5] = 1'b0;
@@ -78,9 +81,9 @@
task init_signals;
begin
tb_to_core = 1'b0;
- enable_n = 0;
- trigger_in_n = 0;
- latch_data_n = 0;
+ enable_n = 1;
+ trigger_in_n = 1;
+ latch_data_n = 1;
mosi = 0;
ss_n = 1;
wait_n_clks(50);
@@ -352,12 +355,50 @@
end
endtask
+ task check_b_state;
+ input [9:0] b_state;
+ reg [9:0] local_dots;
+ reg [9:0] local_h_dots;
+ begin
+ local_dots = dots;
+ local_h_dots = h_dots;
+ if({b_state[9],b_state[7],b_state[8],b_state[3],b_state[7:5],b_state[2:0]} === dots)
+ begin
+ $display("b_state dot test: PASSED");
+ $display("b_state:\t%b",b_state);
+ $display("trans :\t%b",{b_state[9],b_state[7],b_state[8],b_state[3],b_state[7:5],b_state[2:0]});
+ $display("dots :\t%b",dots);
+ end
+ else
+ begin
+ $display("b_state set faild");
+ $display("b_state:\t%b",b_state);
+ $display("trans :\t%b",{b_state[9],b_state[7],b_state[8],b_state[3],b_state[7:5],b_state[2:0]});
+ $display("dots :\t%b",dots);
+ end
+ if({b_state[9],b_state[7],b_state[8],b_state[3],b_state[7:5],b_state[2:0]} === h_dots)
+ begin
+ $display("b_state dot test: PASSED");
+ $display("b_state:\t%b",b_state);
+ $display("trans :\t%b",{b_state[9],b_state[7],b_state[8],b_state[3],b_state[7:5],b_state[2:0]});
+ $display("dots :\t%b",h_dots);
+ end
+ else
+ begin
+ $display("b_state set faild");
+ $display("b_state:\t%b",b_state);
+ $display("trans :\t%b",{b_state[9],b_state[7],b_state[8],b_state[3],b_state[7:5],b_state[2:0]});
+ $display("dots :\t%b",h_dots);
+ end
+ end
+ endtask
+
task write_b_state;
input [9:0] b_state;
begin
wait_n_clks(20);
write_data(8'h00,{6'b0,b_state});
- wait_n_clks(20);
+ wait_n_clks(100);
end
endtask
@@ -385,6 +426,33 @@
end
endtask
+ task advance_b_state_and_check;
+ input [9:0] b_state;
+ input past_state_bit;
+ input inv_bit;
+ integer j;
+ reg [31:0] pass;
+ begin
+ write_b_state(b_state);
+ @(posedge clock);
+ latch_data_n = 1'b1;
+ trigger_in_n = 1'b1;
+ wait_n_clks(20);
+ spi_shift({2'b0,past_state_bit,inv_bit,4'h8,24'b0},pass);
+ wait_n_clks(100);
+ latch_data_n = 0;
+ wait_n_clks(20);
+ latch_data_n = 1;
+ wait_n_clks(20);
+ trigger_in_n = 1'b0;
+ wait_n_clks(20);
+ trigger_in_n = 1'b1;
+ @(negedge trigger_out_n);
+ check_b_state(b_state);
+ wait_n_clks(20);
+ end
+ endtask
+
initial begin
init_signals();
@@ -394,8 +462,7 @@
wait_n_clks(50);
ccr_set();
check_ccr_set();
- write_b_state(10'b11_1111_1111);
- set_trigger_mode_no_wait(1'b0,1'b0);
+ advance_b_state_and_check(10'b11_1111_1111,1'b0,1'b0);
tb_to_core = 1'b1;
wait(core_to_tb === 1'b0);
tb_to_core = 1'b0;
diff --git a/verilog/dv/la_config_test/la_config_test_tb.v b/verilog/dv/la_config_test/la_config_test_tb.v
index d6fa0d5..5dbbbb0 100644
--- a/verilog/dv/la_config_test/la_config_test_tb.v
+++ b/verilog/dv/la_config_test/la_config_test_tb.v
@@ -87,12 +87,12 @@
initial begin
tb_to_core = 1'b0;
- enable_n = 0;
- trigger_in_n = 0;
- latch_data_n = 0;
- sclk = 0;
+ enable_n = 1;
+ trigger_in_n = 1;
+ latch_data_n = 1;
mosi = 0;
- ss_n = 0;
+ ss_n = 1;
+ wait_n_clks(50);
wait(core_to_tb === 1'b1);
$display("LA Test 1 started");
tb_to_core = 1'b1;
diff --git a/verilog/dv/memory_test/memory_test_tb.v b/verilog/dv/memory_test/memory_test_tb.v
index 9f5a64c..aae91ac 100644
--- a/verilog/dv/memory_test/memory_test_tb.v
+++ b/verilog/dv/memory_test/memory_test_tb.v
@@ -74,9 +74,9 @@
task init_signals;
begin
tb_to_core = 1'b0;
- enable_n = 0;
- trigger_in_n = 0;
- latch_data_n = 0;
+ enable_n = 1;
+ trigger_in_n = 1;
+ latch_data_n = 1;
mosi = 0;
ss_n = 1;
wait_n_clks(50);
diff --git a/verilog/dv/spi_transfer_test/spi_transfer_test_tb.v b/verilog/dv/spi_transfer_test/spi_transfer_test_tb.v
index 74730e9..7129da3 100644
--- a/verilog/dv/spi_transfer_test/spi_transfer_test_tb.v
+++ b/verilog/dv/spi_transfer_test/spi_transfer_test_tb.v
@@ -59,8 +59,9 @@
assign core_to_tb = mprj_io[0];
+ //always #12.5 clock <= (clock === 1'b0);
always #12.5 clock <= (clock === 1'b0);
- always #56.5 spi_clock <= ~spi_clock;
+ always #100 spi_clock <= ~spi_clock;
assign sclk = ~ss_n & spi_clock;
@@ -74,9 +75,9 @@
task init_signals;
begin
tb_to_core = 1'b0;
- enable_n = 0;
- trigger_in_n = 0;
- latch_data_n = 0;
+ enable_n = 1;
+ trigger_in_n = 1;
+ latch_data_n = 1;
mosi = 0;
ss_n = 1;
wait_n_clks(50);
diff --git a/verilog/includes/includes.gl+sdf.caravel_user_project b/verilog/includes/includes.gl+sdf.caravel_user_project
index 284a97c..f75e8f3 100644
--- a/verilog/includes/includes.gl+sdf.caravel_user_project
+++ b/verilog/includes/includes.gl+sdf.caravel_user_project
@@ -1,3 +1,3 @@
// Caravel user project includes
$USER_PROJECT_VERILOG/gl/user_project_wrapper.v
-$USER_PROJECT_VERILOG/gl/user_proj_example.v
+$USER_PROJECT_VERILOG/gl/braille_driver_controller.v
diff --git a/verilog/includes/includes.gl.caravel_user_project b/verilog/includes/includes.gl.caravel_user_project
index f5047d5..9c7efb3 100644
--- a/verilog/includes/includes.gl.caravel_user_project
+++ b/verilog/includes/includes.gl.caravel_user_project
@@ -1,3 +1,11 @@
# Caravel user project includes
-v $(USER_PROJECT_VERILOG)/gl/user_project_wrapper.v
--v $(USER_PROJECT_VERILOG)/gl/user_proj_example.v
+-v $(USER_PROJECT_VERILOG)/gl/braille_driver_controller.v
+#-v $(USER_PROJECT_VERILOG)/rtl/user_project_wrapper.v
+#-v $(USER_PROJECT_VERILOG)/rtl/braille_driver_controller.v
+#-v $(USER_PROJECT_VERILOG)/rtl/cells_controller.v
+#-v $(USER_PROJECT_VERILOG)/rtl/memory_controller.v
+#-v $(USER_PROJECT_VERILOG)/gl/spi_mod.v
+#-v $(USER_PROJECT_VERILOG)/rtl/sync_reg.v
+#-v $(USER_PROJECT_VERILOG)/gl/system_controller.v
+#-v $(USER_PROJECT_VERILOG)/rtl/top.v
diff --git a/verilog/rtl/braille_driver_controller.v b/verilog/rtl/braille_driver_controller.v
index de4a7cf..0352ea3 100644
--- a/verilog/rtl/braille_driver_controller.v
+++ b/verilog/rtl/braille_driver_controller.v
@@ -158,29 +158,29 @@
};
assign user_data_oeb = {
- 1'b1, // 37 enable_n : input
- 1'b1, // 36 trigger_in_n : input
- 1'b1, // 35 latch_data_n : input
- 1'b0, // 34 miso : output
- 1'b1, // 33 mosi : input
- 1'b1, // 32 ss_n : input
- 1'b1, // 31 sclk : input
- 1'b0, // 30 hbrige_0 : output
- 1'b0, // 29 hbrige_0 : output
- 1'b0, // 28 hbrige_0 : output
- 1'b0, // 27 hbrige_0 : output
- 1'b0, // 26 hbrige_0 : output
- 1'b0, // 25 hbrige_0 : output
- 1'b0, // 24 hbrige_0 : output
- 1'b0, // 23 hbrige_0 : output
- 1'b0, // 22 hbrige_0 : output
- 1'b0, // 21 hbrige_0 : output
- 1'b0, // 20 hbrige_0 : output
- 1'b0, // 19 hbrige_0 : output
- 1'b0, // 18 hbrige_0 : output
- 1'b0, // 17 hbrige_0 : output
- 1'b0, // 16 hbrige_0 : output
- 1'b0, // 15 triger_out_n : output
+ 1'b1, // 37 enable_n : input
+ 1'b1, // 36 trigger_in_n : input
+ 1'b1, // 35 latch_data_n : input
+ 1'b0, // 34 miso : output
+ 1'b1, // 33 mosi : input
+ 1'b1, // 32 ss_n : input
+ 1'b1, // 31 sclk : input
+ 1'b0, // 30 hbrige_0 : output
+ 1'b0, // 29 hbrige_0 : output
+ 1'b0, // 28 hbrige_0 : output
+ 1'b0, // 27 hbrige_0 : output
+ 1'b0, // 26 hbrige_0 : output
+ 1'b0, // 25 hbrige_0 : output
+ 1'b0, // 24 hbrige_0 : output
+ 1'b0, // 23 hbrige_0 : output
+ 1'b0, // 22 hbrige_0 : output
+ 1'b0, // 21 hbrige_0 : output
+ 1'b0, // 20 hbrige_0 : output
+ 1'b0, // 19 hbrige_0 : output
+ 1'b0, // 18 hbrige_0 : output
+ 1'b0, // 17 hbrige_0 : output
+ 1'b0, // 16 triger_out_n : output
+ 1'b1, // 15 n/a : input
~rows_enable[4], // 14 user_control_enable_6
~rows_enable[3], // 13 user_control_enable_5
~rows_enable[2], // 12 user_control_enable_4
@@ -206,6 +206,10 @@
assign sclk = io_in_reg[31];
top user_design (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.clock (clk ),
.enable_n (enable_n ),
.rows (rows ),
diff --git a/verilog/rtl/cells_controller.v b/verilog/rtl/cells_controller.v
index 7138e0b..f1c57ef 100644
--- a/verilog/rtl/cells_controller.v
+++ b/verilog/rtl/cells_controller.v
@@ -1,5 +1,9 @@
module cells_controller
(
+`ifdef USE_POWER_PINS
+ inout vccd1, // User area 1 1.8V supply
+ inout vssd1, // User area 1 digital ground
+`endif
input wire clock,
input wire [15:0] cells_state,
input wire system_enable_n,
diff --git a/verilog/rtl/memory_controller.v b/verilog/rtl/memory_controller.v
index 05a4415..66cf639 100644
--- a/verilog/rtl/memory_controller.v
+++ b/verilog/rtl/memory_controller.v
@@ -1,5 +1,9 @@
module memory_controller
(
+`ifdef USE_POWER_PINS
+ inout vccd1, // User area 1 1.8V supply
+ inout vssd1, // User area 1 digital ground
+`endif
input wire clock,
//input wire reset_sn,
input wire memory_enable_n,
diff --git a/verilog/rtl/spi_mod.v b/verilog/rtl/spi_mod.v
index 2d6b161..78cd3a4 100644
--- a/verilog/rtl/spi_mod.v
+++ b/verilog/rtl/spi_mod.v
@@ -1,5 +1,9 @@
module spi_mod
(
+`ifdef USE_POWER_PINS
+ inout vccd1, // User area 1 1.8V supply
+ inout vssd1, // User area 1 digital ground
+`endif
input wire clock,
input wire enable_sn,
input wire sclk,
diff --git a/verilog/rtl/sync_reg.v b/verilog/rtl/sync_reg.v
index 2bd91ba..061c4ed 100644
--- a/verilog/rtl/sync_reg.v
+++ b/verilog/rtl/sync_reg.v
@@ -1,4 +1,8 @@
module sync_n(
+`ifdef USE_POWER_PINS
+ inout vccd1, // User area 1 1.8V supply
+ inout vssd1, // User area 1 digital ground
+`endif
input wire signal_n,
output wire signal_sn,
input wire clock
diff --git a/verilog/rtl/system_controller.v b/verilog/rtl/system_controller.v
index 17aa61e..cdec421 100644
--- a/verilog/rtl/system_controller.v
+++ b/verilog/rtl/system_controller.v
@@ -1,8 +1,9 @@
-
-
-
module system_controller
(
+`ifdef USE_POWER_PINS
+ inout vccd1, // User area 1 1.8V supply
+ inout vssd1, // User area 1 digital ground
+`endif
input wire clock,
input wire enable_sn,
input wire update_done,
diff --git a/verilog/rtl/top.v b/verilog/rtl/top.v
index 14b71ef..500edfe 100644
--- a/verilog/rtl/top.v
+++ b/verilog/rtl/top.v
@@ -1,4 +1,8 @@
module top (
+`ifdef USE_POWER_PINS
+ inout vccd1, // User area 1 1.8V supply
+ inout vssd1, // User area 1 digital ground
+`endif
input wire clock,
input wire enable_n,
output wire [4:0] rows,
@@ -42,12 +46,20 @@
sync_n trigger_sync
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.signal_n (trigger_in_n ),
.signal_sn (trigger_in_sn ),
.clock (clock )
);
sync_n latch_sync
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.signal_n (latch_data_n ),
.signal_sn (latch_data_sn ),
.clock (clock )
@@ -55,6 +67,10 @@
sync_n enable_sync
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.signal_n (enable_n ),
.signal_sn (enable_sn ),
.clock (clock )
@@ -62,6 +78,10 @@
spi_mod spi_core
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.clock (clock ),
.enable_sn (enable_sn ),
.sclk (sclk ),
@@ -78,6 +98,10 @@
system_controller system_core
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.clock (clock ),
.enable_sn (enable_sn ),
.update_done (update_done ),
@@ -102,6 +126,10 @@
memory_controller mem_core
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.clock (clock ),
.memory_enable_n (memory_enable_n ),
.memory_write_n (memory_write_n ),
@@ -120,6 +148,10 @@
cells_controller cell_core
(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ), // User area 1 1.8V supply
+ .vssd1 (vssd1 ), // User area 1 digital ground
+`endif
.clock (clock ),
.cells_state (cell_state ),
.system_enable_n (system_enable_n ),