diff --git a/verilog/dv/actuator_driver_test1/Makefile b/verilog/dv/actuator_driver_test1/Makefile
new file mode 100644
index 0000000..3fd0b56
--- /dev/null
+++ b/verilog/dv/actuator_driver_test1/Makefile
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+
+ 
+PWDD := $(shell pwd)
+BLOCKS := $(shell basename $(PWDD))
+
+# ---- Include Partitioned Makefiles ----
+
+CONFIG = caravel_user_project
+
+
+include $(MCW_ROOT)/verilog/dv/make/env.makefile
+include $(MCW_ROOT)/verilog/dv/make/var.makefile
+include $(MCW_ROOT)/verilog/dv/make/cpu.makefile
+include $(MCW_ROOT)/verilog/dv/make/sim.makefile
+
+
diff --git a/verilog/dv/actuator_driver_test1/actuator_driver_test1.c b/verilog/dv/actuator_driver_test1/actuator_driver_test1.c
new file mode 100644
index 0000000..cd7c654
--- /dev/null
+++ b/verilog/dv/actuator_driver_test1/actuator_driver_test1.c
@@ -0,0 +1,230 @@
+/*
+ * SPDX-FileCopyrightText: 2020 Efabless Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+// This include is relative to $CARAVEL_PATH (see Makefile)
+#include <defs.h>
+#include <stub.c>
+
+// --------------------------------------------------------
+
+/*
+	MPRJ Logic Analyzer Test:
+		- Observes counter value through LA probes [31:0] 
+		- Sets counter initial value through LA probes [63:32]
+		- Flags when counter value exceeds 500 through the management SoC gpio
+		- Outputs message to the UART when the test concludes successfuly
+*/
+
+// LA 0
+#define MASK_DATA_0    0x00000001
+#define MASK_DATA_1    0x00000002
+#define MASK_DATA_2    0x00000004
+#define MASK_DATA_3    0x00000008
+#define MASK_DATA_4    0x00000010
+#define MASK_DATA_5    0x00000020
+#define MASK_DATA_6    0x00000040
+#define MASK_DATA_7    0x00000080
+#define MASK_DATA_8    0x00000100
+#define MASK_DATA_9    0x00000200
+#define MASK_DATA_10   0x00000400
+#define MASK_DATA_11   0x00000800
+#define MASK_DATA_12   0x00001000
+#define MASK_DATA_13   0x00002000
+#define MASK_DATA_14   0x00004000
+#define MASK_DATA_15   0x00008000
+#define MASK_DATA_16   0x00010000
+#define MASK_DATA_17   0x00020000
+#define MASK_DATA_18   0x00040000
+#define MASK_DATA_19   0x00080000
+#define MASK_DATA_20   0x00100000
+#define MASK_DATA_21   0x00200000
+#define MASK_DATA_22   0x00400000
+#define MASK_DATA_23   0x00800000
+#define MASK_DATA_24   0x01000000
+#define MASK_DATA_25   0x02000000
+#define MASK_DATA_26   0x04000000
+#define MASK_DATA_27   0x08000000
+#define MASK_DATA_28   0x10000000
+#define MASK_DATA_29   0x20000000
+#define MASK_DATA_30   0x40000000
+#define MASK_DATA_31   0x80000000
+
+// LA 1
+#define MASK_DATA_32   0x00000001
+#define MASK_DATA_33   0x00000002
+#define MASK_DATA_34   0x00000004
+#define MASK_DATA_35   0x00000008
+#define MASK_DATA_36   0x00000010
+#define MASK_DATA_37   0x00000020
+#define MASK_ENABLE_0  0x00000040
+#define MASK_ENABLE_1  0x00000080
+#define MASK_ENABLE_2  0x00000100
+#define MASK_ENABLE_3  0x00000200
+#define MASK_ENABLE_4  0x00000400
+#define MASK_ENABLE_5  0x00000800
+#define MASK_ENABLE_6  0x00001000
+#define MASK_ENABLE_7  0x00002000
+#define MASK_ENABLE_8  0x00004000
+#define MASK_ENABLE_9  0x00008000
+#define MASK_ENABLE_10 0x00010000
+#define MASK_ENABLE_11 0x00020000
+#define MASK_ENABLE_12 0x00040000
+#define MASK_ENABLE_13 0x00080000
+#define MASK_ENABLE_14 0x00100000
+#define MASK_ENABLE_15 0x00200000
+#define MASK_ENABLE_16 0x00400000
+#define MASK_ENABLE_17 0x00800000
+#define MASK_ENABLE_18 0x01000000
+#define MASK_ENABLE_19 0x02000000
+#define MASK_ENABLE_20 0x04000000
+#define MASK_ENABLE_21 0x08000000
+#define MASK_ENABLE_22 0x10000000
+#define MASK_ENABLE_23 0x20000000
+#define MASK_ENABLE_24 0x40000000
+#define MASK_ENABLE_25 0x80000000
+
+// LA 2
+#define MASK_ENABLE_26 0x00000001
+#define MASK_ENABLE_27 0x00000002
+#define MASK_ENABLE_28 0x00000004
+#define MASK_ENABLE_29 0x00000008
+#define MASK_ENABLE_30 0x00000010
+#define MASK_ENABLE_31 0x00000020
+#define MASK_ENABLE_32 0x00000040
+#define MASK_ENABLE_33 0x00000080
+#define MASK_ENABLE_34 0x00000100
+#define MASK_ENABLE_35 0x00000200
+#define MASK_ENABLE_36 0x00000400
+#define MASK_ENABLE_37 0x00000800
+void main()
+{
+	int j;
+
+	/* Set up the housekeeping SPI to be connected internally so	*/
+	/* that external pin changes don't affect it.			*/
+
+	// reg_spi_enable = 1;
+	// reg_spimaster_cs = 0x00000;
+
+	// reg_spimaster_control = 0x0801;
+
+	// reg_spimaster_control = 0xa002;	// Enable, prescaler = 2,
+                                        // connect to housekeeping SPI
+
+	// Connect the housekeeping SPI to the SPI master
+	// so that the CSB line is not left floating.  This allows
+	// all of the GPIO pins to be used for user functions.
+
+	// The upper GPIO pins are configured to be output
+	// and accessble to the management SoC.
+	// Used to flad the start/end of a test 
+	// The lower GPIO pins are configured to be output
+	// and accessible to the user project.  They show
+	// the project count value, although this test is
+	// designed to read the project count through the
+	// logic analyzer probes.
+	// I/O 6 is configured for the UART Tx line
+
+        reg_mprj_io_37 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 37 : input
+        reg_mprj_io_36 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 36 : input  
+        reg_mprj_io_35 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 35 : input
+        reg_mprj_io_34 = GPIO_MODE_USER_STD_OUTPUT;        // 34 : output
+        reg_mprj_io_33 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 33 : input
+        reg_mprj_io_32 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 32 : input
+        reg_mprj_io_31 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 31 : input
+        reg_mprj_io_30 = GPIO_MODE_USER_STD_OUTPUT;        // 30 : output
+        reg_mprj_io_29 = GPIO_MODE_USER_STD_OUTPUT;        // 29 : output
+        reg_mprj_io_28 = GPIO_MODE_USER_STD_OUTPUT;        // 28 : output
+        reg_mprj_io_27 = GPIO_MODE_USER_STD_OUTPUT;        // 27 : output
+        reg_mprj_io_26 = GPIO_MODE_USER_STD_OUTPUT;        // 26 : output
+        reg_mprj_io_25 = GPIO_MODE_USER_STD_OUTPUT;        // 25 : output
+        reg_mprj_io_24 = GPIO_MODE_USER_STD_OUTPUT;        // 24 : output
+        reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;        // 23 : output
+        reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;        // 22 : output
+        reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;        // 21 : output
+        reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;        // 20 : output
+        reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;        // 19 : output
+        reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;        // 18 : output
+        reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;        // 17 : output
+        reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;        // 16 : output
+        reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;        // 15 : output	  
+        reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;        // 14 : output
+        reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;        // 13 : output
+        reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;        // 12 : output
+        reg_mprj_io_11 = GPIO_MODE_USER_STD_OUTPUT;        // 11 : output
+        reg_mprj_io_10 = GPIO_MODE_USER_STD_OUTPUT;        // 10 : output
+        reg_mprj_io_9  = GPIO_MODE_USER_STD_OUTPUT;        // 9	 : output
+        reg_mprj_io_8  = GPIO_MODE_USER_STD_OUTPUT;        // 8	 : output
+        reg_mprj_io_7  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 7	 : input
+        reg_mprj_io_5  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 5	 : input
+        reg_mprj_io_4  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 4	 : input
+        reg_mprj_io_3  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 3	 : input
+        reg_mprj_io_2  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 2	 : input
+        reg_mprj_io_1  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 1	 : input
+        reg_mprj_io_0  = GPIO_MODE_USER_STD_OUTPUT;        // 0  : output         
+
+
+	// Set UART clock to 64 kbaud (enable before I/O configuration)
+	// reg_uart_clkdiv = 625;
+	reg_uart_enable = 1;
+
+    // Now, apply the configuration
+    reg_mprj_xfer = 1;
+    while (reg_mprj_xfer == 1);
+
+    // Configure LA probes [31:0], [127:64] as inputs to the cpu 
+	// Configure LA probes [63:32] as outputs from the cpu
+	//reg_la0_oenb = reg_la0_iena = 0x00000000;      // [31:0]
+	//reg_la1_oenb = reg_la1_iena = MASK_DATA_37;    // [63:32]
+	//reg_la2_oenb = reg_la2_iena = MASK_ENABLE_37;  // [95:64]
+	//reg_la3_oenb = reg_la3_iena = 0x80000000;      // [127:96]
+
+	reg_la0_oenb = reg_la0_iena = MASK_DATA_0;      // [31:0]
+	reg_la1_oenb = reg_la1_iena = MASK_ENABLE_0;    // [63:32]
+	reg_la2_oenb = reg_la2_iena = 0x00000000;  // [95:64]
+	reg_la3_oenb = reg_la3_iena = 0x00000000;      // [127:96]
+
+
+	reg_la0_data = MASK_DATA_0;
+	reg_la1_data = 0x00000000;
+	reg_la2_data = 0x00000000;
+	reg_la3_data = 0x00000000;
+
+
+	//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]
+
+	// Flag start of the test 
+	
+
+	// Configure LA probes from [63:32] as inputs to disable counter write
+	//reg_la1_oenb = reg_la1_iena = 0x00000000;    
+
+	while (1) {
+		if (reg_la0_data_in & MASK_DATA_1) {
+			break;
+		}
+	}
+	//print("\n");
+	//print("BEEP\n");
+	reg_la0_data = 0x00000000;
+	//print("\n");
+	//print("Monitor: Test 1 Passed\n\n");	// Makes simulation very long!
+}
+
diff --git a/verilog/dv/actuator_driver_test1/actuator_driver_test1_tb.v b/verilog/dv/actuator_driver_test1/actuator_driver_test1_tb.v
new file mode 100644
index 0000000..aca3fd4
--- /dev/null
+++ b/verilog/dv/actuator_driver_test1/actuator_driver_test1_tb.v
@@ -0,0 +1,758 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+
+`timescale 1 ns / 1 ps
+
+module actuator_driver_test1_tb;
+	reg clock;
+	reg spi_clock;
+    	reg RSTB;
+	reg CSB;
+
+	reg power1, power2;
+
+	wire gpio;
+	wire uart_tx;
+	wire [37:0] mprj_io;
+
+	wire core_to_tb;
+	reg  tb_to_core;
+
+        reg  enable_n;
+        reg  trigger_in_n;
+        reg  latch_data_n;
+        wire  sclk;
+        reg  mosi;
+        reg  ss_n;
+        wire miso;
+	reg [31:0] tmp_data;
+	wire [4:0] h_ROWS;
+	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; 	  
+	assign mprj_io[35] = 	latch_data_n;	
+	assign miso        = 	mprj_io[34];
+	assign mprj_io[33] =  	mosi; 	   	
+	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;
+	assign mprj_io[4] = 1'b0;
+	assign mprj_io[3] = 1'b1;
+	assign mprj_io[2] = 1'b0;
+	assign mprj_io[1] = tb_to_core;
+	assign core_to_tb = mprj_io[0];
+
+
+	always #12.5 clock <= (clock === 1'b0);
+	always #100 spi_clock <= ~spi_clock;
+
+
+  	assign sclk = ~ss_n & spi_clock;
+
+	initial begin
+		clock 		= 0;
+      		spi_clock     	= 1;
+	end
+
+	// Set the init state of input pins to asic
+	task init_signals;
+      	begin
+		tb_to_core 	= 1'b0;
+        	enable_n 	= 1;
+        	trigger_in_n	= 1;
+        	latch_data_n	= 1;
+        	mosi 		= 0;
+        	ss_n		= 1;
+		wait_n_clks(50);
+    	end
+  	endtask
+	// set the enable signal to chip
+	task enable_chip;
+	begin
+	      	enable_n      = 0; 
+	end
+	endtask
+
+	// unset the enable signal to chip
+	task disable_chip;
+	begin
+	      	enable_n      = 1; 
+	end
+	endtask
+	
+	// pass time 
+  	task wait_n_clks;
+    	input integer i;
+    	integer j;
+    	begin
+      		for(j=0;j<i;j=j+1)
+        	@(posedge clock);
+    	end
+  	endtask
+
+	initial begin
+		$dumpfile("actuator_driver_test1.vcd");
+		$dumpvars(0, actuator_driver_test1_tb);
+
+		// Repeat cycles of 1000 clock edges as needed to complete testbench
+		repeat (400) begin
+			repeat (1000) @(posedge clock);
+			//$display("+1000 cycles");
+		end
+		$display("%c[1;31m",27);
+		`ifdef GL
+			$display ("Monitor: Timeout, Test LA (GL) Failed");
+		`else
+			$display ("Monitor: Timeout, Test LA (RTL) Failed");
+		`endif
+		$display("%c[0m",27);
+		$finish;
+	end
+	
+	// transfer data on spi bus 
+  	task spi_shift;
+    	input [31:0] data_in;
+    	output [31:0] data_out;
+    	integer j;
+    	begin
+      		for(j=0;j<32;j=j+1)
+      		begin
+        		@(negedge spi_clock);
+        		ss_n = 1'b0;
+        		mosi = data_in[31];
+        		data_in = data_in << 1;
+        		@(posedge spi_clock)
+        		data_out = {data_out[31:0],miso};
+      		end
+      		@(negedge spi_clock);
+      		ss_n = 1'b1;
+      		@(posedge clock);
+      		@(posedge clock);
+    	end
+  	endtask
+
+  	task write_data;
+    	input [7:0] address;
+    	input [15:0] data;
+    	reg [31:0] pass;
+    	begin
+      		@(posedge clock); 
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+      		spi_shift({8'h02,address,data},pass);
+      		wait_n_clks(10);
+      		latch_data_n = 0;
+      		wait_n_clks(100);
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task read_data;
+    	input [7:0] address;
+    	output [15:0] data_out;
+    	reg [31:0] pass;
+    	begin
+      		@(posedge clock); 
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+      		spi_shift({8'h01,address,16'b0},pass);
+      		wait_n_clks(100);
+      		latch_data_n = 0;
+      		wait_n_clks(20);
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+      		spi_shift(32'b0,data_out);
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+
+	task memory_test;
+    	input [7:0] address;
+	input [15:0] data;
+	reg [15:0] tmp;
+	begin
+		tmp = data;
+		write_data(address,tmp);
+		wait_n_clks(100);
+		read_data(address,tmp);
+		if(data === tmp)
+		begin
+			$display("SPI MEMORY TEST passed");
+			$display("address:%h\tdata:%h",address,tmp);
+		end
+		else
+		begin
+			$display("SPI MEMORY Test Failed");
+			$display("address:%h\tdata:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+
+	end
+	endtask
+
+  	task write_ccr0;
+    	input [31:0] data;
+    	integer j;
+    	begin
+      		wait_n_clks(20);
+      		write_data(8'h02,data[15:0]);
+      		wait_n_clks(20);
+      		write_data(8'h03,data[31:16]);
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task write_ccr1;
+    	input [31:0] data;
+    	integer j;
+    	begin
+    		wait_n_clks(20);
+    		write_data(8'h04,data[15:0]);
+    		wait_n_clks(20);
+    		write_data(8'h05,data[31:16]);
+    		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task write_ccr2;
+    	input [31:0] data;
+    	integer j;
+    	begin
+    		wait_n_clks(20);
+    		write_data(8'h06,data[15:0]);
+    		wait_n_clks(20);
+    		write_data(8'h07,data[31:16]);
+    		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task write_ccr3;
+    	input [31:0] data;
+    	integer j;
+    	begin
+    		wait_n_clks(20);
+    		write_data(8'h08,data[15:0]);
+    		wait_n_clks(20);
+    		write_data(8'h09,data[31:16]);
+    		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task ccr_set;
+    	begin
+		$display("Writing CCR0");
+      		write_ccr0(32'h00_00_00_04);
+		$display("Writing CCR1");
+      		write_ccr1(32'h00_00_00_0f);
+		$display("Writing CCR2");
+      		write_ccr2(32'h00_00_00_80);
+		$display("Writing CCR3");
+      		write_ccr3(32'h00_00_00_f0);
+    	end
+  	endtask
+
+	task check_ccr_set;
+	reg [15:0] tmp;
+	reg [7:0] address;
+	begin
+		address = 8'h02;
+		read_data(address,tmp);
+		if(16'h00_04 === tmp)
+		begin
+			$display("CCR0 Low bit set PASSED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR0 Low bit set FAILED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h03;
+		read_data(address,tmp);
+		if(16'h00_00 === tmp)
+		begin
+			$display("CCR0 High bit set PASSED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR0 High bit set FAILED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h04;
+		read_data(address,tmp);
+		if(16'h00_0f === tmp)
+		begin
+			$display("CCR1 Low bit set PASSED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR1 Low bit set FAILED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h05;
+		read_data(address,tmp);
+		if(16'h00_00 === tmp)
+		begin
+			$display("CCR1 High bit set PASSED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR1 High bit set FAILED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h06;
+		read_data(address,tmp);
+		if(16'h00_80 === tmp)
+		begin
+			$display("CCR2 Low bit set PASSED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR2 Low bit set FAILED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h07;
+		read_data(address,tmp);
+		if(16'h00_00 === tmp)
+		begin
+			$display("CCR2 High bit set PASSED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR2 High bit set FAILED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		
+	end
+	endtask
+
+  	task check_b_state;
+    	input [9:0] b_state;
+	reg [9:0] translation_dots ;
+    	begin
+		$display("########## TEST ############");
+		{translation_dots[9],translation_dots[4],translation_dots[8],translation_dots[3],translation_dots[7:5],translation_dots[2:0]} = b_state;
+		if((translation_dots === dots) && (translation_dots === h_dots))
+		begin
+			$display("b_state dot test: PASSED");
+			$display("b_state:\t%b",b_state);
+			$display("trans  :\t%b",translation_dots);
+			$display("dots   :\t%b",dots);
+			$display("h_dots :\t%b",h_dots);
+		end
+		else
+		begin
+			$display("b_state set faild");
+			$display("b_state:\t%b",b_state);
+			$display("trans  :\t%b",translation_dots);
+			$display("dots   :\t%b",dots);
+			$display("h_dots :\t%b",h_dots);
+			$display("%c[0m",27);
+			$finish;
+		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(100);
+    	end
+  	endtask
+
+  	task set_trigger_mode_no_wait;
+    	input past_state_bit;
+    	input inv_bit;
+    	integer j;
+    	reg [31:0] pass;
+    	begin
+      		@(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);
+      		wait_n_clks(20);
+    	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
+
+	task to_high_test;
+	integer i;
+	reg [9:0] state;
+	begin
+		state = 10'b0;
+		advance_b_state_and_check(state,1'b0,1'b0);
+		for(i=0;i<11;i=i+1)
+		begin
+			state = 10'b00_0000_0001 << i;
+		advance_b_state_and_check(state,1'b0,1'b0);
+		end
+		
+	end
+	endtask
+
+	task to_low_test;
+	integer i;
+	reg [9:0] state;
+	begin
+		state = 10'b11_1111_1111;
+		advance_b_state_and_check(state,1'b0,1'b0);
+		for(i=0;i<11;i=i+1)
+		begin
+			state = ~(10'b00_0000_0001 << i);
+		advance_b_state_and_check(state,1'b0,1'b0);
+		end
+		
+	end
+	endtask
+
+
+	initial begin
+		init_signals();
+		wait(core_to_tb === 1'b1);
+		$display("LA Test 1 started");
+		enable_chip();
+		wait_n_clks(50);
+		ccr_set();
+		check_ccr_set();
+		to_high_test();
+		to_low_test();
+		tb_to_core = 1'b1;
+		wait(core_to_tb === 1'b0);
+		tb_to_core = 1'b0;
+		#10000;
+		$finish;
+	end
+
+	initial begin
+		RSTB <= 1'b0;
+		CSB  <= 1'b1;		// Force CSB high
+		#2000;
+		RSTB <= 1'b1;	    	// Release reset
+		#170000;
+		CSB = 1'b0;		// CSB can be released
+	end
+
+	initial begin		// Power-up sequence
+		power1 <= 1'b0;
+		power2 <= 1'b0;
+		#200;
+		power1 <= 1'b1;
+		#200;
+		power2 <= 1'b1;
+	end
+
+	wire flash_csb;
+	wire flash_clk;
+	wire flash_io0;
+	wire flash_io1;
+
+	wire VDD1V8;
+	wire VDD3V3;
+	wire VSS;
+    
+	assign VDD3V3 = power1;
+	assign VDD1V8 = power2;
+	assign VSS = 1'b0;
+
+	//assign mprj_io[3] = 1;  // Force CSB high.
+	//assign mprj_io[0] = 0;  // Disable debug mode
+
+	caravel uut (
+		.vddio	  (VDD3V3),
+		.vddio_2  (VDD3V3),
+		.vssio	  (VSS),
+		.vssio_2  (VSS),
+		.vdda	  (VDD3V3),
+		.vssa	  (VSS),
+		.vccd	  (VDD1V8),
+		.vssd	  (VSS),
+		.vdda1    (VDD3V3),
+		.vdda1_2  (VDD3V3),
+		.vdda2    (VDD3V3),
+		.vssa1	  (VSS),
+		.vssa1_2  (VSS),
+		.vssa2	  (VSS),
+		.vccd1	  (VDD1V8),
+		.vccd2	  (VDD1V8),
+		.vssd1	  (VSS),
+		.vssd2	  (VSS),
+		.clock    (clock),
+		.gpio     (gpio),
+		.mprj_io  (mprj_io),
+		.flash_csb(flash_csb),
+		.flash_clk(flash_clk),
+		.flash_io0(flash_io0),
+		.flash_io1(flash_io1),
+		.resetb	  (RSTB)
+	);
+
+	spiflash #(
+		.FILENAME("actuator_driver_test1.hex")
+	) spiflash (
+		.csb(flash_csb),
+		.clk(flash_clk),
+		.io0(flash_io0),
+		.io1(flash_io1),
+		.io2(),			// not used
+		.io3()			// not used
+	);
+
+	// Testbench UART
+	tbuart tbuart (
+		.ser_rx(uart_tx)
+	);
+
+	hbrige_cells hbrige_drivers_ic(
+	  .rows(mprj_io[30:21]),
+	  .cols(mprj_io[20:17]),
+	  .ROWS(h_ROWS),
+	  .COLS(h_COLS)
+	);
+	actuator_cell h_cell_ic(
+	  .cols(h_COLS),
+	  .rows(h_ROWS),
+	  .dots(h_dots)
+	);
+
+	actuator_cell cell_ic(
+	  .cols(mprj_io[9:8]),
+	  .rows(mprj_io[14:10]),
+	  .dots(dots)
+	);
+	
+
+endmodule
+
+module hbrige(
+  output reg line,
+  input wire p,
+  input wire n
+);
+  always@(*)
+  begin
+    case({p,n})
+        2'b00: line = 1'b0;
+        2'b11: line = 1'b1;
+        2'b10: line = 1'bz;
+        2'b01: line = 1'bx;
+    endcase
+  end
+endmodule
+
+module hbrige_cells(
+  input wire [9:0] rows,
+  input wire [3:0] cols,
+  output wire [4:0] ROWS,
+  output wire [1:0] COLS
+);
+
+  wire [4:0] MEM [1:0];
+  genvar i;
+  genvar j;
+
+  for(i=0;i<2;i=i+1)
+  begin
+    hbrige brige_line(
+      .line (COLS[i]),
+      .p    (cols[2*i+1]),
+      .n    (cols[2*i])
+    );
+  end
+  for(j=0;j<5;j=j+1)
+  begin
+    hbrige brige_line(
+      .line (ROWS[j]),
+      .p    (rows[2*j+1]),
+      .n    (rows[2*j])
+    );
+  end
+
+  for(i=0;i<2;i=i+1)
+  begin
+    for(j=0;j<5;j=j+1)
+    begin
+      assign MEM[i][j] = ((ROWS[j] === 1'bz) || (COLS[i] === 1'bz)) ? 1'bz : ((ROWS[j] == 1'b1) && (COLS[i] == 1'b0)) ? 1'b1 : ((ROWS[j] == 1'b0) && (COLS[i] == 1'b1)) ? 1'b0 : 1'bx;
+    end
+  end
+
+endmodule
+
+
+module actuator_cell(
+  input wire [1:0] cols,
+  input wire [4:0] rows,
+  output reg [9:0] dots
+);
+
+  always@(*)
+  begin
+    dots[0] = dots[0];
+    if((cols[0] === 1'b0) && (rows[0] === 1'b1))
+      dots[0] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[0] === 1'b0))
+      dots[0] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[1] = dots[1];
+    if((cols[0] === 1'b0) && (rows[1] === 1'b1))
+      dots[1] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[1] === 1'b0))
+      dots[1] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[2] = dots[2];
+    if((cols[0] === 1'b0) && (rows[2] === 1'b1))
+      dots[2] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[2] === 1'b0))
+      dots[2] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[3] = dots[3];
+    if((cols[0] === 1'b0) && (rows[3] === 1'b1))
+      dots[3] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[3] === 1'b0))
+      dots[3] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[4] = dots[4];
+    if((cols[0] === 1'b0) && (rows[4] === 1'b1))
+      dots[4] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[4] === 1'b0))
+      dots[4] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[5] = dots[5];
+    if((cols[1] === 1'b0) && (rows[0] === 1'b1))
+      dots[5] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[0] === 1'b0))
+      dots[5] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[6] = dots[6];
+    if((cols[1] === 1'b0) && (rows[1] === 1'b1))
+      dots[6] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[1] === 1'b0))
+      dots[6] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[7] = dots[7];
+    if((cols[1] === 1'b0) && (rows[2] === 1'b1))
+      dots[7] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[2] === 1'b0))
+      dots[7] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[8] = dots[8];
+    if((cols[1] === 1'b0) && (rows[3] === 1'b1))
+      dots[8] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[3] === 1'b0))
+      dots[8] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[9] = dots[9];
+    if((cols[1] === 1'b0) && (rows[4] === 1'b1))
+      dots[9] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[4] === 1'b0))
+      dots[9] = 1'b0;
+  end
+endmodule
+`default_nettype wire
diff --git a/verilog/dv/actuator_driver_test2/Makefile b/verilog/dv/actuator_driver_test2/Makefile
new file mode 100644
index 0000000..3fd0b56
--- /dev/null
+++ b/verilog/dv/actuator_driver_test2/Makefile
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+
+ 
+PWDD := $(shell pwd)
+BLOCKS := $(shell basename $(PWDD))
+
+# ---- Include Partitioned Makefiles ----
+
+CONFIG = caravel_user_project
+
+
+include $(MCW_ROOT)/verilog/dv/make/env.makefile
+include $(MCW_ROOT)/verilog/dv/make/var.makefile
+include $(MCW_ROOT)/verilog/dv/make/cpu.makefile
+include $(MCW_ROOT)/verilog/dv/make/sim.makefile
+
+
diff --git a/verilog/dv/actuator_driver_test2/actuator_driver_test2.c b/verilog/dv/actuator_driver_test2/actuator_driver_test2.c
new file mode 100644
index 0000000..cd7c654
--- /dev/null
+++ b/verilog/dv/actuator_driver_test2/actuator_driver_test2.c
@@ -0,0 +1,230 @@
+/*
+ * SPDX-FileCopyrightText: 2020 Efabless Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+// This include is relative to $CARAVEL_PATH (see Makefile)
+#include <defs.h>
+#include <stub.c>
+
+// --------------------------------------------------------
+
+/*
+	MPRJ Logic Analyzer Test:
+		- Observes counter value through LA probes [31:0] 
+		- Sets counter initial value through LA probes [63:32]
+		- Flags when counter value exceeds 500 through the management SoC gpio
+		- Outputs message to the UART when the test concludes successfuly
+*/
+
+// LA 0
+#define MASK_DATA_0    0x00000001
+#define MASK_DATA_1    0x00000002
+#define MASK_DATA_2    0x00000004
+#define MASK_DATA_3    0x00000008
+#define MASK_DATA_4    0x00000010
+#define MASK_DATA_5    0x00000020
+#define MASK_DATA_6    0x00000040
+#define MASK_DATA_7    0x00000080
+#define MASK_DATA_8    0x00000100
+#define MASK_DATA_9    0x00000200
+#define MASK_DATA_10   0x00000400
+#define MASK_DATA_11   0x00000800
+#define MASK_DATA_12   0x00001000
+#define MASK_DATA_13   0x00002000
+#define MASK_DATA_14   0x00004000
+#define MASK_DATA_15   0x00008000
+#define MASK_DATA_16   0x00010000
+#define MASK_DATA_17   0x00020000
+#define MASK_DATA_18   0x00040000
+#define MASK_DATA_19   0x00080000
+#define MASK_DATA_20   0x00100000
+#define MASK_DATA_21   0x00200000
+#define MASK_DATA_22   0x00400000
+#define MASK_DATA_23   0x00800000
+#define MASK_DATA_24   0x01000000
+#define MASK_DATA_25   0x02000000
+#define MASK_DATA_26   0x04000000
+#define MASK_DATA_27   0x08000000
+#define MASK_DATA_28   0x10000000
+#define MASK_DATA_29   0x20000000
+#define MASK_DATA_30   0x40000000
+#define MASK_DATA_31   0x80000000
+
+// LA 1
+#define MASK_DATA_32   0x00000001
+#define MASK_DATA_33   0x00000002
+#define MASK_DATA_34   0x00000004
+#define MASK_DATA_35   0x00000008
+#define MASK_DATA_36   0x00000010
+#define MASK_DATA_37   0x00000020
+#define MASK_ENABLE_0  0x00000040
+#define MASK_ENABLE_1  0x00000080
+#define MASK_ENABLE_2  0x00000100
+#define MASK_ENABLE_3  0x00000200
+#define MASK_ENABLE_4  0x00000400
+#define MASK_ENABLE_5  0x00000800
+#define MASK_ENABLE_6  0x00001000
+#define MASK_ENABLE_7  0x00002000
+#define MASK_ENABLE_8  0x00004000
+#define MASK_ENABLE_9  0x00008000
+#define MASK_ENABLE_10 0x00010000
+#define MASK_ENABLE_11 0x00020000
+#define MASK_ENABLE_12 0x00040000
+#define MASK_ENABLE_13 0x00080000
+#define MASK_ENABLE_14 0x00100000
+#define MASK_ENABLE_15 0x00200000
+#define MASK_ENABLE_16 0x00400000
+#define MASK_ENABLE_17 0x00800000
+#define MASK_ENABLE_18 0x01000000
+#define MASK_ENABLE_19 0x02000000
+#define MASK_ENABLE_20 0x04000000
+#define MASK_ENABLE_21 0x08000000
+#define MASK_ENABLE_22 0x10000000
+#define MASK_ENABLE_23 0x20000000
+#define MASK_ENABLE_24 0x40000000
+#define MASK_ENABLE_25 0x80000000
+
+// LA 2
+#define MASK_ENABLE_26 0x00000001
+#define MASK_ENABLE_27 0x00000002
+#define MASK_ENABLE_28 0x00000004
+#define MASK_ENABLE_29 0x00000008
+#define MASK_ENABLE_30 0x00000010
+#define MASK_ENABLE_31 0x00000020
+#define MASK_ENABLE_32 0x00000040
+#define MASK_ENABLE_33 0x00000080
+#define MASK_ENABLE_34 0x00000100
+#define MASK_ENABLE_35 0x00000200
+#define MASK_ENABLE_36 0x00000400
+#define MASK_ENABLE_37 0x00000800
+void main()
+{
+	int j;
+
+	/* Set up the housekeeping SPI to be connected internally so	*/
+	/* that external pin changes don't affect it.			*/
+
+	// reg_spi_enable = 1;
+	// reg_spimaster_cs = 0x00000;
+
+	// reg_spimaster_control = 0x0801;
+
+	// reg_spimaster_control = 0xa002;	// Enable, prescaler = 2,
+                                        // connect to housekeeping SPI
+
+	// Connect the housekeeping SPI to the SPI master
+	// so that the CSB line is not left floating.  This allows
+	// all of the GPIO pins to be used for user functions.
+
+	// The upper GPIO pins are configured to be output
+	// and accessble to the management SoC.
+	// Used to flad the start/end of a test 
+	// The lower GPIO pins are configured to be output
+	// and accessible to the user project.  They show
+	// the project count value, although this test is
+	// designed to read the project count through the
+	// logic analyzer probes.
+	// I/O 6 is configured for the UART Tx line
+
+        reg_mprj_io_37 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 37 : input
+        reg_mprj_io_36 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 36 : input  
+        reg_mprj_io_35 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 35 : input
+        reg_mprj_io_34 = GPIO_MODE_USER_STD_OUTPUT;        // 34 : output
+        reg_mprj_io_33 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 33 : input
+        reg_mprj_io_32 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 32 : input
+        reg_mprj_io_31 = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 31 : input
+        reg_mprj_io_30 = GPIO_MODE_USER_STD_OUTPUT;        // 30 : output
+        reg_mprj_io_29 = GPIO_MODE_USER_STD_OUTPUT;        // 29 : output
+        reg_mprj_io_28 = GPIO_MODE_USER_STD_OUTPUT;        // 28 : output
+        reg_mprj_io_27 = GPIO_MODE_USER_STD_OUTPUT;        // 27 : output
+        reg_mprj_io_26 = GPIO_MODE_USER_STD_OUTPUT;        // 26 : output
+        reg_mprj_io_25 = GPIO_MODE_USER_STD_OUTPUT;        // 25 : output
+        reg_mprj_io_24 = GPIO_MODE_USER_STD_OUTPUT;        // 24 : output
+        reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;        // 23 : output
+        reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;        // 22 : output
+        reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;        // 21 : output
+        reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;        // 20 : output
+        reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;        // 19 : output
+        reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;        // 18 : output
+        reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;        // 17 : output
+        reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;        // 16 : output
+        reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;        // 15 : output	  
+        reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;        // 14 : output
+        reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;        // 13 : output
+        reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;        // 12 : output
+        reg_mprj_io_11 = GPIO_MODE_USER_STD_OUTPUT;        // 11 : output
+        reg_mprj_io_10 = GPIO_MODE_USER_STD_OUTPUT;        // 10 : output
+        reg_mprj_io_9  = GPIO_MODE_USER_STD_OUTPUT;        // 9	 : output
+        reg_mprj_io_8  = GPIO_MODE_USER_STD_OUTPUT;        // 8	 : output
+        reg_mprj_io_7  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 7	 : input
+        reg_mprj_io_5  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 5	 : input
+        reg_mprj_io_4  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 4	 : input
+        reg_mprj_io_3  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 3	 : input
+        reg_mprj_io_2  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 2	 : input
+        reg_mprj_io_1  = GPIO_MODE_USER_STD_INPUT_NOPULL;  // 1	 : input
+        reg_mprj_io_0  = GPIO_MODE_USER_STD_OUTPUT;        // 0  : output         
+
+
+	// Set UART clock to 64 kbaud (enable before I/O configuration)
+	// reg_uart_clkdiv = 625;
+	reg_uart_enable = 1;
+
+    // Now, apply the configuration
+    reg_mprj_xfer = 1;
+    while (reg_mprj_xfer == 1);
+
+    // Configure LA probes [31:0], [127:64] as inputs to the cpu 
+	// Configure LA probes [63:32] as outputs from the cpu
+	//reg_la0_oenb = reg_la0_iena = 0x00000000;      // [31:0]
+	//reg_la1_oenb = reg_la1_iena = MASK_DATA_37;    // [63:32]
+	//reg_la2_oenb = reg_la2_iena = MASK_ENABLE_37;  // [95:64]
+	//reg_la3_oenb = reg_la3_iena = 0x80000000;      // [127:96]
+
+	reg_la0_oenb = reg_la0_iena = MASK_DATA_0;      // [31:0]
+	reg_la1_oenb = reg_la1_iena = MASK_ENABLE_0;    // [63:32]
+	reg_la2_oenb = reg_la2_iena = 0x00000000;  // [95:64]
+	reg_la3_oenb = reg_la3_iena = 0x00000000;      // [127:96]
+
+
+	reg_la0_data = MASK_DATA_0;
+	reg_la1_data = 0x00000000;
+	reg_la2_data = 0x00000000;
+	reg_la3_data = 0x00000000;
+
+
+	//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]
+
+	// Flag start of the test 
+	
+
+	// Configure LA probes from [63:32] as inputs to disable counter write
+	//reg_la1_oenb = reg_la1_iena = 0x00000000;    
+
+	while (1) {
+		if (reg_la0_data_in & MASK_DATA_1) {
+			break;
+		}
+	}
+	//print("\n");
+	//print("BEEP\n");
+	reg_la0_data = 0x00000000;
+	//print("\n");
+	//print("Monitor: Test 1 Passed\n\n");	// Makes simulation very long!
+}
+
diff --git a/verilog/dv/actuator_driver_test2/actuator_driver_test2_tb.v b/verilog/dv/actuator_driver_test2/actuator_driver_test2_tb.v
new file mode 100644
index 0000000..00dc33f
--- /dev/null
+++ b/verilog/dv/actuator_driver_test2/actuator_driver_test2_tb.v
@@ -0,0 +1,767 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+
+`timescale 1 ns / 1 ps
+
+module actuator_driver_test2_tb;
+	reg clock;
+	reg spi_clock;
+    	reg RSTB;
+	reg CSB;
+
+	reg power1, power2;
+
+	wire gpio;
+	wire uart_tx;
+	wire [37:0] mprj_io;
+
+	wire core_to_tb;
+	reg  tb_to_core;
+
+        reg  enable_n;
+        reg  trigger_in_n;
+        reg  latch_data_n;
+        wire  sclk;
+        reg  mosi;
+        reg  ss_n;
+        wire miso;
+	reg [31:0] tmp_data;
+	wire [4:0] h_ROWS;
+	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; 	  
+	assign mprj_io[35] = 	latch_data_n;	
+	assign miso        = 	mprj_io[34];
+	assign mprj_io[33] =  	mosi; 	   	
+	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;
+	assign mprj_io[4] = 1'b0;
+	assign mprj_io[3] = 1'b1;
+	assign mprj_io[2] = 1'b0;
+	assign mprj_io[1] = tb_to_core;
+	assign core_to_tb = mprj_io[0];
+
+
+	always #12.5 clock <= (clock === 1'b0);
+	always #100 spi_clock <= ~spi_clock;
+
+
+  	assign sclk = ~ss_n & spi_clock;
+
+	initial begin
+		clock 		= 0;
+      		spi_clock     	= 1;
+	end
+
+	// Set the init state of input pins to asic
+	task init_signals;
+      	begin
+		tb_to_core 	= 1'b0;
+        	enable_n 	= 1;
+        	trigger_in_n	= 1;
+        	latch_data_n	= 1;
+        	mosi 		= 0;
+        	ss_n		= 1;
+		wait_n_clks(50);
+    	end
+  	endtask
+	// set the enable signal to chip
+	task enable_chip;
+	begin
+	      	enable_n      = 0; 
+	end
+	endtask
+
+	// unset the enable signal to chip
+	task disable_chip;
+	begin
+	      	enable_n      = 1; 
+	end
+	endtask
+	
+	// pass time 
+  	task wait_n_clks;
+    	input integer i;
+    	integer j;
+    	begin
+      		for(j=0;j<i;j=j+1)
+        	@(posedge clock);
+    	end
+  	endtask
+
+	initial begin
+		$dumpfile("actuator_driver_test2.vcd");
+		$dumpvars(0, actuator_driver_test2_tb);
+
+		// Repeat cycles of 1000 clock edges as needed to complete testbench
+		repeat (400) begin
+			repeat (1000) @(posedge clock);
+			//$display("+1000 cycles");
+		end
+		$display("%c[1;31m",27);
+		`ifdef GL
+			$display ("Monitor: Timeout, Test LA (GL) Failed");
+		`else
+			$display ("Monitor: Timeout, Test LA (RTL) Failed");
+		`endif
+		$display("%c[0m",27);
+		$finish;
+	end
+	
+	// transfer data on spi bus 
+  	task spi_shift;
+    	input [31:0] data_in;
+    	output [31:0] data_out;
+    	integer j;
+    	begin
+      		for(j=0;j<32;j=j+1)
+      		begin
+        		@(negedge spi_clock);
+        		ss_n = 1'b0;
+        		mosi = data_in[31];
+        		data_in = data_in << 1;
+        		@(posedge spi_clock)
+        		data_out = {data_out[31:0],miso};
+      		end
+      		@(negedge spi_clock);
+      		ss_n = 1'b1;
+      		@(posedge clock);
+      		@(posedge clock);
+    	end
+  	endtask
+
+  	task write_data;
+    	input [7:0] address;
+    	input [15:0] data;
+    	reg [31:0] pass;
+    	begin
+      		@(posedge clock); 
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+      		spi_shift({8'h02,address,data},pass);
+      		wait_n_clks(10);
+      		latch_data_n = 0;
+      		wait_n_clks(100);
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task read_data;
+    	input [7:0] address;
+    	output [15:0] data_out;
+    	reg [31:0] pass;
+    	begin
+      		@(posedge clock); 
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+      		spi_shift({8'h01,address,16'b0},pass);
+      		wait_n_clks(100);
+      		latch_data_n = 0;
+      		wait_n_clks(20);
+      		latch_data_n = 1;
+      		wait_n_clks(20);
+      		spi_shift(32'b0,data_out);
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+
+	task memory_test;
+    	input [7:0] address;
+	input [15:0] data;
+	reg [15:0] tmp;
+	begin
+		tmp = data;
+		write_data(address,tmp);
+		wait_n_clks(100);
+		read_data(address,tmp);
+		if(data === tmp)
+		begin
+			$display("SPI MEMORY TEST passed");
+			$display("address:%h\tdata:%h",address,tmp);
+		end
+		else
+		begin
+			$display("SPI MEMORY Test Failed");
+			$display("address:%h\tdata:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+
+	end
+	endtask
+
+  	task write_ccr0;
+    	input [31:0] data;
+    	integer j;
+    	begin
+      		wait_n_clks(20);
+      		write_data(8'h02,data[15:0]);
+      		wait_n_clks(20);
+      		write_data(8'h03,data[31:16]);
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task write_ccr1;
+    	input [31:0] data;
+    	integer j;
+    	begin
+    		wait_n_clks(20);
+    		write_data(8'h04,data[15:0]);
+    		wait_n_clks(20);
+    		write_data(8'h05,data[31:16]);
+    		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task write_ccr2;
+    	input [31:0] data;
+    	integer j;
+    	begin
+    		wait_n_clks(20);
+    		write_data(8'h06,data[15:0]);
+    		wait_n_clks(20);
+    		write_data(8'h07,data[31:16]);
+    		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task write_ccr3;
+    	input [31:0] data;
+    	integer j;
+    	begin
+    		wait_n_clks(20);
+    		write_data(8'h08,data[15:0]);
+    		wait_n_clks(20);
+    		write_data(8'h09,data[31:16]);
+    		wait_n_clks(20);
+    	end
+  	endtask
+
+  	task ccr_set;
+    	begin
+		$display("Writing CCR0");
+      		write_ccr0(32'h00_00_00_04);
+		$display("Writing CCR1");
+      		write_ccr1(32'h00_00_00_0f);
+		$display("Writing CCR2");
+      		write_ccr2(32'h00_00_00_80);
+		$display("Writing CCR3");
+      		write_ccr3(32'h00_00_00_f0);
+    	end
+  	endtask
+
+	task check_ccr_set;
+	reg [15:0] tmp;
+	reg [7:0] address;
+	begin
+		address = 8'h02;
+		read_data(address,tmp);
+		if(16'h00_04 === tmp)
+		begin
+			$display("CCR0 Low bit set PASSED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR0 Low bit set FAILED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h03;
+		read_data(address,tmp);
+		if(16'h00_00 === tmp)
+		begin
+			$display("CCR0 High bit set PASSED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR0 High bit set FAILED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h04;
+		read_data(address,tmp);
+		if(16'h00_0f === tmp)
+		begin
+			$display("CCR1 Low bit set PASSED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR1 Low bit set FAILED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h05;
+		read_data(address,tmp);
+		if(16'h00_00 === tmp)
+		begin
+			$display("CCR1 High bit set PASSED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR1 High bit set FAILED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h06;
+		read_data(address,tmp);
+		if(16'h00_80 === tmp)
+		begin
+			$display("CCR2 Low bit set PASSED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR2 Low bit set FAILED");
+			$display("address:%h\tccr0_low:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		address = 8'h07;
+		read_data(address,tmp);
+		if(16'h00_00 === tmp)
+		begin
+			$display("CCR2 High bit set PASSED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+		end
+		else
+		begin
+			$display("CCR2 High bit set FAILED");
+			$display("address:%h\tccr0_high:%h",address,tmp);
+			$display("%c[0m",27);
+			$finish;
+		end
+		
+	end
+	endtask
+
+  	task check_b_state;
+    	input [9:0] b_state;
+	reg [9:0] translation_dots ;
+    	begin
+		$display("########## TEST ############");
+		{translation_dots[9],translation_dots[4],translation_dots[8],translation_dots[3],translation_dots[7:5],translation_dots[2:0]} = b_state;
+		if((translation_dots === dots) && (translation_dots === h_dots))
+		begin
+			$display("b_state dot test: PASSED");
+			$display("b_state:\t%b",b_state);
+			$display("trans  :\t%b",translation_dots);
+			$display("dots   :\t%b",dots);
+			$display("h_dots :\t%b",h_dots);
+		end
+		else
+		begin
+			$display("b_state set faild");
+			$display("b_state:\t%b",b_state);
+			$display("trans  :\t%b",translation_dots);
+			$display("dots   :\t%b",dots);
+			$display("h_dots :\t%b",h_dots);
+			$display("%c[0m",27);
+			$finish;
+		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(100);
+    	end
+  	endtask
+
+  	task set_trigger_mode_no_wait;
+    	input past_state_bit;
+    	input inv_bit;
+    	integer j;
+    	reg [31:0] pass;
+    	begin
+      		@(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);
+      		wait_n_clks(20);
+    	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);
+		if(inv_bit)
+			check_b_state(~b_state);
+		else
+			check_b_state(b_state);
+      		wait_n_clks(20);
+    	end
+  	endtask
+
+	task to_high_test;
+    	input past_state_bit;
+    	input inv_bit;
+	integer i;
+	reg [9:0] state;
+	begin
+		state = 10'b0;
+		advance_b_state_and_check(state,past_state_bit,inv_bit);
+		for(i=0;i<11;i=i+1)
+		begin
+			state = 10'b00_0000_0001 << i;
+		advance_b_state_and_check(state,past_state_bit,inv_bit);
+		end
+		
+	end
+	endtask
+
+	task to_low_test;
+    	input past_state_bit;
+    	input inv_bit;
+	integer i;
+	reg [9:0] state;
+	begin
+		state = 10'b11_1111_1111;
+		advance_b_state_and_check(state,past_state_bit,inv_bit);
+		for(i=0;i<11;i=i+1)
+		begin
+			state = ~(10'b00_0000_0001 << i);
+		advance_b_state_and_check(state,past_state_bit,inv_bit);
+		end
+		
+	end
+	endtask
+
+
+	initial begin
+		init_signals();
+		wait(core_to_tb === 1'b1);
+		$display("LA Test 1 started");
+		enable_chip();
+		wait_n_clks(50);
+		ccr_set();
+		check_ccr_set();
+		to_high_test(1'b0,1'b0);
+		to_low_test(1'b0,1'b0);
+		to_high_test(1'b0,1'b1);
+		to_low_test(1'b0,1'b1);
+		tb_to_core = 1'b1;
+		wait(core_to_tb === 1'b0);
+		tb_to_core = 1'b0;
+		#10000;
+		$finish;
+	end
+
+	initial begin
+		RSTB <= 1'b0;
+		CSB  <= 1'b1;		// Force CSB high
+		#2000;
+		RSTB <= 1'b1;	    	// Release reset
+		#170000;
+		CSB = 1'b0;		// CSB can be released
+	end
+
+	initial begin		// Power-up sequence
+		power1 <= 1'b0;
+		power2 <= 1'b0;
+		#200;
+		power1 <= 1'b1;
+		#200;
+		power2 <= 1'b1;
+	end
+
+	wire flash_csb;
+	wire flash_clk;
+	wire flash_io0;
+	wire flash_io1;
+
+	wire VDD1V8;
+	wire VDD3V3;
+	wire VSS;
+    
+	assign VDD3V3 = power1;
+	assign VDD1V8 = power2;
+	assign VSS = 1'b0;
+
+	//assign mprj_io[3] = 1;  // Force CSB high.
+	//assign mprj_io[0] = 0;  // Disable debug mode
+
+	caravel uut (
+		.vddio	  (VDD3V3),
+		.vddio_2  (VDD3V3),
+		.vssio	  (VSS),
+		.vssio_2  (VSS),
+		.vdda	  (VDD3V3),
+		.vssa	  (VSS),
+		.vccd	  (VDD1V8),
+		.vssd	  (VSS),
+		.vdda1    (VDD3V3),
+		.vdda1_2  (VDD3V3),
+		.vdda2    (VDD3V3),
+		.vssa1	  (VSS),
+		.vssa1_2  (VSS),
+		.vssa2	  (VSS),
+		.vccd1	  (VDD1V8),
+		.vccd2	  (VDD1V8),
+		.vssd1	  (VSS),
+		.vssd2	  (VSS),
+		.clock    (clock),
+		.gpio     (gpio),
+		.mprj_io  (mprj_io),
+		.flash_csb(flash_csb),
+		.flash_clk(flash_clk),
+		.flash_io0(flash_io0),
+		.flash_io1(flash_io1),
+		.resetb	  (RSTB)
+	);
+
+	spiflash #(
+		.FILENAME("actuator_driver_test2.hex")
+	) spiflash (
+		.csb(flash_csb),
+		.clk(flash_clk),
+		.io0(flash_io0),
+		.io1(flash_io1),
+		.io2(),			// not used
+		.io3()			// not used
+	);
+
+	// Testbench UART
+	tbuart tbuart (
+		.ser_rx(uart_tx)
+	);
+
+	hbrige_cells hbrige_drivers_ic(
+	  .rows(mprj_io[30:21]),
+	  .cols(mprj_io[20:17]),
+	  .ROWS(h_ROWS),
+	  .COLS(h_COLS)
+	);
+	actuator_cell h_cell_ic(
+	  .cols(h_COLS),
+	  .rows(h_ROWS),
+	  .dots(h_dots)
+	);
+
+	actuator_cell cell_ic(
+	  .cols(mprj_io[9:8]),
+	  .rows(mprj_io[14:10]),
+	  .dots(dots)
+	);
+	
+
+endmodule
+
+module hbrige(
+  output reg line,
+  input wire p,
+  input wire n
+);
+  always@(*)
+  begin
+    case({p,n})
+        2'b00: line = 1'b0;
+        2'b11: line = 1'b1;
+        2'b10: line = 1'bz;
+        2'b01: line = 1'bx;
+    endcase
+  end
+endmodule
+
+module hbrige_cells(
+  input wire [9:0] rows,
+  input wire [3:0] cols,
+  output wire [4:0] ROWS,
+  output wire [1:0] COLS
+);
+
+  wire [4:0] MEM [1:0];
+  genvar i;
+  genvar j;
+
+  for(i=0;i<2;i=i+1)
+  begin
+    hbrige brige_line(
+      .line (COLS[i]),
+      .p    (cols[2*i+1]),
+      .n    (cols[2*i])
+    );
+  end
+  for(j=0;j<5;j=j+1)
+  begin
+    hbrige brige_line(
+      .line (ROWS[j]),
+      .p    (rows[2*j+1]),
+      .n    (rows[2*j])
+    );
+  end
+
+  for(i=0;i<2;i=i+1)
+  begin
+    for(j=0;j<5;j=j+1)
+    begin
+      assign MEM[i][j] = ((ROWS[j] === 1'bz) || (COLS[i] === 1'bz)) ? 1'bz : ((ROWS[j] == 1'b1) && (COLS[i] == 1'b0)) ? 1'b1 : ((ROWS[j] == 1'b0) && (COLS[i] == 1'b1)) ? 1'b0 : 1'bx;
+    end
+  end
+
+endmodule
+
+
+module actuator_cell(
+  input wire [1:0] cols,
+  input wire [4:0] rows,
+  output reg [9:0] dots
+);
+
+  always@(*)
+  begin
+    dots[0] = dots[0];
+    if((cols[0] === 1'b0) && (rows[0] === 1'b1))
+      dots[0] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[0] === 1'b0))
+      dots[0] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[1] = dots[1];
+    if((cols[0] === 1'b0) && (rows[1] === 1'b1))
+      dots[1] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[1] === 1'b0))
+      dots[1] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[2] = dots[2];
+    if((cols[0] === 1'b0) && (rows[2] === 1'b1))
+      dots[2] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[2] === 1'b0))
+      dots[2] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[3] = dots[3];
+    if((cols[0] === 1'b0) && (rows[3] === 1'b1))
+      dots[3] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[3] === 1'b0))
+      dots[3] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[4] = dots[4];
+    if((cols[0] === 1'b0) && (rows[4] === 1'b1))
+      dots[4] = 1'b1;
+    else if((cols[0] === 1'b1) && (rows[4] === 1'b0))
+      dots[4] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[5] = dots[5];
+    if((cols[1] === 1'b0) && (rows[0] === 1'b1))
+      dots[5] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[0] === 1'b0))
+      dots[5] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[6] = dots[6];
+    if((cols[1] === 1'b0) && (rows[1] === 1'b1))
+      dots[6] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[1] === 1'b0))
+      dots[6] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[7] = dots[7];
+    if((cols[1] === 1'b0) && (rows[2] === 1'b1))
+      dots[7] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[2] === 1'b0))
+      dots[7] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[8] = dots[8];
+    if((cols[1] === 1'b0) && (rows[3] === 1'b1))
+      dots[8] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[3] === 1'b0))
+      dots[8] = 1'b0;
+  end
+
+  always@(*)
+  begin
+    dots[9] = dots[9];
+    if((cols[1] === 1'b0) && (rows[4] === 1'b1))
+      dots[9] = 1'b1;
+    else if((cols[1] === 1'b1) && (rows[4] === 1'b0))
+      dots[9] = 1'b0;
+  end
+endmodule
+`default_nettype wire
