Add caravel level DV tests, which required minor module renaming (and rebuilding) in decred_controller.v.
diff --git a/gds/caravel.gds.gz b/gds/caravel.gds.gz
index 03ce608..ef370a6 100644
--- a/gds/caravel.gds.gz
+++ b/gds/caravel.gds.gz
Binary files differ
diff --git a/gds/caravel.mag b/gds/caravel.mag
index e0ae518..4828cbb 100644
--- a/gds/caravel.mag
+++ b/gds/caravel.mag
@@ -1,7 +1,7 @@
 magic
 tech sky130A
 magscale 1 2
-timestamp 1608821425
+timestamp 1608867834
 << checkpaint >>
 rect -1260 -1260 718860 1038860
 << metal1 >>
@@ -80750,187 +80750,187 @@
 rect 459478 40175 459520 40411
 rect 454976 40133 459520 40175
 use user_id_programming  user_id_value ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 656624 0 1 80926
 box 0 0 7109 7077
 use storage  storage ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 52032 0 1 53156
 box 0 0 88934 189234
 use mgmt_core  soc ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 210422 0 1 53602
 box 0 0 430000 180000
 use sky130_fd_sc_hvl__lsbufhv2lv_1_wrapped  rstb_level ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 137896 0 -1 51956
 box -66 -83 5058 5000
 use simple_por  por ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 654176 0 -1 112880
 box 25 11 11344 8338
 use mgmt_protect  mgmt_buffers ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 212180 0 1 246848
 box -1586 -1605 201502 19557
 use gpio_control_block  gpio_control_bidir\[1\] ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 166200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_bidir\[0\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 121000
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[36\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 245800
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[37\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 202600
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[2\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 211200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[3\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 256400
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[33\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 375400
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[34\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 332200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[35\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 289000
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[4\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 301400
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[5\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 346400
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[7\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 479800
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[6\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 391600
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[32\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 418600
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[31\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 546200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[30\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 589400
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[29\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 632600
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[9\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 568800
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[8\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 523800
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[10\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 614000
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[28\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 675800
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[27\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 719000
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[26\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 762200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[13\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 749200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[12\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 704200
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[11\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 659000
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[25\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 805400
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[24\]
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 8567 0 1 931224
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[23\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 97200 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[22\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 148600 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[21\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 200000 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[20\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 251400 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[19\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 303000 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[18\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 353400 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[17\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 420800 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[16\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 497800 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[15\]
-timestamp 1608821425
+timestamp 1608867834
 transform 0 1 549200 -1 0 1029747
 box 0 0 33934 18344
 use gpio_control_block  gpio_control_in\[14\]
-timestamp 1608821425
+timestamp 1608867834
 transform -1 0 708537 0 1 927600
 box 0 0 33934 18344
 use user_project_wrapper  mprj ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 65308 0 1 278716
 box -8576 -7506 592500 711442
 use chip_io  padframe ../mag
-timestamp 1608821425
+timestamp 1608867834
 transform 1 0 0 0 1 0
 box 0 0 717600 1037600
 << properties >>
diff --git a/gds/caravel.old.gds.gz b/gds/caravel.old.gds.gz
index 9173247..03ce608 100644
--- a/gds/caravel.old.gds.gz
+++ b/gds/caravel.old.gds.gz
Binary files differ
diff --git a/gds/decred_controller.gds.gz b/gds/decred_controller.gds.gz
index 5d627be..bc8c6ea 100644
--- a/gds/decred_controller.gds.gz
+++ b/gds/decred_controller.gds.gz
Binary files differ
diff --git a/gds/user_project_wrapper.gds.gz b/gds/user_project_wrapper.gds.gz
index 449637d..472bc30 100644
--- a/gds/user_project_wrapper.gds.gz
+++ b/gds/user_project_wrapper.gds.gz
Binary files differ
diff --git a/mag/decred_controller.mag b/mag/decred_controller.mag
index e0186cf..4f25957 100644
--- a/mag/decred_controller.mag
+++ b/mag/decred_controller.mag
@@ -1,7 +1,7 @@
 magic
 tech sky130A
 magscale 1 2
-timestamp 1608335257
+timestamp 1608864223
 << locali >>
 rect 7941 35479 7975 35785
 rect 12265 35479 12299 35785
diff --git a/mag/user_project_wrapper.mag b/mag/user_project_wrapper.mag
index 126724e..11c9a6f 100644
--- a/mag/user_project_wrapper.mag
+++ b/mag/user_project_wrapper.mag
@@ -1,7 +1,7 @@
 magic
 tech sky130A
 magscale 1 2
-timestamp 1608818581
+timestamp 1608864388
 << locali >>
 rect 259469 684777 259653 684811
 rect 259469 684743 259503 684777
@@ -1298630,23 +1298630,23 @@
 rect 569604 -7506 570204 -7504
 rect 591900 -7506 592500 -7504
 use decred_hash_macro  decred_hash_block3
-timestamp 1608818581
+timestamp 1608864388
 transform 1 0 319328 0 1 479320
 box 0 0 244000 204000
 use decred_hash_macro  decred_hash_block2
-timestamp 1608818581
+timestamp 1608864388
 transform 1 0 16320 0 1 479320
 box 0 0 244000 204000
 use decred_hash_macro  decred_hash_block1
-timestamp 1608818581
+timestamp 1608864388
 transform 1 0 319328 0 1 20332
 box 0 0 244000 204000
 use decred_hash_macro  decred_hash_block0
-timestamp 1608818581
+timestamp 1608864388
 transform 1 0 16320 0 1 20332
 box 0 0 244000 204000
 use decred_controller  decred_controller_block
-timestamp 1608818581
+timestamp 1608864388
 transform 1 0 272000 0 1 315928
 box 0 0 41000 41000
 << labels >>
diff --git a/openlane/decred_controller/config.tcl b/openlane/decred_controller/config.tcl
index 64c2e18..b2ff0e8 100755
--- a/openlane/decred_controller/config.tcl
+++ b/openlane/decred_controller/config.tcl
@@ -7,7 +7,7 @@
    $script_dir/../../verilog/rtl/defines.v \
    $script_dir/../../verilog/rtl/decred_top/rtl/src/decred_defines.v \
    $script_dir/../../verilog/rtl/decred_top/rtl/src/addressalyzer.v \
-   $script_dir/../../verilog/rtl/decred_top/rtl/src/clock_div.v \
+   $script_dir/../../verilog/rtl/decred_top/rtl/src/clock_div_simple.v \
    $script_dir/../../verilog/rtl/decred_top/rtl/src/decred_controller.v \
    $script_dir/../../verilog/rtl/decred_top/rtl/src/register_bank.v \
    $script_dir/../../verilog/rtl/decred_top/rtl/src/spi_passthrough.v \
diff --git a/openlane/decred_controller/final_summary_report.csv b/openlane/decred_controller/final_summary_report.csv
index 2bd8612..243746d 100644
--- a/openlane/decred_controller/final_summary_report.csv
+++ b/openlane/decred_controller/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,runtime,DIEAREA_mm^2,CellPer_mm^2,(Cell/mm^2)/Core_Util,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/decred_controller,decred_controller,decred_controller,0h3m24s,0.042025,35907.198096371205,71814.39619274241,63,492.32,1509,0,0,0,0,0,0,0,3,0,-1,53289,11014,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,37072678,0.0,37.41,35.24,1.96,1.17,-1,1502,1539,302,339,0,0,0,1509,48,32,35,12,105,70,9,460,288,285,12,134,448,7,589,66.66666666666667,15.0,15.0,1,5,50,1,153.6,153.18,0.65,0.15,sky130_fd_sc_hd,4,3
+0,/project/openlane/decred_controller,decred_controller,decred_controller,0h2m56s,0.042025,35098.155859607374,70196.31171921475,61,491.37,1475,0,0,0,0,0,0,0,0,0,-1,50575,10780,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,35079513,0.0,36.83,31.95,1.37,0.0,-1,1472,1503,294,325,0,0,0,1475,48,32,35,12,102,70,9,448,278,273,12,134,448,4,586,66.66666666666667,15.0,15.0,1,5,50,1,153.6,153.18,0.65,0.15,sky130_fd_sc_hd,4,3
diff --git a/verilog/dv/caravel/decred_miner/Makefile b/verilog/dv/caravel/decred_miner/Makefile
new file mode 100755
index 0000000..7789bee
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/Makefile
@@ -0,0 +1,34 @@
+# 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
+
+# ---- Test patterns for project striVe ----
+
+.SUFFIXES:
+.SILENT: clean all
+
+PATTERNS = host_interface
+
+all:  ${PATTERNS}
+	for i in ${PATTERNS}; do \
+		( cd $$i && make -f Makefile $${i}.vcd &> verify.log && grep Monitor verify.log) ; \
+	done
+
+clean:  ${PATTERNS}
+	for i in ${PATTERNS}; do \
+		( cd $$i && make clean ) ; \
+	done
+
+.PHONY: clean all
diff --git a/verilog/dv/caravel/decred_miner/README.md b/verilog/dv/caravel/decred_miner/README.md
new file mode 100755
index 0000000..04f3837
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/README.md
@@ -0,0 +1,27 @@
+<!---
+# 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
+-->
+# decred_miner test(s)
+
+The directory includes a test for the decred_miner
+
+1) Host Interface Test: 
+
+	* Configures the user space pins as outputs, where required
+	* Initializes the decred_controller and executes a pre-determined test case resulting in the expected solution
+	* The test runs for approx 45min on slower machines and requires > 5GB disk space
+
diff --git a/verilog/dv/caravel/decred_miner/host_interface/Makefile b/verilog/dv/caravel/decred_miner/host_interface/Makefile
new file mode 100755
index 0000000..c4d3a49
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/host_interface/Makefile
@@ -0,0 +1,62 @@
+# 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
+
+FIRMWARE_PATH =../..
+VERILOG_PATH =../../../..
+RTL_PATH =../../../../rtl/decred_top/rtl/src
+UPW_PATH =../../../../rtl
+IP_PATH=../../../../ip
+BEHAVIOURAL_MODELS =../.. 
+
+GCC_PATH?=/opt/riscv32/bin
+GCC_PREFIX?=riscv32-unknown-elf
+PDK_PATH?=$(PDK_ROOT)/sky130A
+
+SIM?=RTL
+
+.SUFFIXES:
+
+PATTERN = host_interface
+
+all:  ${PATTERN:=.vcd}
+
+hex:  ${PATTERN:=.hex}
+
+%.vvp: %_tb.v %.hex
+	iverilog -DFUNCTIONAL -DSIM -DFULL_CHIP_SIM -I$(BEHAVIOURAL_MODELS) \
+	-I$(PDK_PATH) -I$(IP_PATH) -I$(RTL_PATH) -I$(UPW_PATH) \
+	$< $(RTL_PATH)/*.v -o $@
+
+%.vcd: %.vvp
+	vvp $<
+
+%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s
+	${GCC_PATH}/${GCC_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(FIRMWARE_PATH)/start.s $<
+
+%.hex: %.elf
+	${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ 
+	# to fix flash base address
+	sed -i 's/@10000000/@00000000/g' $@
+
+%.bin: %.elf
+	${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
+
+# ---- Clean ----
+
+clean:
+	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
+
+.PHONY: clean hex all
diff --git a/verilog/dv/caravel/decred_miner/host_interface/chip_support_tb.v b/verilog/dv/caravel/decred_miner/host_interface/chip_support_tb.v
new file mode 100755
index 0000000..0425849
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/host_interface/chip_support_tb.v
@@ -0,0 +1,36 @@
+
+  parameter REG_MACRO_ADDR = 0;
+  parameter REG_MACRO_DATA = 1;
+  parameter REG_MACRO_SEL  = 2;
+  parameter REG_CONTROL    = 3;
+  parameter REG_SPI_ADDR   = 4;
+  parameter REG_MACRO_WREN = 5;
+  parameter REG_ID         = 5;
+  parameter REG_MACROINFO  = 6;
+
+  parameter REG_READ_MACRO = 8'h80;
+
+  parameter REG_ID_VALUE = 8'h11;
+
+  parameter ALL_MACRO_MASK = 8'hFF;
+
+  parameter CPLD_ENONCE_LEN = 8;
+
+  parameter CONTROL_HASH_MASK_START = (1 << 0);
+  parameter CONTROL_HASH_MASK_STOP  = (0 << 0);
+  parameter CONTROL_PERF_CTR_RUN    = (1 << 2);
+  parameter CONTROL_LED_MASK_OFF    = (0 << 3);
+  parameter CONTROL_LED_MASK_ON     = (1 << 3);
+  parameter CONTROL_CLOCK_OFF       = (1 << 4);
+  parameter CONTROL_CLOCK_ON        = (0 << 4);
+  parameter CONTROL_ID_HIGH         = (1 << 5);
+  parameter CONTROL_ID_LOW          = (0 << 5);
+
+  parameter BROADCAST_ADDR_VALUE = 8'h7f;
+
+  parameter HASH_REG_MIDSTATE     = 8'h00;
+  parameter HASH_REG_THRESHOLD    = 8'h20;
+  parameter HASH_REG_HEADERDATA   = 8'h24;
+  parameter HASH_REG_EXTRANONCE   = 8'h34;
+  parameter HASH_REG_NONCEOFFSET  = 8'h38;
+  parameter HASH_REG_STRIDEOFFSET = 8'h3B;
diff --git a/verilog/dv/caravel/decred_miner/host_interface/full_chip_input.dat b/verilog/dv/caravel/decred_miner/host_interface/full_chip_input.dat
new file mode 100755
index 0000000..94998fb
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/host_interface/full_chip_input.dat
@@ -0,0 +1,15 @@
+36 19 c4 73 // midstate

+0c e2 05 81

+72 a5 74 89

+5e 9a 5d 13

+ee c9 a9 dd

+38 f3 cd db

+21 88 97 8a

+ca 07 fb a5

+00 00 00 fc // threshold

+dd bb 06 00 // headerdata

+ed 23 00 00

+4e 21 98 5e

+07 00 00 00

+46 c3 f1 e9 // extranonce

+

diff --git a/verilog/dv/caravel/decred_miner/host_interface/host_interface.c b/verilog/dv/caravel/decred_miner/host_interface/host_interface.c
new file mode 100755
index 0000000..6e661f2
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/host_interface/host_interface.c
@@ -0,0 +1,59 @@
+/*
+ * 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
+ */
+
+#include "../../defs.h"
+
+/*
+	IO Test:
+		- Configures MPRJ lower 19-27 IO pins as outputs
+*/
+
+void main()
+{
+	/* 
+	IO Control Registers
+	| DM     | VTRIP | SLOW  | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
+	| 3-bits | 1-bit | 1-bit | 1-bit  | 1-bit  | 1-bit | 1-bit   | 1-bit   | 1-bit | 1-bit | 1-bit   |
+
+	Output: 0000_0110_0000_1110  (0x1808) = GPIO_MODE_USER_STD_OUTPUT
+	| DM     | VTRIP | SLOW  | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
+	| 110    | 0     | 0     | 0      | 0      | 0     | 0       | 1       | 0     | 0     | 0       |
+	
+	 
+	Input: 0000_0001_0000_1111 (0x0402) = GPIO_MODE_USER_STD_INPUT_NOPULL
+	| DM     | VTRIP | SLOW  | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
+	| 001    | 0     | 0     | 0      | 0      | 0     | 0       | 0       | 0     | 1     | 0       |
+
+	*/
+
+	// Configure 19-27  IOs as user output
+	reg_mprj_io_19 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_20 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_21 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_22 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_23 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_24 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_25 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_26 =  GPIO_MODE_USER_STD_OUTPUT;
+	reg_mprj_io_27 =  GPIO_MODE_USER_STD_OUTPUT;
+
+        /* Apply configuration */
+        reg_mprj_xfer = 1;
+        while (reg_mprj_xfer == 1);
+
+}
+
diff --git a/verilog/dv/caravel/decred_miner/host_interface/host_interface_tb.v b/verilog/dv/caravel/decred_miner/host_interface/host_interface_tb.v
new file mode 100755
index 0000000..6a49997
--- /dev/null
+++ b/verilog/dv/caravel/decred_miner/host_interface/host_interface_tb.v
@@ -0,0 +1,731 @@
+// 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 / 100 ps
+
+`include "caravel.v"
+`include "spiflash.v"
+
+module host_interface_tb;
+
+`include "chip_support_tb.v"
+
+`ifndef FULL_CHIP_SIM
+#error
+printf("FULL_CHIP_SIM not defined);
+`endif
+
+	reg clock;
+    	reg RSTB;
+	reg power1, power2;
+	reg power3, power4;
+
+    	wire gpio;
+    	wire [37:0] mprj_io;
+	wire [7:0] mprj_io_0;
+
+	assign mprj_io_0 = mprj_io[7:0];
+
+  //----------------------------------------------------------------
+  // Internal constant and parameter definitions.
+  //----------------------------------------------------------------
+  parameter MAIN_CLK_HALF_PERIOD = 10;
+  parameter MAIN_CLK_PERIOD = 2 * MAIN_CLK_HALF_PERIOD;
+
+  parameter SPI_CLK_QTR_PERIOD = 250;
+  parameter SPI_CLK_HALF_PERIOD = 2 * SPI_CLK_QTR_PERIOD;
+  parameter SPI_CLK_PERIOD = 2 * SPI_CLK_HALF_PERIOD;
+
+  parameter BUFFER_SIZE = 56;
+
+  //----------------------------------------------------------------
+  // Register and Wire declarations.
+  //----------------------------------------------------------------
+  reg tb_main_clk = 0;
+  reg tb_rst_n = 0;
+
+  reg tb_sclk = 0;
+  reg tb_scsn = 1;
+  reg tb_mosi = 0;
+
+  reg [7:0] miso_byte = 8'b0;
+  wire tb_miso;
+  wire tb_irq;
+
+  // chain interconnect
+  wire miso_1_0;
+  wire miso_2_1;
+
+  wire mosi_0_1;
+  wire mosi_1_2;
+
+  wire irq_1_0;
+  wire irq_2_1;
+
+  wire id_1_0;
+  wire id_2_1;
+
+  wire scsn_0_1;
+  wire scsn_1_2;
+
+  wire sclk_0_1;
+  wire sclk_1_2;
+
+  wire rst_n_0_1;
+  wire rst_n_1_2;
+
+  // globals
+  reg [7:0] read_memory[BUFFER_SIZE - 1:0];
+  reg [7:0] read_memory_copy[BUFFER_SIZE - 1:0];
+  reg [7:0] write_memory[BUFFER_SIZE - 1:0];
+  reg [7:0] write_memory_copy[BUFFER_SIZE - 1:0];
+  reg [7:0] input_data[BUFFER_SIZE - 1:0];
+  reg [7:0] selectedDevAddr = 8'h00;
+
+  reg [7:0] threadCount = 8'h00;
+  reg [7:0] macroCount  = 8'h00;
+  reg [7:0] chainLength = 8'h00;
+
+  reg [31 : 0] cycle_ctr;
+  reg          display_cycle_ctr = 0;
+  reg          display_ctrl_and_ctrs = 0;
+  reg          display_qround = 0;
+  reg          display_state = 0;
+
+  integer file, i;
+
+  assign mprj_io[18:8] = {1'b1, 1'b0, 1'b0, tb_mosi, tb_scsn, 2'b00, 1'b1, tb_main_clk, tb_sclk, tb_rst_n};
+  assign scsn_0_1 = mprj_io[19:19];
+  assign sclk_0_1 = mprj_io[20:20];
+  assign mosi_0_1 = mprj_io[21:21];
+  assign rst_n_0_1 = mprj_io[22:22];
+  assign tb_miso = mprj_io[25:25];
+  assign tb_irq = mprj_io[27:27];
+
+  //----------------------------------------------------------------
+  // clk_gen
+  //
+  // Clock generator processes.
+  //----------------------------------------------------------------
+  always
+    begin : main_clk_gen
+      #MAIN_CLK_HALF_PERIOD tb_main_clk = !tb_main_clk;
+    end
+
+	// External clock is used by default.  Make this artificially fast for the
+	// simulation.  Normally this would be a slow clock and the digital PLL
+	// would be the fast clock.
+
+	always #12.5 clock <= (clock === 1'b0);
+
+	initial begin
+		clock = 0;
+	end
+
+  initial begin
+
+		$dumpfile("host_interface.vcd");
+		$dumpvars(0, host_interface_tb);
+
+		// Repeat cycles of 1000 clock edges as needed to complete testbench
+		repeat (25) begin
+			repeat (1000) @(posedge clock);
+			// $display("+1000 cycles");
+		end
+
+    cycle_ctr = 0;
+
+    # (MAIN_CLK_PERIOD)
+    # 300
+
+    # (0) tb_rst_n = 1'b0;
+    # (2* SPI_CLK_PERIOD) tb_rst_n = 1'b1;
+    # (SPI_CLK_HALF_PERIOD)
+
+    # 100 chip_init_chain();
+
+    # 100 chip_write_nonce_offsets();
+
+    # 100 disable_asic_hash();
+
+    # 100 enable_asic_hash_clock();
+
+    # 0 read_input_data();
+
+    # 0 write_midstate();
+    # 0 write_threshold();
+    # 0 write_headerdata();
+    # 0 write_extranonce();
+
+    display_cycle_ctr = 1;
+    display_ctrl_and_ctrs = 1;
+    display_qround = 1;
+    display_state = 1;
+
+    # 0 enable_asic_hashing();
+
+    // wait for IRQ
+    wait (tb_irq == 1) #1 ;
+
+    display_cycle_ctr = 0;
+    display_ctrl_and_ctrs = 0;
+    display_qround = 0;
+    display_state = 0;
+
+    chip_find_and_select_next_macro();
+
+    read_enonce();
+
+    chip_disable_macro();
+
+    $display($time,"\t: Test complete");
+
+    $finish;
+  end
+
+	initial begin
+		RSTB <= 1'b0;
+		#2000;
+		RSTB <= 1'b1;	    // Release reset
+	end
+
+	initial begin		// Power-up sequence
+		power1 <= 1'b0;
+		power2 <= 1'b0;
+		power3 <= 1'b0;
+		power4 <= 1'b0;
+		#200;
+		power1 <= 1'b1;
+		#200;
+		power2 <= 1'b1;
+		#200;
+		power3 <= 1'b1;
+		#200;
+		power4 <= 1'b1;
+	end
+
+	wire flash_csb;
+	wire flash_clk;
+	wire flash_io0;
+	wire flash_io1;
+
+	wire VDD3V3 = power1;
+	wire VDD1V8 = power2;
+	wire USER_VDD3V3 = power3;
+	wire USER_VDD1V8 = power4;
+	wire VSS = 1'b0;
+
+  //----------------------------------------------------------------
+  // Generic memory interface routines
+  //----------------------------------------------------------------
+
+  task set_write_memory_16b ;
+    input [15:0] value;
+
+    begin
+
+      write_memory[0] = value[7:0];
+      write_memory[1] = value[15:8];
+
+    end
+  endtask
+
+  task set_write_memory_24b ;
+    input [23:0] value;
+
+    begin
+
+      write_memory[0] = value[7:0];
+      write_memory[1] = value[15:8];
+      write_memory[2] = value[23:16];
+
+    end
+  endtask
+
+  task copy_write_buffer ;
+    begin : copy_write_buffer_block
+      integer i;
+
+      for (i = 0; i < BUFFER_SIZE; i = i + 1) begin
+
+        write_memory_copy[i] = write_memory[i];
+      end
+    end
+  endtask
+
+  //----------------------------------------------------------------
+  // High level support functions.
+  //----------------------------------------------------------------
+
+  task read_input_data ;
+    begin : read_input_data_block
+
+      $readmemh("full_chip_input.dat", input_data);
+
+    end
+  endtask
+
+  task copy_input_data ;
+    input [7:0] offset;
+    input [7:0] length;
+
+    begin : copy_input_data_block
+
+      integer i;
+      integer source;
+
+      source = offset;
+
+      for (i = 0; i < length; i = i +1) begin
+
+        write_memory[i] = input_data[source];
+        source = source + 1;
+      end
+
+    end
+  endtask
+
+  task read_enonce ;
+    begin : read_enonce_block
+
+      integer i;
+
+      chip_read_hashreg(0, CPLD_ENONCE_LEN);
+
+      $display("Enonce read ");
+      for (i = 0; i < CPLD_ENONCE_LEN; i = i + 1) begin
+        $display("%x", read_memory_copy[i]);
+      end
+
+    end
+  endtask
+
+  task disable_asic_hash ;
+    begin : disable_asic_hash_block
+
+      reg [7:0] controlByte;
+
+      chip_set_selected_device(BROADCAST_ADDR_VALUE);
+
+      // Turn off LED and clear HASH_EN along while clock is running
+      controlByte = CONTROL_LED_MASK_OFF | CONTROL_CLOCK_ON | CONTROL_ID_HIGH;
+      chip_write_controlreg(REG_CONTROL, controlByte);
+
+      // Turn off LED and clear HASH_EN along with clock disable
+      controlByte = CONTROL_LED_MASK_OFF | CONTROL_CLOCK_OFF | CONTROL_ID_HIGH;
+      chip_write_controlreg(REG_CONTROL, controlByte);
+
+    end
+  endtask
+
+  task enable_asic_hash_clock ;
+    begin : enable_asic_hash_clock_block
+
+      reg [7:0] controlByte;
+
+      chip_set_selected_device(BROADCAST_ADDR_VALUE);
+
+      // Set init status for macros 
+      controlByte = CONTROL_LED_MASK_OFF | CONTROL_HASH_MASK_STOP | CONTROL_CLOCK_OFF | CONTROL_ID_HIGH;
+      chip_write_controlreg(REG_CONTROL, controlByte);
+
+      controlByte = CONTROL_LED_MASK_OFF | CONTROL_HASH_MASK_STOP | CONTROL_CLOCK_ON | CONTROL_ID_HIGH;
+      chip_write_controlreg(REG_CONTROL, controlByte);
+
+    end
+  endtask
+
+  task enable_asic_hashing ;
+    begin : enable_asic_hashing_block
+
+      reg [7:0] controlByte;
+
+      chip_set_selected_device(BROADCAST_ADDR_VALUE);
+
+      // Turn on LED and set HASH_EN
+      controlByte = CONTROL_LED_MASK_ON | CONTROL_HASH_MASK_START | CONTROL_CLOCK_ON | CONTROL_ID_HIGH;
+      chip_write_controlreg(REG_CONTROL, controlByte);
+
+    end
+  endtask
+
+  task write_midstate ;
+    begin : write_midstate_block
+      copy_input_data(0, 32); // prepare write from input file offset,length
+      chip_write_hashreg(ALL_MACRO_MASK, 8'h00, 32);
+    end
+  endtask
+
+  task write_threshold ;
+    begin : write_threshold_block
+      copy_input_data(32, 4); // prepare write from input file offset,length
+      chip_write_hashreg(ALL_MACRO_MASK, 8'h20, 4);
+    end
+  endtask
+
+  task write_headerdata ;
+    begin : write_headerdata_block
+      copy_input_data(36, 16); // prepare write from input file offset,length
+      chip_write_hashreg(ALL_MACRO_MASK, 8'h24, 16);
+    end
+  endtask
+
+  task write_extranonce ;
+    begin : write_extranonce_block
+      copy_input_data(52, 4); // prepare write from input file offset,length
+      chip_write_hashreg(ALL_MACRO_MASK, 8'h34, 4);
+    end
+  endtask
+
+  //----------------------------------------------------------------
+  // SPI support routines.
+  //----------------------------------------------------------------
+
+  task spi_set_chipselect ;
+    input value;
+
+    begin
+
+    # 0  tb_scsn = value;
+    # SPI_CLK_HALF_PERIOD;
+
+    end
+  endtask
+
+  task spi_send_data ;
+    input  [7:0] data ;
+    output [7:0] returnByte;
+
+    integer i;
+    begin 
+
+    for (i = 8; i > 0; i = i - 1) begin
+      # 0 clock_data_bit(data[i - 1], returnByte[i - 1]);
+    end
+    # SPI_CLK_HALF_PERIOD;
+  end  
+  endtask
+
+  task clock_data_bit ;
+    input  data ;
+    output bitOut;
+    begin 
+
+    # SPI_CLK_QTR_PERIOD tb_mosi = data;  
+    # SPI_CLK_QTR_PERIOD tb_sclk = !tb_sclk;  
+    # SPI_CLK_QTR_PERIOD tb_sclk = !tb_sclk;  
+    bitOut = tb_miso;
+    # SPI_CLK_QTR_PERIOD tb_sclk = tb_sclk;  
+
+  end  
+  endtask
+
+  //----------------------------------------------------------------
+  // ASIC interface routines.
+  //----------------------------------------------------------------
+
+  task chip_read_memory ;
+    input [15:0] address ;
+    input [15:0] len ;
+
+    integer i;
+    begin : chip_read_mem_block
+
+    reg [7:0] returnByte;
+
+    spi_set_chipselect(0);
+
+    spi_send_data(8'h80 | selectedDevAddr | address[15:8], returnByte);
+    spi_send_data(address[7:0], returnByte);
+    spi_send_data(8'hFF, returnByte);
+
+    for (i = 0; i < len; i = i + 1) begin
+      spi_send_data(8'hFF, read_memory[i]);
+    end
+    
+    spi_set_chipselect(1);
+
+    end
+  endtask
+
+  task chip_write_memory ;
+    input [15:0] address ;
+    input [15:0] len ;
+
+    integer i;
+    begin : chip_write_mem_block
+
+      reg [7:0] returnByte;
+
+      spi_set_chipselect(0);
+
+      spi_send_data(selectedDevAddr | address[15:8], returnByte);
+      spi_send_data(address[7:0], returnByte);
+
+      for (i = 0; i < len; i = i + 1) begin
+        spi_send_data(write_memory[i], read_memory[i]);
+      end
+    
+      spi_set_chipselect(1);
+
+    end
+  endtask
+
+  task chip_write_controlreg ;
+    input [7:0] address;
+    input [7:0] data;
+
+    begin : task_chip_write_controlreg_block
+
+      write_memory[0] = data;
+      chip_write_memory(address, 1);
+
+    end
+  endtask
+
+  task chip_read_hashreg ;
+    input [7:0] address ;
+    input [7:0] len ;
+
+    begin : chip_read_hashreg_block
+
+      reg [7:0] localAddr;
+      integer i;
+
+      localAddr = address;
+
+      for (i = 0; i < len; i = i + 1) begin
+
+        chip_write_controlreg(REG_MACRO_ADDR, localAddr);
+        chip_read_memory(REG_READ_MACRO, 1);
+        read_memory_copy[i] = read_memory[0];
+
+        localAddr = localAddr + 1;
+
+      end
+    end
+
+  endtask
+
+  task chip_write_hashreg ;
+    input [7:0] macroSelect;
+    input [7:0] address ;
+    input [7:0] len ;
+
+    begin : chip_write_hashreg_block
+
+      reg [7:0] localAddr;
+      integer i;
+
+      localAddr = address;
+
+      copy_write_buffer();
+
+      chip_write_controlreg(REG_MACRO_WREN, 0);
+
+      for (i = 0; i < len; i = i + 1) begin
+
+        chip_write_controlreg(REG_MACRO_ADDR, localAddr);
+        chip_write_controlreg(REG_MACRO_DATA, write_memory_copy[i]);
+        chip_write_controlreg(REG_MACRO_WREN, macroSelect);
+        chip_write_controlreg(REG_MACRO_WREN, 0);
+
+        localAddr = localAddr + 1;
+
+      end
+    end
+
+  endtask
+
+  task chip_set_selected_device ;
+    input [7:0] value ;
+    begin
+      selectedDevAddr = value;
+    end
+  endtask
+
+  task chip_init_chain ;
+
+    begin : chip_init_chain_block
+
+      reg [7:0] addr;
+      reg running;
+
+      addr = 0;
+      running = 1;
+      chainLength = 0;
+
+      while (running) begin
+
+        if (addr != 0) begin
+
+          chip_write_controlreg(REG_CONTROL, CONTROL_ID_HIGH);
+
+        end
+
+        chip_set_selected_device(0);
+        addr = addr + 1;
+
+        chip_write_controlreg(REG_SPI_ADDR, addr);
+        chip_set_selected_device(addr);
+
+        chip_read_memory(REG_ID, 1);
+
+        if (read_memory[0] == REG_ID_VALUE) begin
+
+          chip_write_controlreg(REG_CONTROL, 0);
+          chainLength = chainLength + 1;
+        end else begin
+
+          running = 0;
+        end
+
+      end
+
+      chip_set_selected_device(1);
+      chip_read_memory(REG_MACROINFO, 1);
+
+      threadCount = read_memory[0] & 8'h0F;
+      macroCount = ((read_memory[0] >> 4) & 8'h0F);
+
+      chip_set_selected_device(BROADCAST_ADDR_VALUE);
+
+      $display("Detected %d devices with %d macros and %d threads", chainLength, macroCount, threadCount);
+
+    end
+  endtask
+
+  task chip_write_nonce_offsets ;
+    begin : chip_write_nonce_offsets_block
+
+    reg [7:0] addr;
+    reg [23:0] nonceOffset;
+    reg [15:0] stride;
+
+    integer i;
+    integer j;
+
+    addr = 1;
+    nonceOffset = 24'h3feccf; // test mode linked to data input
+    stride = chainLength * macroCount * threadCount;
+    for (i = 0; i < chainLength; i = i + 1) begin
+
+      chip_set_selected_device(addr);
+      addr = addr + 1;
+
+      for (j = 0; j < macroCount; j = j + 1) begin
+
+        set_write_memory_24b(nonceOffset);
+        chip_write_hashreg((1 << j), HASH_REG_NONCEOFFSET, 3);
+
+        set_write_memory_16b(stride);
+        chip_write_hashreg((1 << j), HASH_REG_STRIDEOFFSET, 2);
+
+        nonceOffset = nonceOffset + threadCount;
+      end
+    end
+
+    chip_set_selected_device(BROADCAST_ADDR_VALUE);
+
+    end
+  endtask
+
+  task chip_find_and_select_next_macro ;
+    begin : chip_find_and_select_next_macro_block
+
+      integer i;
+      reg [7:0] addr;
+      reg [7:0] activeMacro;
+      reg [7:0] foundOne;
+
+      addr = 1;
+      foundOne = 0;
+
+      for (i = 0; (foundOne == 0) && (i < chainLength); i = i + 1) begin
+
+        chip_set_selected_device(addr);
+        chip_read_memory(REG_MACRO_SEL, 1);
+        activeMacro = read_memory[0];
+        activeMacro = activeMacro & ((activeMacro ^ 8'hFF) + 1);
+
+        if (activeMacro != 0) begin
+          foundOne = 1;
+          write_memory[0] = activeMacro;
+          chip_write_memory(REG_MACRO_SEL, 1);
+
+          $display("Solution found on FPGA: %d Macro: %d", addr, activeMacro);
+        end
+
+        addr = addr + 1;
+      end
+    end
+  endtask
+
+  task chip_disable_macro ;
+    begin : chip_disable_macro_block
+
+    reg [7:0] macro;
+
+    macro = 0;
+    chip_write_memory(REG_MACRO_SEL, 1);
+    chip_set_selected_device(BROADCAST_ADDR_VALUE);
+
+    end
+  endtask
+
+  //----------------------------------------------------------------
+  // Chip chain device(s) under test.
+  //----------------------------------------------------------------
+
+	caravel uut (
+		.vddio	  (VDD3V3),
+		.vssio	  (VSS),
+		.vdda	  (VDD3V3),
+		.vssa	  (VSS),
+		.vccd	  (VDD1V8),
+		.vssd	  (VSS),
+		.vdda1    (USER_VDD3V3),
+		.vdda2    (USER_VDD3V3),
+		.vssa1	  (VSS),
+		.vssa2	  (VSS),
+		.vccd1	  (USER_VDD1V8),
+		.vccd2	  (USER_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("host_interface.hex")
+	) spiflash (
+		.csb(flash_csb),
+		.clk(flash_clk),
+		.io0(flash_io0),
+		.io1(flash_io1),
+		.io2(),			// not used
+		.io3()			// not used
+	);
+
+endmodule
+`default_nettype wire
diff --git a/verilog/rtl/decred_top/rtl/src/clock_div.v b/verilog/rtl/decred_top/rtl/src/clock_div_simple.v
similarity index 96%
rename from verilog/rtl/decred_top/rtl/src/clock_div.v
rename to verilog/rtl/decred_top/rtl/src/clock_div_simple.v
index 9c59430..459e99b 100755
--- a/verilog/rtl/decred_top/rtl/src/clock_div.v
+++ b/verilog/rtl/decred_top/rtl/src/clock_div_simple.v
@@ -1,6 +1,6 @@
 `timescale 1ns / 1ps
 
-module clock_div (
+module clock_div_simple (
   input  wire  iCLK,
   input  wire  RST,
 
diff --git a/verilog/rtl/decred_top/rtl/src/decred_controller.v b/verilog/rtl/decred_top/rtl/src/decred_controller.v
index b9d9350..d2503b2 100755
--- a/verilog/rtl/decred_top/rtl/src/decred_controller.v
+++ b/verilog/rtl/decred_top/rtl/src/decred_controller.v
@@ -82,7 +82,7 @@
   wire s1_clk_local;
   wire s1_div_output;
 
-  clock_div clock_divBlock (
+  clock_div_simple clock_divBlock (
     .iCLK(m1_clk_local),
     .clk_out(s1_div_output),
     .RST(rst_local_m1)
diff --git a/verilog/rtl/decred_top/rtl/src/decred_defines.v b/verilog/rtl/decred_top/rtl/src/decred_defines.v
index 9329af8..ef76e1f 100755
--- a/verilog/rtl/decred_top/rtl/src/decred_defines.v
+++ b/verilog/rtl/decred_top/rtl/src/decred_defines.v
@@ -3,4 +3,3 @@
 `define USE_REG_WRITE_TO_HASHMACRO // D-- register write ops to hash macros
 `define USE_VARIABLE_NONCE_OFFSET // D--
 //`define USE_SYSTEM_VERILOG //  -- 
-//`define FULL_CHIP_SIM //  --