diff --git a/verilog/dv/README.md b/verilog/dv/README.md
deleted file mode 100644
index 49cd280..0000000
--- a/verilog/dv/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-<!---
-# 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
--->
-# DV Tests
-
-Organized into two subdirectories:
-  * caravel: contains tests for both the mangement SoC and an example user project.
-  * wb_utests: contains unit tests for the wishbone components residing at the management SoC private bus
-
-<pre>
-├── caravel
-│   ├── mgmt_soc
-│   ├── user_proj_example
-└── wb_utests
-</pre>
-
diff --git a/verilog/dv/caravel/defs.h b/verilog/dv/caravel/defs.h
deleted file mode 100644
index a9d27ec..0000000
--- a/verilog/dv/caravel/defs.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * 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
- */
-
-#ifndef _STRIVE_H_
-#define _STRIVE_H_
-
-#include <stdint.h>
-#include <stdbool.h>
-
-// a pointer to this is a null pointer, but the compiler does not
-// know that because "sram" is a linker symbol from sections.lds.
-extern uint32_t sram;
-
-// Pointer to firmware flash routines
-extern uint32_t flashio_worker_begin;
-extern uint32_t flashio_worker_end;
-
-// Storage area (MGMT: 0x0100_0000, User: 0x0200_0000)
-#define reg_rw_block0  (*(volatile uint32_t*)0x01000000)
-#define reg_rw_block1  (*(volatile uint32_t*)0x01100000)
-#define reg_ro_block0  (*(volatile uint32_t*)0x02000000)
-
-// UART (0x2000_0000)
-#define reg_uart_clkdiv (*(volatile uint32_t*)0x20000000)
-#define reg_uart_data   (*(volatile uint32_t*)0x20000004)
-#define reg_uart_enable (*(volatile uint32_t*)0x20000008)
-
-// GPIO (0x2100_0000)
-#define reg_gpio_data (*(volatile uint32_t*)0x21000000)
-#define reg_gpio_ena  (*(volatile uint32_t*)0x21000004)
-#define reg_gpio_pu   (*(volatile uint32_t*)0x21000008)
-#define reg_gpio_pd   (*(volatile uint32_t*)0x2100000c)
-
-// Logic Analyzer (0x2200_0000)
-#define reg_la0_data (*(volatile uint32_t*)0x25000000)
-#define reg_la1_data (*(volatile uint32_t*)0x25000004)
-#define reg_la2_data (*(volatile uint32_t*)0x25000008)
-#define reg_la3_data (*(volatile uint32_t*)0x2500000c)
-
-#define reg_la0_oenb (*(volatile uint32_t*)0x25000010)
-#define reg_la1_oenb (*(volatile uint32_t*)0x25000014)
-#define reg_la2_oenb (*(volatile uint32_t*)0x25000018)
-#define reg_la3_oenb (*(volatile uint32_t*)0x2500001c)
-
-#define reg_la0_iena (*(volatile uint32_t*)0x25000020)
-#define reg_la1_iena (*(volatile uint32_t*)0x25000024)
-#define reg_la2_iena (*(volatile uint32_t*)0x25000028)
-#define reg_la3_iena (*(volatile uint32_t*)0x2500002c)
-
-#define reg_la_sample (*(volatile uint32_t*)0x25000030)
-
-// User Project Control (0x2300_0000)
-#define reg_mprj_xfer (*(volatile uint32_t*)0x26000000)
-#define reg_mprj_pwr  (*(volatile uint32_t*)0x26000004)
-#define reg_mprj_irq  (*(volatile uint32_t*)0x26000008)
-#define reg_mprj_datal (*(volatile uint32_t*)0x2600000c)
-#define reg_mprj_datah (*(volatile uint32_t*)0x26000010)
-
-#define reg_mprj_io_0 (*(volatile uint32_t*)0x26000024)
-#define reg_mprj_io_1 (*(volatile uint32_t*)0x26000028)
-#define reg_mprj_io_2 (*(volatile uint32_t*)0x2600002c)
-#define reg_mprj_io_3 (*(volatile uint32_t*)0x26000030)
-#define reg_mprj_io_4 (*(volatile uint32_t*)0x26000034)
-#define reg_mprj_io_5 (*(volatile uint32_t*)0x26000038)
-#define reg_mprj_io_6 (*(volatile uint32_t*)0x2600003c)
-
-#define reg_mprj_io_7 (*(volatile uint32_t*)0x26000040)
-#define reg_mprj_io_8 (*(volatile uint32_t*)0x26000044)
-#define reg_mprj_io_9 (*(volatile uint32_t*)0x26000048)
-#define reg_mprj_io_10 (*(volatile uint32_t*)0x2600004c)
-
-#define reg_mprj_io_11 (*(volatile uint32_t*)0x26000050)
-#define reg_mprj_io_12 (*(volatile uint32_t*)0x26000054)
-#define reg_mprj_io_13 (*(volatile uint32_t*)0x26000058)
-#define reg_mprj_io_14 (*(volatile uint32_t*)0x2600005c)
-
-#define reg_mprj_io_15 (*(volatile uint32_t*)0x26000060)
-#define reg_mprj_io_16 (*(volatile uint32_t*)0x26000064)
-#define reg_mprj_io_17 (*(volatile uint32_t*)0x26000068)
-#define reg_mprj_io_18 (*(volatile uint32_t*)0x2600006c)
-
-#define reg_mprj_io_19 (*(volatile uint32_t*)0x26000070)
-#define reg_mprj_io_20 (*(volatile uint32_t*)0x26000074)
-#define reg_mprj_io_21 (*(volatile uint32_t*)0x26000078)
-#define reg_mprj_io_22 (*(volatile uint32_t*)0x2600007c)
-
-#define reg_mprj_io_23 (*(volatile uint32_t*)0x26000080)
-#define reg_mprj_io_24 (*(volatile uint32_t*)0x26000084)
-#define reg_mprj_io_25 (*(volatile uint32_t*)0x26000088)
-#define reg_mprj_io_26 (*(volatile uint32_t*)0x2600008c)
-
-#define reg_mprj_io_27 (*(volatile uint32_t*)0x26000090)
-#define reg_mprj_io_28 (*(volatile uint32_t*)0x26000094)
-#define reg_mprj_io_29 (*(volatile uint32_t*)0x26000098)
-#define reg_mprj_io_30 (*(volatile uint32_t*)0x2600009c)
-#define reg_mprj_io_31 (*(volatile uint32_t*)0x260000a0)
-
-#define reg_mprj_io_32 (*(volatile uint32_t*)0x260000a4)
-#define reg_mprj_io_33 (*(volatile uint32_t*)0x260000a8)
-#define reg_mprj_io_34 (*(volatile uint32_t*)0x260000ac)
-#define reg_mprj_io_35 (*(volatile uint32_t*)0x260000b0)
-#define reg_mprj_io_36 (*(volatile uint32_t*)0x260000b4)
-#define reg_mprj_io_37 (*(volatile uint32_t*)0x260000b8)
-
-// User Project Slaves (0x3000_0000)
-#define reg_mprj_slave (*(volatile uint32_t*)0x30000000)
-
-// Flash Control SPI Configuration (2D00_0000)
-#define reg_spictrl (*(volatile uint32_t*)0x2d000000)         
-
-// Bit fields for Flash SPI control
-#define FLASH_BITBANG_IO0	0x00000001
-#define FLASH_BITBANG_IO1	0x00000002
-#define FLASH_BITBANG_CLK	0x00000010
-#define FLASH_BITBANG_CSB	0x00000020
-#define FLASH_BITBANG_OEB0	0x00000100
-#define FLASH_BITBANG_OEB1	0x00000200
-#define FLASH_ENABLE		0x80000000
-
-// Counter-Timer 0 Configuration
-#define reg_timer0_config (*(volatile uint32_t*)0x22000000)
-#define reg_timer0_value  (*(volatile uint32_t*)0x22000004)
-#define reg_timer0_data   (*(volatile uint32_t*)0x22000008)
-
-// Counter-Timer 1 Configuration
-#define reg_timer1_config (*(volatile uint32_t*)0x23000000)
-#define reg_timer1_value  (*(volatile uint32_t*)0x23000004)
-#define reg_timer1_data   (*(volatile uint32_t*)0x23000008)
-
-// Bit fields for Counter-timer configuration
-#define TIMER_ENABLE		0x01
-#define TIMER_ONESHOT		0x02
-#define TIMER_UPCOUNT		0x04
-#define TIMER_CHAIN		0x08
-#define TIMER_IRQ_ENABLE	0x10
-
-// SPI Master Configuration
-#define reg_spimaster_config (*(volatile uint32_t*)0x24000000)
-#define reg_spimaster_data   (*(volatile uint32_t*)0x24000004)
-
-// Bit fields for SPI master configuration
-#define SPI_MASTER_DIV_MASK	0x00ff
-#define SPI_MASTER_MLB		0x0100
-#define SPI_MASTER_INV_CSB	0x0200
-#define SPI_MASTER_INV_CLK	0x0400
-#define SPI_MASTER_MODE_1	0x0800
-#define SPI_MASTER_STREAM	0x1000
-#define SPI_MASTER_ENABLE	0x2000
-#define SPI_MASTER_IRQ_ENABLE	0x4000
-#define SPI_HOUSEKEEPING_CONN	0x8000
-
-// System Area (0x2F00_0000)
-#define reg_power_good    (*(volatile uint32_t*)0x2F000000)
-#define reg_clk_out_dest  (*(volatile uint32_t*)0x2F000004)
-#define reg_trap_out_dest (*(volatile uint32_t*)0x2F000008)
-#define reg_irq_source    (*(volatile uint32_t*)0x2F00000C)
-
-// Bit fields for reg_power_good
-#define USER1_VCCD_POWER_GOOD 0x01
-#define USER2_VCCD_POWER_GOOD 0x02
-#define USER1_VDDA_POWER_GOOD 0x04
-#define USER2_VDDA_POWER_GOOD 0x08
-
-// Bit fields for reg_clk_out_dest
-#define CLOCK1_MONITOR 0x01
-#define CLOCK2_MONITOR 0x02
-
-// Bit fields for reg_irq_source
-#define IRQ7_SOURCE 0x01
-#define IRQ8_SOURCE 0x02
-
-// Individual bit fields for the GPIO pad control
-#define MGMT_ENABLE	  0x0001
-#define OUTPUT_DISABLE	  0x0002
-#define HOLD_OVERRIDE	  0x0004
-#define INPUT_DISABLE	  0x0008
-#define MODE_SELECT	  0x0010
-#define ANALOG_ENABLE	  0x0020
-#define ANALOG_SELECT	  0x0040
-#define ANALOG_POLARITY	  0x0080
-#define SLOW_SLEW_MODE	  0x0100
-#define TRIPPOINT_SEL	  0x0200
-#define DIGITAL_MODE_MASK 0x1c00
-
-// Useful GPIO mode values
-#define GPIO_MODE_MGMT_STD_INPUT_NOPULL    0x0403
-#define GPIO_MODE_MGMT_STD_INPUT_PULLDOWN  0x0803
-#define GPIO_MODE_MGMT_STD_INPUT_PULLUP	   0x0c03
-#define GPIO_MODE_MGMT_STD_OUTPUT	   0x1809
-#define GPIO_MODE_MGMT_STD_BIDIRECTIONAL   0x1801
-#define GPIO_MODE_MGMT_STD_ANALOG   	   0x000b
-
-#define GPIO_MODE_USER_STD_INPUT_NOPULL	   0x0402
-#define GPIO_MODE_USER_STD_INPUT_PULLDOWN  0x0802
-#define GPIO_MODE_USER_STD_INPUT_PULLUP	   0x0c02
-#define GPIO_MODE_USER_STD_OUTPUT	   0x1808
-#define GPIO_MODE_USER_STD_BIDIRECTIONAL   0x1800
-#define GPIO_MODE_USER_STD_OUT_MONITORED   0x1802
-#define GPIO_MODE_USER_STD_ANALOG   	   0x000a
-
-// --------------------------------------------------------
-#endif
diff --git a/verilog/dv/caravel/mgmt_soc/Makefile b/verilog/dv/caravel/mgmt_soc/Makefile
deleted file mode 100644
index 7706531..0000000
--- a/verilog/dv/caravel/mgmt_soc/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# 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 = gpio_mgmt gpio mem uart perf hkspi sysctrl mprj_ctrl pass_thru timer timer2 pll storage qspi caravan irq user_pass_thru
-
-all:  ${PATTERNS}
-	for i in ${PATTERNS}; do \
-		( cd $$i && SIM=RTL make -f Makefile $${i}.vcd &> verify.log && grep Monitor verify.log) ; \
-		( cd $$i && SIM=GL 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/mgmt_soc/caravan/Makefile b/verilog/dv/caravel/mgmt_soc/caravan/Makefile
deleted file mode 100644
index 285e337..0000000
--- a/verilog/dv/caravel/mgmt_soc/caravan/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = caravan
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/caravan/README b/verilog/dv/caravel/mgmt_soc/caravan/README
deleted file mode 100644
index a39b365..0000000
--- a/verilog/dv/caravel/mgmt_soc/caravan/README
+++ /dev/null
@@ -1,27 +0,0 @@
-<!---
-# 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
--->
-------------------------------------------------
-Caravan
-basic testbench
-------------------------------------------------
-
-This testbench exercises the basic use of the Caravan analog project
-harness, which is equivalent to the Caravel chip with 11 GPIOs
-removed from the top of the padframe and replaced with straight-through
-connections to pads.
-
diff --git a/verilog/dv/caravel/mgmt_soc/caravan/caravan.c b/verilog/dv/caravel/mgmt_soc/caravan/caravan.c
deleted file mode 100644
index feca129..0000000
--- a/verilog/dv/caravel/mgmt_soc/caravan/caravan.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	Caravan GPIO Test
- *
- *	This is mainly a test of the digital I/O surrounding the analog
- *	pinouts on the caravan chip to make sure that they are connected
- *	properly after the middle GPIO pads and serial loader blocks are
- *	clipped out from the caravel design.
- *
- *	Tests PU and PD on the lower 8 pins while being driven from outside
- *	Tests Writing to the upper 8 pins
- *	Tests reading from the lower 8 pins
- */
-
-void main()
-{
-	int i;
-
-	/* Set data out to zero */
-	reg_mprj_datal = 0;
-
-	/* GPIO 14 to 24 have been replaced by analog and should be set	*/
-	/* to mode output to keep the input from floating.		*/
-	reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_15 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_14 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-	/* Lower 8 pins are input and upper 8 pins are output */
-	reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-	reg_mprj_io_13 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_12 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_11 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_10 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_9 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_8 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_7 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	// change the pull up and pull down (checked by the TB)
-	reg_mprj_datal = 0xa0000000;
-
-	reg_mprj_io_13 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_12 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_11 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_10 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_9 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_8 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_7 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	reg_mprj_datal = 0x0a000000;
-
-	reg_mprj_io_13 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_12 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_11 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_10 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_9 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_8 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_7 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	reg_mprj_io_13 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_12 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_11 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_10 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_9 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_8 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_7 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	// read the lower 8 pins, add 1 then output the result
-	// checked by the TB
-	reg_mprj_datal = 0xaa000000;
-
-	while (1) {
-		int x = (reg_mprj_datal & 0x3f80) >> 7;
-		reg_mprj_datal = (x+1) << 25;
-	}
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/caravan/caravan_tb.v b/verilog/dv/caravel/mgmt_soc/caravan/caravan_tb.v
deleted file mode 100644
index 1b32be2..0000000
--- a/verilog/dv/caravel/mgmt_soc/caravan/caravan_tb.v
+++ /dev/null
@@ -1,214 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_analog_netlists.v"
-`include "caravan_netlists.v"
-`include "spiflash.v"
-
-module caravan_tb;
-
-	reg clock;
-	reg power1;
-	reg power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("caravan.vcd");
-		$dumpvars(0, caravan_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test GPIO (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test GPIO (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	wire [37:0] mprj_io;		// Most of these are no-connects
-	wire [6:0]  checkbits_hi;	// Upper 7 valid GPIO bits
-	wire [7:0]  checkbits_lo;	// Lower 6 valid GPIO bits (read)
-
-	reg  [7:0] setbits_lo;		// Lower 6 valid GPIO bits (write)
-
-	assign mprj_io[13:7] = setbits_lo;
-	assign checkbits_lo = mprj_io[13:7];
-	assign checkbits_hi = mprj_io[31:25];
-	assign mprj_io[3] = 1'b1;       // Force CSB high.
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire gpio;
-
-	reg RSTB;
-
-	// Transactor
-	initial begin
-		setbits_lo <= {7{1'bz}};
-		wait(checkbits_hi == 7'h50);
-		repeat (500) @(posedge clock);
-		setbits_lo <= 7'h30;
-		wait(checkbits_hi == 7'h05);
-		repeat (500) @(posedge clock);
-		setbits_lo <= 7'h0f;
-		wait(checkbits_hi == 7'h55);
-		repeat (1000) @(posedge clock);
-		setbits_lo <= 7'h00;
-		repeat (1300) @(posedge clock);
-		setbits_lo <= 7'h01;
-		repeat (1300) @(posedge clock);
-		setbits_lo <= 7'h03;
-	end
-
-	// Monitor
-	initial begin
-		wait(checkbits_hi == 7'h50);	// 1st pull test
-		`ifdef GL
-			$display("Monitor: Test GPIO (GL) Started");
-		`else
-			$display("Monitor: Test GPIO (RTL) Started");
-		`endif
-		wait(checkbits_lo == 7'h30);	// (1st pull test result)
-		$display("Monitor: Check 1 seen");
-		wait(checkbits_hi == 7'h05);	// 2nd pull test
-		$display("Monitor: Check 2 seen");
-		wait(checkbits_lo == 7'h0F);	// (2nd pull test result)
-		$display("Monitor: Check 3 seen");
-		wait(checkbits_hi == 7'h55);	// loopback test
-		$display("Monitor: Check 4 seen");
-		wait(checkbits_lo == 7'h00);	// 1st value set
-		$display("Monitor: Check 5 seen");
-		wait(checkbits_hi == 7'h01);	// 1st loopback read
-		$display("Monitor: Check 6 seen");
-		wait(checkbits_lo == 7'h01);	// 2nd value set
-		$display("Monitor: Check 7 seen");
-		wait(checkbits_hi == 7'h02);	// 2nd loopback read
-		$display("Monitor: Check 8 seen");
-		wait(checkbits_lo == 7'h03);	// 3rd value set
-		$display("Monitor: Check 9 seen");
-		wait(checkbits_hi == 7'h04);	// 3rd loopback read
-		`ifdef GL
-			$display("Monitor: Test GPIO (GL) Passed");
-		`else
-			$display("Monitor: Test GPIO (RTL) Passed");
-		`endif
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin			// Power-up
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-		
-
-	always @(mprj_io) begin
-		#1 $display("GPIO state = %b (%d - %d)", mprj_io,
-				checkbits_hi, checkbits_lo);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-
-	caravan uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("caravan.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/dv/caravel/mgmt_soc/gpio/Makefile b/verilog/dv/caravel/mgmt_soc/gpio/Makefile
deleted file mode 100644
index 7346f4e..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = gpio
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/gpio/README b/verilog/dv/caravel/mgmt_soc/gpio/README
deleted file mode 100644
index baadc1f..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio/README
+++ /dev/null
@@ -1,44 +0,0 @@
-<!---
-# 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
--->
-------------------------------------------------
-Caravel
-gpio testbench
-------------------------------------------------
-
-This testbench exercises the fundamental use of the Caravel
-management SoC to drive the I/O in the user area as general
-purpose I/O on startup.
-
-On startup, all GPIO are configured as input to the management
-region (so as to be high impedence to the external world) and
-decoupled from the user project area.
-
-To configure any GPIO as output, the appropriate memory-mapped
-location for the I/O must be properly configured.  Since the
-I/O configuration is stored in two places, in the SoC, but
-also locally at each I/O pad, the "transfer" bit must be
-applied, which initiates a transfer of the configuration data
-around the padframe.
-
-The testbench takes 16 pins from the user area and checks
-functionality by applying input values on 8 of these pins from
-the testbench verilog, detecting them in the C program, then
-copying the values to the other 8 pins, and detecting those
-values in the testbench verilog.
-
-If any of that does not work, then the testbench will fail.
diff --git a/verilog/dv/caravel/mgmt_soc/gpio/gpio.c b/verilog/dv/caravel/mgmt_soc/gpio/gpio.c
deleted file mode 100644
index 73dd397..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio/gpio.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	GPIO Test
- *		Tests PU and PD on the lower 8 pins while being driven from outside
- *		Tests Writing to the upper 8 pins
- *		Tests reading from the lower 8 pins
- */
-
-void main()
-{
-	int i;
-
-	/* Set data out to zero */
-	reg_mprj_datal = 0;
-
-	/* Lower 8 pins are input and upper 8 pins are output */
-	reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	// change the pull up and pull down (checked by the TB)
-	reg_mprj_datal = 0xa0000000;
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	reg_mprj_datal = 0x0b000000;
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	// read the lower 8 pins, add 1 then output the result
-	// checked by the TB
-	reg_mprj_datal = 0xab000000;
-
-	while (1){
-		int x = (reg_mprj_datal & 0xff0000) >> 16;
-		reg_mprj_datal = (x+1) << 24;
-	}
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v b/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v
deleted file mode 100644
index a6bd94d..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v
+++ /dev/null
@@ -1,196 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module gpio_tb;
-
-	reg clock;
-	reg power1;
-	reg power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("gpio.vcd");
-		$dumpvars(0, gpio_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test GPIO (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test GPIO (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	wire [37:0] mprj_io;	// Most of these are no-connects
-	wire [15:0] checkbits;
-	reg  [7:0] checkbits_lo;
-	wire [7:0] checkbits_hi;
-
-	assign mprj_io[23:16] = checkbits_lo;
-	assign checkbits = mprj_io[31:16];
-	assign checkbits_hi = checkbits[15:8];
-	assign mprj_io[3] = 1'b1;       // Force CSB high.
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire gpio;
-
-	reg RSTB;
-
-	// Transactor
-	initial begin
-		checkbits_lo <= {8{1'bz}};
-		wait(checkbits_hi == 8'hA0);
-		checkbits_lo <= 8'hF0;
-		wait(checkbits_hi == 8'h0B);
-		checkbits_lo <= 8'h0F;
-		wait(checkbits_hi == 8'hAB);
-		checkbits_lo <= 8'h0;
-		repeat (1000) @(posedge clock);
-		checkbits_lo <= 8'h1;
-		repeat (1000) @(posedge clock);
-		checkbits_lo <= 8'h3;
-	end
-
-	// Monitor
-	initial begin
-		wait(checkbits_hi == 8'hA0);
-		wait(checkbits[7:0]  == 8'hF0);
-		wait(checkbits_hi == 8'h0B);
-		wait(checkbits[7:0]  == 8'h0F);
-		wait(checkbits_hi == 8'hAB);
-		wait(checkbits[7:0]  == 8'h00);
-		wait(checkbits_hi == 8'h01);
-		wait(checkbits[7:0]  == 8'h01);
-		wait(checkbits_hi == 8'h02);
-		wait(checkbits[7:0]  == 8'h03);
-		wait(checkbits_hi == 8'h04);
-		`ifdef GL
-			$display("Monitor: Test GPIO (GL) Passed");
-		`else
-			$display("Monitor: Test GPIO (RTL) Passed");
-		`endif
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin			// Power-up
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-		
-
-	always @(checkbits) begin
-		#1 $display("GPIO state = %b (%d - %d)", checkbits,
-				checkbits_hi, checkbits_lo);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("gpio.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/dv/caravel/mgmt_soc/gpio_mgmt/Makefile b/verilog/dv/caravel/mgmt_soc/gpio_mgmt/Makefile
deleted file mode 100644
index a4ae097..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = gpio_mgmt
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/README b/verilog/dv/caravel/mgmt_soc/gpio_mgmt/README
deleted file mode 100644
index c8dcd45..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/README
+++ /dev/null
@@ -1,27 +0,0 @@
-<!---
-# 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
--->
-------------------------------------------------
-Caravel
-gpio_mgmt testbench
-------------------------------------------------
-
-This testbench is the simplest "wake-up call" for the development
-board.  It toggles the single "gpio" pin under exclusive control
-of the management SoC;  first a few times quickly (so it can be
-seen in simulation) then continuously at a slow pulse rate, so it
-will blink the LED on the prototype board.
diff --git a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/gpio_mgmt.c b/verilog/dv/caravel/mgmt_soc/gpio_mgmt/gpio_mgmt.c
deleted file mode 100644
index 3a3265c..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/gpio_mgmt.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	Management SoC GPIO Pin Test
- *		Tests writing to the GPIO pin.
- */
-
-void main()
-{
-	int i;
-
-	reg_gpio_data = 0;
-	reg_gpio_ena = 0;
-	reg_gpio_pu = 0;
-	reg_gpio_pd = 0;
-
-	for (i = 0; i < 10; i++) {
-		/* Fast blink for simulation */
-		reg_gpio_data = 1;
-		reg_gpio_data = 0;
-	}
-
-	while (1) {
-		/* Slow blink for demonstration board */
-		for (i = 0; i < 30000; i++) {
-			reg_gpio_data = 1;
-		}
-		for (i = 0; i < 30000; i++) {
-			reg_gpio_data = 0;
-		}
-	}
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/gpio_mgmt_tb.v b/verilog/dv/caravel/mgmt_soc/gpio_mgmt/gpio_mgmt_tb.v
deleted file mode 100644
index b181dc3..0000000
--- a/verilog/dv/caravel/mgmt_soc/gpio_mgmt/gpio_mgmt_tb.v
+++ /dev/null
@@ -1,200 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module gpio_mgmt_tb;
-
-	reg clock;
-	reg power1;
-	reg power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("gpio_mgmt.vcd");
-		$dumpvars(0, gpio_mgmt_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test Mgmt GPIO (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test Mgmt GPIO (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	wire [37:0] mprj_io;	// Most of these are no-connects
-	wire [15:0] checkbits;
-	reg  [7:0] checkbits_lo;
-	wire [7:0] checkbits_hi;
-
-	assign mprj_io[23:16] = checkbits_lo;
-	assign checkbits = mprj_io[31:16];
-	assign checkbits_hi = checkbits[15:8];
-	assign mprj_io[3] = 1'b1;       // Force CSB high.
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire gpio;
-
-	reg RSTB;
-
-	// Monitor
-	initial begin
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		$display("Blink.");
-		wait(gpio == 1'b1);
-		wait(gpio == 1'b0);
-		`ifdef GL
-			$display("Monitor: Test Mgmt GPIO (GL) Passed");
-		`else
-			$display("Monitor: Test Mgmt GPIO (RTL) Passed");
-		`endif
-		#2000;
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin			// Power-up
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-		
-
-	always @(checkbits) begin
-		#1 $display("Mgmt GPIO state = %b (%d - %d)", checkbits,
-				checkbits_hi, checkbits_lo);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("gpio_mgmt.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/dv/caravel/mgmt_soc/hkspi/Makefile b/verilog/dv/caravel/mgmt_soc/hkspi/Makefile
deleted file mode 100644
index 2eae1ec..0000000
--- a/verilog/dv/caravel/mgmt_soc/hkspi/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = hkspi
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/hkspi/hkspi.c b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi.c
deleted file mode 100644
index 3bfac32..0000000
--- a/verilog/dv/caravel/mgmt_soc/hkspi/hkspi.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-void putchar(char c)
-{
-	if (c == '\n')
-		putchar('\r');
-	reg_uart_data = c;
-}
-
-void print(const char *p)
-{
-	while (*p)
-		putchar(*(p++));
-}
-
-// --------------------------------------------------------
-
-void main()
-{
-    // This program is just to keep the processor busy while the
-    // housekeeping SPI is being accessed, to show that the
-    // processor is interrupted only when the reset is applied
-    // through the SPI.
-
-    // Configure I/O:  High 16 bits of user area used for a 16-bit
-    // word to write and be detected by the testbench verilog.
-    // Only serial Tx line is used in this testbench.  It connects
-    // to mprj_io[6].  Since all lines of the chip are input or
-    // high impedence on startup, the I/O has to be configured
-    // for output
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_6 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // Start test
-    reg_mprj_datal = 0xa0000000;
-
-    // Set clock to 64 kbaud and enable the UART
-    reg_uart_clkdiv = 625;
-    reg_uart_enable = 1;
-
-    // Test message
-    print("\n");
-    print("  ____  _          ____         ____\n");
-    print(" |  _ \\(_) ___ ___/ ___|  ___  / ___|\n");
-    print(" | |_) | |/ __/ _ \\___ \\ / _ \\| |\n");
-    print(" |  __/| | (_| (_) |__) | (_) | |___\n");
-    print(" |_|   |_|\\___\\___/____/ \\___/ \\____|\n");
-
-    reg_mprj_datal = 0xab000000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v
deleted file mode 100644
index b895381..0000000
--- a/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v
+++ /dev/null
@@ -1,431 +0,0 @@
-// 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
-/*	
-	StriVe housekeeping SPI testbench.
-*/
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-`include "tbuart.v"
-
-module hkspi_tb;
-	reg clock;
-	reg SDI, CSB, SCK, RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire [15:0] checkbits;
-	wire [37:0] mprj_io;
-	wire uart_tx;
-	wire uart_rx;
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire flash_io2;
-	wire flash_io3;
-
-	wire SDO;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-    // The main testbench is here.  Put the housekeeping SPI into
-    // pass-thru mode and read several bytes from the flash SPI.
-
-    // First define tasks for SPI functions
-
-	task start_csb;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		CSB <= 1'b0;
-		#50;
-	    end
-	endtask
-
-	task end_csb;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		CSB <= 1'b1;
-		#50;
-	    end
-	endtask
-
-	task write_byte;
-	    input [7:0] odata;
-	    begin
-		SCK <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-		    SDI <= odata[i];
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-
-	task read_byte;
-	    output [7:0] idata;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-                    idata[i] = SDO;
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-
-	task read_write_byte
-	    (input [7:0] odata,
-	    output [7:0] idata);
-	    begin
-		SCK <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-		    SDI <= odata[i];
-                    idata[i] = SDO;
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-	
-	integer i;
-
-    // Now drive the digital signals on the housekeeping SPI
-	reg [7:0] tbdata;
-
-	initial begin
-	    $dumpfile("hkspi.vcd");
-	    $dumpvars(0, hkspi_tb);
-
-	    CSB <= 1'b1;
-	    SCK <= 1'b0;
-	    SDI <= 1'b0;
-	    RSTB <= 1'b0;
-
-	    // Delay, then bring chip out of reset
-	    #1000;
-	    RSTB <= 1'b1;
-	    #2000;
-
-            // First do a normal read from the housekeeping SPI to
-	    // make sure the housekeeping SPI works.
-
-	    start_csb();
-	    write_byte(8'h40);	// Read stream command
-	    write_byte(8'h03);	// Address (register 3 = product ID)
-	    read_byte(tbdata);
-	    end_csb();
-	    #10;
-	    $display("Read data = 0x%02x (should be 0x10)", tbdata);
-
-	    // Toggle external reset
-	    start_csb();
-	    write_byte(8'h80);	// Write stream command
-	    write_byte(8'h0b);	// Address (register 7 = external reset)
-	    write_byte(8'h01);	// Data = 0x01 (apply external reset)
-	    end_csb();
-
-	    start_csb();
-	    write_byte(8'h80);	// Write stream command
-	    write_byte(8'h0b);	// Address (register 7 = external reset)
-	    write_byte(8'h00);	// Data = 0x00 (release external reset)
-	    end_csb();
-
-	    // Read all registers (0 to 18)
-	    start_csb();
-	    write_byte(8'h40);	// Read stream command
-	    write_byte(8'h00);	// Address (register 3 = product ID)
-	    read_byte(tbdata);
-
-	    $display("Read register 0 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 1 = 0x%02x (should be 0x04)", tbdata);
-		if(tbdata !== 8'h04) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 2 = 0x%02x (should be 0x56)", tbdata);
-		if(tbdata !== 8'h56) begin
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed, %02x", tbdata); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed, %02x", tbdata); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 3 = 0x%02x (should be 0x10)", tbdata);
-		if(tbdata !== 8'h10) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed, %02x", tbdata); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed, %02x", tbdata); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 4 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 5 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 6 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 7 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 8 = 0x%02x (should be 0x02)", tbdata);
-		if(tbdata !== 8'h02) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 9 = 0x%02x (should be 0x01)", tbdata);
-		if(tbdata !== 8'h01) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 10 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 11 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 12 = 0x%02x (should be 0x00)", tbdata);
-		if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 13 = 0x%02x (should be 0xff)", tbdata);
-		if(tbdata !== 8'hff) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 14 = 0x%02x (should be 0xef)", tbdata);
-		if(tbdata !== 8'hef) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 15 = 0x%02x (should be 0xff)", tbdata);
-		if(tbdata !== 8'hff) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 16 = 0x%02x (should be 0x03)", tbdata);
-		if(tbdata !== 8'h03) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 17 = 0x%02x (should be 0x12)", tbdata);
-		if(tbdata !== 8'h12) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read register 18 = 0x%02x (should be 0x04)", tbdata);
-		if(tbdata !== 8'h04) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI (RTL) Failed"); $finish; 
-			`endif
-		end
-		
-        end_csb();
-
-		`ifdef GL
-			$display("Monitor: Test HK SPI (GL) Passed");
-		`else
-			$display("Monitor: Test HK SPI (RTL) Passed");
-		`endif
-
-	    #10000;
- 	    $finish;
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	wire hk_sck;
-	wire hk_csb;
-	wire hk_sdi;
-
-	assign hk_sck = SCK;
-	assign hk_csb = CSB;
-	assign hk_sdi = SDI;
-
-	assign checkbits = mprj_io[31:16];
-	assign uart_tx = mprj_io[6];
-	assign mprj_io[5] = uart_rx;
-	assign mprj_io[4] = hk_sck;
-	assign mprj_io[3] = hk_csb;
-	assign mprj_io[2] = hk_sdi;
-	assign SDO = mprj_io[1];
-	
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("hkspi.hex")
-	) spiflash (
-		.csb(flash_csb),
-		.clk(flash_clk),
-		.io0(flash_io0),
-		.io1(flash_io1),
-		.io2(),			// not used
-		.io3()			// not used
-	);
-
-	tbuart tbuart (
-		.ser_rx(uart_tx)
-	);
-		
-endmodule
-`default_nettype wire
diff --git a/verilog/dv/caravel/mgmt_soc/irq/Makefile b/verilog/dv/caravel/mgmt_soc/irq/Makefile
deleted file mode 100644
index 4520f98..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/Makefile
+++ /dev/null
@@ -1,82 +0,0 @@
-# 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 = ../../../..
-PDK_PATH = $(PDK_ROOT)/sky130A
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = irq
-
-all:  ${PATTERN:=.vcd}
-
-ex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp check-env
-	vvp $<
-
-%.elf: %.c sections.lds start.S check-env
-	${GCC_PATH}/${GCC_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ 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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
diff --git a/verilog/dv/caravel/mgmt_soc/irq/README b/verilog/dv/caravel/mgmt_soc/irq/README
deleted file mode 100644
index 99d3cf9..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/README
+++ /dev/null
@@ -1,32 +0,0 @@
-<!---
-# 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
--->
-------------------------------------------------
-Caravel
-irq testbench
-------------------------------------------------
-
-This testbench demonstrates how to use the interrupts on the
-picoRV32.  It uses the internal picoRV32 counter to set up an
-interval timer.  At each timer expiration, an interrupt is
-generated, and the assembler code in start.S runs and captures
-data from a routine emulating a Digilent PMOD MIC-3 microphone
-module.  Data are accumulated in a ring buffer reserved in the
-top of memory.  The main loop of the program queries the
-current ring buffer position, reads the data there, and
-displays the value on the GPIO (upper 16 of the lower 32 GPIO
-channels).
diff --git a/verilog/dv/caravel/mgmt_soc/irq/custom_ops.S b/verilog/dv/caravel/mgmt_soc/irq/custom_ops.S
deleted file mode 100644
index e3d1e2d..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/custom_ops.S
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  SPDX-FileCopyrightText: 2015 Clifford Wolf
- *  PicoRV32 -- A Small RISC-V (RV32I) Processor Core
- *
- *  Copyright (C) 2015  Clifford Wolf <clifford@clifford.at>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-#define regnum_q0   0
-#define regnum_q1   1
-#define regnum_q2   2
-#define regnum_q3   3
-
-#define regnum_x0   0
-#define regnum_x1   1
-#define regnum_x2   2
-#define regnum_x3   3
-#define regnum_x4   4
-#define regnum_x5   5
-#define regnum_x6   6
-#define regnum_x7   7
-#define regnum_x8   8
-#define regnum_x9   9
-#define regnum_x10 10
-#define regnum_x11 11
-#define regnum_x12 12
-#define regnum_x13 13
-#define regnum_x14 14
-#define regnum_x15 15
-#define regnum_x16 16
-#define regnum_x17 17
-#define regnum_x18 18
-#define regnum_x19 19
-#define regnum_x20 20
-#define regnum_x21 21
-#define regnum_x22 22
-#define regnum_x23 23
-#define regnum_x24 24
-#define regnum_x25 25
-#define regnum_x26 26
-#define regnum_x27 27
-#define regnum_x28 28
-#define regnum_x29 29
-#define regnum_x30 30
-#define regnum_x31 31
-
-#define regnum_zero 0
-#define regnum_ra   1
-#define regnum_sp   2
-#define regnum_gp   3
-#define regnum_tp   4
-#define regnum_t0   5
-#define regnum_t1   6
-#define regnum_t2   7
-#define regnum_s0   8
-#define regnum_s1   9
-#define regnum_a0  10
-#define regnum_a1  11
-#define regnum_a2  12
-#define regnum_a3  13
-#define regnum_a4  14
-#define regnum_a5  15
-#define regnum_a6  16
-#define regnum_a7  17
-#define regnum_s2  18
-#define regnum_s3  19
-#define regnum_s4  20
-#define regnum_s5  21
-#define regnum_s6  22
-#define regnum_s7  23
-#define regnum_s8  24
-#define regnum_s9  25
-#define regnum_s10 26
-#define regnum_s11 27
-#define regnum_t3  28
-#define regnum_t4  29
-#define regnum_t5  30
-#define regnum_t6  31
-
-// x8 is s0 and also fp
-#define regnum_fp   8
-
-#define r_type_insn(_f7, _rs2, _rs1, _f3, _rd, _opc) \
-.word (((_f7) << 25) | ((_rs2) << 20) | ((_rs1) << 15) | ((_f3) << 12) | ((_rd) << 7) | ((_opc) << 0))
-
-#define picorv32_getq_insn(_rd, _qs) \
-r_type_insn(0b0000000, 0, regnum_ ## _qs, 0b100, regnum_ ## _rd, 0b0001011)
-
-#define picorv32_setq_insn(_qd, _rs) \
-r_type_insn(0b0000001, 0, regnum_ ## _rs, 0b010, regnum_ ## _qd, 0b0001011)
-
-#define picorv32_retirq_insn() \
-r_type_insn(0b0000010, 0, 0, 0b000, 0, 0b0001011)
-
-#define picorv32_maskirq_insn(_rd, _rs) \
-r_type_insn(0b0000011, 0, regnum_ ## _rs, 0b110, regnum_ ## _rd, 0b0001011)
-
-#define picorv32_waitirq_insn(_rd) \
-r_type_insn(0b0000100, 0, 0, 0b100, regnum_ ## _rd, 0b0001011)
-
-#define picorv32_timer_insn(_rd, _rs) \
-r_type_insn(0b0000101, 0, regnum_ ## _rs, 0b110, regnum_ ## _rd, 0b0001011)
-
diff --git a/verilog/dv/caravel/mgmt_soc/irq/irq.c b/verilog/dv/caravel/mgmt_soc/irq/irq.c
deleted file mode 100644
index 61dfcdd..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/irq.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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"
-
-// -------------------------------------------------------------------------
-// Test IRQ callback
-// -------------------------------------------------------------------------
-
-uint16_t flag;
-
-void irq_callback()
-{
-    /* If this routine is called, then the test passes the 1st stage */
-    reg_mprj_datah = 0xa;	// Signal end of test 1st stage 
-    reg_mprj_datal = 0x20000;
-    flag = 1;
-    return;
-}
-
-void main()
-{
-    uint16_t data;
-    int i;
-
-    // Configure GPIO upper bits to assert the test code
-    reg_mprj_io_35 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_34 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_33 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_32 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    /* Apply the GPIO configuration */
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    reg_mprj_datah = 0x5;	// Signal start of test
-    reg_mprj_datal = 0;
-    flag = 0;
-
-    // Loop, waiting for the interrupt to change reg_mprj_datah
-
-    while (flag == 0) {
-        reg_mprj_datal = 0x10000;
-    }
-    reg_mprj_datal = 0x40000;
-    reg_mprj_datah = 0xc;	// Signal end of test
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/irq/irq_tb.v b/verilog/dv/caravel/mgmt_soc/irq/irq_tb.v
deleted file mode 100644
index 0e03d6d..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/irq_tb.v
+++ /dev/null
@@ -1,172 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  Caravel - A full example SoC using PicoRV32 in SkyWater sky130
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2021  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module irq_tb;
-
-	reg clock;
-	reg power1;
-	reg power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("irq.vcd");
-		$dumpvars(0, irq_tb);
-		
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (12) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test IRQ (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test IRQ (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	wire [37:0] mprj_io;	// Most of these are no-connects
-	wire [3:0]  status;
-	wire [3:0] checkbits;
-
-	assign checkbits = mprj_io[19:16];
-	assign status = mprj_io[35:32];
-	assign mprj_io[3] = 1'b1;	// Force CSB high.
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire gpio;
-
-	reg RSTB;
-
-	// Monitor
-	initial begin
-		wait(status == 4'h5);
-		`ifdef GL
-			$display("Monitor: Test IRQ (GL) Started");
-		`else
-			$display("Monitor: Test IRQ (RTL) Started");
-		`endif
-		wait(status == 4'ha);
-		wait(status == 4'hc);
-		`ifdef GL
-			$display("Monitor: Test IRQ (GL) Passed");
-		`else
-			$display("Monitor: Test IRQ (RTL) Passed");
-		`endif
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;		// Release reset
-		#2000;
-	end
-
-	initial begin			// Power-up
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-               
-	always @(checkbits, status) begin
-		#1 $display("GPIO state = %b (%b)", checkbits, status);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio    (VSS),
-		.vdda     (VDD3V3),
-		.vssa     (VSS),
-		.vccd     (VDD1V8),
-		.vssd     (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1    (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("irq.hex")
-	) spiflash (
-		.csb(flash_csb),
-		.clk(flash_clk),
-		.io0(flash_io0),
-		.io1(flash_io1),
-		.io2(),			// not used
-		.io3()			// not used
-	);
-
-endmodule
diff --git a/verilog/dv/caravel/mgmt_soc/irq/sections.lds b/verilog/dv/caravel/mgmt_soc/irq/sections.lds
deleted file mode 100644
index c328222..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/sections.lds
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-# 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
-*/
-
-/*
- *-------------------------------------------------------------------------
- * Note:  This is like the default sections.lds file for Caravel, but moves
- * the start of SRAM used by the compiler to address 0x80 to make room for
- * memory used by the firmware routines defined in the local start.S file.
- *-------------------------------------------------------------------------
- */
-
-MEMORY {
-	FLASH (rx)	: ORIGIN = 0x10000000, LENGTH = 0x400000 	/* 4MB */
-	RAM(xrw)	: ORIGIN = 0x00000080, LENGTH = 0x0380		/* 256 words (1 KB) */ 
-}
-
-SECTIONS {
-	/* The program code and other data goes into FLASH */
-	.text :
-	{
-		. = ALIGN(4);
-		*(.text)	/* .text sections (code) */
-		*(.text*)	/* .text* sections (code) */
-		*(.rodata)	/* .rodata sections (constants, strings, etc.) */
-		*(.rodata*)	/* .rodata* sections (constants, strings, etc.) */
-		*(.srodata)	/* .srodata sections (constants, strings, etc.) */
-		*(.srodata*)	/* .srodata*sections (constants, strings, etc.) */
-		. = ALIGN(4);
-		_etext = .;		/* define a global symbol at end of code */
-		_sidata = _etext;	/* This is used by the startup to initialize data */
-	} >FLASH
-
-	/* Initialized data section */
-	.data : AT ( _sidata )
-	{
-		. = ALIGN(4);
-		_sdata = .;
-		_ram_start = .;
-		. = ALIGN(4);
-		*(.data)
-		*(.data*)
-		*(.sdata)
-		*(.sdata*)
-		. = ALIGN(4);
-		_edata = .;
-	} >RAM
-
-	/* Uninitialized data section */
-	.bss :
-	{
-		. = ALIGN(4);
-		_sbss = .;
-		*(.bss)
-		*(.bss*)
-		*(.sbss)
-		*(.sbss*)
-		*(COMMON)
-
-		. = ALIGN(4);
-		_ebss = .;
-	} >RAM
-
-	/* Define the start of the heap */
-	.heap :
-	{
-		. = ALIGN(4);
-		_heap_start = .;
-	} >RAM
-}
diff --git a/verilog/dv/caravel/mgmt_soc/irq/start.S b/verilog/dv/caravel/mgmt_soc/irq/start.S
deleted file mode 100644
index 7c1c8a5..0000000
--- a/verilog/dv/caravel/mgmt_soc/irq/start.S
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * 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
- */
-
-/*-----------------------------------------------*/
-/* Start code that enables and handles an IRQ 	 */
-/*-----------------------------------------------*/
-
-#undef ENABLE_FASTIRQ
-
-#include "custom_ops.S"
-
-.section .text
-.global irq
-
-reset_vec:
-	j start
-
-/* Interrupt handler @ 0x10000004 */
-/* Requires defining a routine called irq_callback in the C code */
-
-.balign 4
-irq_vec:
-        sw gp,   0*4+0x10(zero)
-        sw t0,   1*4+0x10(zero)
-        sw t1,   2*4+0x10(zero)
-        sw t2,   3*4+0x10(zero)
-        sw t4,   4*4+0x10(zero)
-        sw t5,   5*4+0x10(zero)
-
-	call irq_callback
-
-        lw gp,   0*4+0x10(zero)
-        lw t0,   1*4+0x10(zero)
-        lw t1,   2*4+0x10(zero)
-        lw t2,   3*4+0x10(zero)
-        lw t4,   4*4+0x10(zero)
-        lw t5,   5*4+0x10(zero)
-
-        picorv32_retirq_insn()
-
-irq_regs:
-	.fill 32,8
-
-
-/* Main program */
-
-start:
-
-# zero-initialize register file
-addi x1, zero, 0
-# x2 (sp) is initialized by reset
-addi x3, zero, 0
-addi x4, zero, 0
-addi x5, zero, 0
-addi x6, zero, 0
-addi x7, zero, 0
-addi x8, zero, 0
-addi x9, zero, 0
-addi x10, zero, 0
-addi x11, zero, 0
-addi x12, zero, 0
-addi x13, zero, 0
-addi x14, zero, 0
-addi x15, zero, 0
-addi x16, zero, 0
-addi x17, zero, 0
-addi x18, zero, 0
-addi x19, zero, 0
-addi x20, zero, 0
-addi x21, zero, 0
-addi x22, zero, 0
-addi x23, zero, 0
-addi x24, zero, 0
-addi x25, zero, 0
-addi x26, zero, 0
-addi x27, zero, 0
-addi x28, zero, 0
-addi x29, zero, 0
-addi x30, zero, 0
-addi x31, zero, 0
-
-# zero initialize scratchpad memory
-# setmemloop:
-# sw zero, 0(x1)
-# addi x1, x1, 4
-# blt x1, sp, setmemloop
-
-# Write these instructions to memory location zero and following:
-# lui t4, 0x10000	= 10000eb7
-# addi t4, t4, 4	= 0e91
-# jalr t4, 0		= 000e80e7
-#
-# These three instructions jump to 0x10000004, which is the location
-# of the interrupt handler.  For a fast interrupt handler, the whole
-# handler should be moved into SRAM.
-
-li  t4, 0x10000eb7
-sw  t4, 0(zero)
-li  t4, 0x80e70e91
-sw  t4, 4(zero)
-li  t4, 0x000e
-sw  t4, 8(zero)
-
-# Enable the timer IRQ only
-li   t4, 0xfff0
-picorv32_maskirq_insn(t4, t4)
-
-# Set the picorv32 32-bit counter/timer to trigger one interrupt.
-
-li t4, 0x1200
-picorv32_timer_insn(t4, t4)
-
-# call main
-call main
-loop:
-j loop
-
-.global flashio_worker_begin
-.global flashio_worker_end
-
-flashio_worker_begin:
-# a0 ... data pointer
-# a1 ... data length
-# a2 ... optional WREN cmd (0 = disable)
-
-# address of SPI ctrl reg
-li   t0, 0x02000000
-
-# Set CS high, IO0 is output
-li   t1, 0x120
-sh   t1, 0(t0)
-
-# Enable Manual SPI Ctrl
-sb   zero, 3(t0)
-
-# Send optional WREN cmd
-beqz a2, flashio_worker_L1
-li   t5, 8
-andi t2, a2, 0xff
-flashio_worker_L4:
-srli t4, t2, 7
-sb   t4, 0(t0)
-ori  t4, t4, 0x10
-sb   t4, 0(t0)
-slli t2, t2, 1
-andi t2, t2, 0xff
-addi t5, t5, -1
-bnez t5, flashio_worker_L4
-sb   t1, 0(t0)
-
-# SPI transfer
-flashio_worker_L1:
-beqz a1, flashio_worker_L3
-li   t5, 8
-lbu  t2, 0(a0)
-flashio_worker_L2:
-srli t4, t2, 7
-sb   t4, 0(t0)
-ori  t4, t4, 0x10
-sb   t4, 0(t0)
-lbu  t4, 0(t0)
-andi t4, t4, 2
-srli t4, t4, 1
-slli t2, t2, 1
-or   t2, t2, t4
-andi t2, t2, 0xff
-addi t5, t5, -1
-bnez t5, flashio_worker_L2
-sb   t2, 0(a0)
-addi a0, a0, 1
-addi a1, a1, -1
-j    flashio_worker_L1
-flashio_worker_L3:
-
-# Back to MEMIO mode
-li   t1, 0x80
-sb   t1, 3(t0)
-
-ret
-flashio_worker_end:
-
diff --git a/verilog/dv/caravel/mgmt_soc/mem/Makefile b/verilog/dv/caravel/mgmt_soc/mem/Makefile
deleted file mode 100644
index 7ea6ed8..0000000
--- a/verilog/dv/caravel/mgmt_soc/mem/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = mem
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/mem/mem.c b/verilog/dv/caravel/mgmt_soc/mem/mem.c
deleted file mode 100644
index a3b6fcc..0000000
--- a/verilog/dv/caravel/mgmt_soc/mem/mem.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
-	Memory Test
-	It uses GPIO to flag the success or failure of the test
-*/
-unsigned int ints[10];
-unsigned short shorts[10];
-unsigned char bytes[10];
-
-void main()
-{
-    int i;
-
-    /* Upper 16 user area pins are configured to be GPIO output */
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // start test
-    reg_mprj_datal = 0xA0400000;
-
-    // Test Word R/W
-    for (i=0; i<10; i++)
-	ints[i] = i*5000 + 10000;
-	
-    for (i=0; i<10; i++)
-	if ((i*5000+10000) != ints[i])
-	    reg_mprj_datal = 0xAB400000;
-
-    reg_mprj_datal = 0xAB410000;
-	
-    // Test Half Word R/W
-    reg_mprj_datal = 0xA0200000;
-    for (i=0; i<10; i++)
-	shorts[i] = i*500 + 100;
-	
-    for(i=0; i<10; i++)
-	if((i*500+100) != shorts[i])
-	    reg_mprj_datal = 0xAB200000;
-
-    reg_mprj_datal = 0xAB210000;
-
-    // Test byte R/W
-    reg_mprj_datal = 0xA0100000;
-    for(i=0; i<10; i++)
-	bytes[i] = i*5 + 10;
-	
-    for(i=0; i<10; i++)
-	if((i*5+10) != bytes[i])
-	    reg_mprj_datal = 0xAB100000;
-
-    reg_mprj_datal = 0xAB110000;
-}
\ No newline at end of file
diff --git a/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v b/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v
deleted file mode 100644
index 4aa244a..0000000
--- a/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v
+++ /dev/null
@@ -1,203 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module mem_tb;
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	wire gpio;
-        wire [15:0] checkbits;
-	wire [37:0] mprj_io;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-
-	assign checkbits = mprj_io[31:16];
-
-	// 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 #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin
-		$dumpfile("mem.vcd");
-		$dumpvars(0, mem_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (100) begin
-			repeat (1000) @(posedge clock);
-			//$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test MEM (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test MEM (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		if(checkbits == 16'hA040) begin
-			$display("Mem Test (word rw) started");
-		end
-		else if(checkbits == 16'hAB40) begin
-			$display("%c[1;31m",27);
-			`ifdef GL
-				$display("Monitor: Test MEM (GL) [word rw] failed");
-			`else
-				$display("Monitor: Test MEM (RTL) [word rw] failed");
-			`endif
-			$display("%c[0m",27);
-			$finish;
-		end
-		else if(checkbits == 16'hAB41) begin
-			`ifdef GL
-				$display("Monitor: Test MEM (GL) [word rw]  passed");
-			`else
-				$display("Monitor: Test MEM (RTL) [word rw]  passed");
-			`endif
-		end
-		else if(checkbits == 16'hA020) begin
-			$display("Mem Test (short rw) started");
-		end
-		else if(checkbits == 16'hAB20) begin
-			$display("%c[1;31m",27);
-			`ifdef GL
-				$display("Monitor: Test MEM (GL) [short rw] failed");
-			`else
-				$display("Monitor: Test MEM (RTL) [short rw] failed");
-			`endif
-			$display("%c[0m",27);
-			$finish;
-		end
-		else if(checkbits == 16'hAB21) begin
-			`ifdef GL
-				$display("Monitor: Test MEM (GL) [short rw]  passed");
-			`else
-				$display("Monitor: Test MEM (RTL) [short rw]  passed");
-			`endif
-		end
-		else if(checkbits == 16'hA010) begin
-			$display("Mem Test (byte rw) started");
-		end
-		else if(checkbits == 16'hAB10) begin
-			$display("%c[1;31m",27);
-			`ifdef GL
-				$display("Monitor: Test MEM (GL) [byte rw] failed");
-			`else
-				$display("Monitor: Test MEM (RTL) [byte rw] failed");
-			`endif
-			$display("%c[0m",27);
-			$finish;
-		end
-		else if(checkbits == 16'hAB11) begin
-			`ifdef GL
-				$display("Monitor: Test MEM (GL) [byte rw] passed");
-			`else
-				$display("Monitor: Test MEM (RTL) [byte rw] passed");
-			`endif
-			$finish;
-		end
-
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VSS = 1'b0;
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-
-	assign mprj_io[3] = 1'b1;       // Force CSB high.
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("mem.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/dv/caravel/mgmt_soc/mprj_ctrl/Makefile b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/Makefile
deleted file mode 100644
index a27ef40..0000000
--- a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = mprj_ctrl
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl.c b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl.c
deleted file mode 100644
index 1d7a140..0000000
--- a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	User Project IO Control Test
- */
-
-void main()
-{
-    /* All GPIO pins are configured to be output	*/
-    /* The lower 28 bits are connected to the user	*/
-    /* project to output the counter result, and the	*/
-    /* upper 4 bits are connected to the management	*/
-    /* SoC to apply values that can be flagged by the	*/
-    /* testbench for specific benchmark tests.		*/
-
-    /* GPIOs 31 to 16 are connected to the management SoC */
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    /* GPIOs 27 to 0 are connected to the user area */
-    reg_mprj_io_27 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_11 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_10 = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_9  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_8  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_7  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_6  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_5  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_4  = GPIO_MODE_USER_STD_OUTPUT;
-    // reg_mprj_io_3  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_2  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_1  = GPIO_MODE_USER_STD_OUTPUT;
-    reg_mprj_io_0  = GPIO_MODE_USER_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    reg_mprj_datal = 0;
-
-    // start test
-    reg_mprj_datal = 0x50000000;
-
-    // Write to IO Control
-    reg_mprj_io_0 = 0x004F;
-    if (reg_mprj_io_0 != 0x004F)
-	reg_mprj_datal = 0x60000000;
-     else
-	reg_mprj_datal = 0x70000000;
-
-    // Write to IO Control 
-    reg_mprj_io_1 = 0x005F;
-    if (reg_mprj_io_1 != 0x005F)
-	reg_mprj_datal = 0x80000000;
-    else
-	reg_mprj_datal = 0x90000000;
-
-    // Write to IO Control
-    reg_mprj_io_2 = 0x006F;
-    if (reg_mprj_io_2 != 0x006F)
-	reg_mprj_datal = 0xA0000000;
-    else
-	reg_mprj_datal = 0xb0000000;
-
-    // Write to IO Control (NOTE:  Only 13 bits are valid)
-    reg_mprj_io_3 = 0xF0F5;
-    if (reg_mprj_io_3 != 0x10F5)
-	reg_mprj_datal = 0xc0000000;
-    else
-	reg_mprj_datal = 0xd0000000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
deleted file mode 100644
index 6ddfca3..0000000
--- a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
+++ /dev/null
@@ -1,176 +0,0 @@
-// 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
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module mprj_ctrl_tb;
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire [37:0] user_io;
-	wire SDO;
-
-	wire [3:0] checkbits;
-
-	assign checkbits = user_io[31:28];
-
-	// 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 #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin
-		$dumpfile("mprj_ctrl.vcd");
-		$dumpvars(0, mprj_ctrl_tb);
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test User Project (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test User Project (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	always @(checkbits) begin
-		if(checkbits == 4'h5) begin
-			$display("User Project control Test started");
-		end else if(checkbits == 4'h6) begin
-			$display("%c[1;31m",27);
-			$display("Monitor: IO control R/W failed (check 6)");
-			$display("%c[0m",27);
-			$finish;
-		end else if(checkbits == 4'h7) begin
-			$display("Monitor: IO control R/W passed (check 7)");
-		end else if(checkbits == 4'h8) begin
-            		$display("%c[1;31m",27);
-			$display("Monitor: power control R/W failed (check 8)");
-			$display("%c[0m",27);
-			$finish;
-        	end else if(checkbits == 4'h9) begin
-			$display("Monitor: power control R/W passed (check 9)");
-		end else if(checkbits == 4'ha) begin
-            		$display("%c[1;31m",27);
-			$display("Monitor: power control R/W failed (check 10)");
-			$display("%c[0m",27);
-			$finish;
-        	end else if(checkbits == 4'hb) begin
-			$display("Monitor: power control R/W passed (check 11)");
-		end else if(checkbits == 4'hc) begin
-            		$display("%c[1;31m",27);
-			$display("Monitor: power control R/W failed (check 12)");
-			$display("%c[0m",27);
-			$finish;
-        	end else if(checkbits == 4'hd) begin
-
-			$display("Monitor: power control R/W passed (check 13)");
-			`ifdef GL
-            	$display("Monitor: User Project control (GL) test passed.");
-			`else
-			    $display("Monitor: User Project control (RTL) test passed.");
-			`endif
-            $finish;
-        	end			
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(gpio) begin
-		#1 $display("GPIO state = %b ", gpio);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-	
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	assign user_io[3] = 1'b1;
-	
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (VSS),
-		.vssa2	  (VSS),
-		.vccd1	  (VDD1V8),
-		.vccd2	  (VDD1V8),
-		.vssd1	  (VSS),
-		.vssd2	  (VSS),
-		.clock	   (clock),
-		.gpio      (gpio),
-		.mprj_io   (user_io),
-		.flash_csb (flash_csb),
-		.flash_clk (flash_clk),
-		.flash_io0 (flash_io0),
-		.flash_io1 (flash_io1),
-		.resetb	   (RSTB)
-	);
-
-	spiflash #(
-		.FILENAME("mprj_ctrl.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/dv/caravel/mgmt_soc/pass_thru/Makefile b/verilog/dv/caravel/mgmt_soc/pass_thru/Makefile
deleted file mode 100644
index 59ee63c..0000000
--- a/verilog/dv/caravel/mgmt_soc/pass_thru/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = pass_thru
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru.c b/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru.c
deleted file mode 100644
index 33a981d..0000000
--- a/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-void putchar(char c)
-{
-	if (c == '\n')
-		putchar('\r');
-	reg_uart_data = c;
-}
-
-void print(const char *p)
-{
-	while (*p)
-		putchar(*(p++));
-}
-
-// --------------------------------------------------------
-
-void main()
-{
-    // This program is just to keep the processor busy while the
-    // housekeeping SPI is being accessed. to show that the
-    // processor is halted while the SPI is accessing the
-    // flash SPI in pass-through mode.
-
-    // Configure I/O:  High 16 bits of user area used for a 16-bit
-    // word to write and be detected by the testbench verilog.
-    // Only serial Tx line is used in this testbench.  It connects
-    // to mprj_io[6].  Since all lines of the chip are input or
-    // high impedence on startup, the I/O has to be configured
-    // for output
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_6 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // Start test
-    reg_mprj_datal = 0xa0000000;
-
-    // Set clock to 64 kbaud and enable the UART
-    reg_uart_clkdiv = 625;
-    reg_uart_enable = 1;
-
-    // Test in progress
-    reg_mprj_datal = 0xa5000000;
-
-    // Test message
-    print("Test message\n");
-
-    // End test
-    reg_mprj_datal = 0xab000000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v b/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v
deleted file mode 100644
index 4ab65de..0000000
--- a/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v
+++ /dev/null
@@ -1,351 +0,0 @@
-// 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
-/*	
- *	StriVe housekeeping pass-thru mode SPI testbench.
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-`include "tbuart.v"
-
-module pass_thru_tb;
-	reg clock;
-	reg SDI, CSB, SCK, RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire [15:0] checkbits;
-	wire [37:0] mprj_io;
-	wire uart_tx;
-	wire uart_rx;
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire flash_io2;
-	wire flash_io3;
-
-	wire SDO;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-    // The main testbench is here.  Put the housekeeping SPI into
-    // pass-thru mode and read several bytes from the flash SPI.
-
-    // First define tasks for SPI functions
-
-	task start_csb;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		CSB <= 1'b0;
-		#50;
-	    end
-	endtask
-
-	task end_csb;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		CSB <= 1'b1;
-		#50;
-	    end
-	endtask
-
-	task write_byte;
-	    input [7:0] odata;
-	    begin
-		SCK <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-		    SDI <= odata[i];
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-
-	task read_byte;
-	    output [7:0] idata;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-                    idata[i] = SDO;
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-
-	task read_write_byte
-	    (input [7:0] odata,
-	    output [7:0] idata);
-	    begin
-		SCK <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-		    SDI <= odata[i];
-                    idata[i] = SDO;
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-	
-	integer i;
-
-    // Now drive the digital signals on the housekeeping SPI
-	reg [7:0] tbdata;
-
-	initial begin
-	    $dumpfile("pass_thru.vcd");
-	    $dumpvars(0, pass_thru_tb);
-
-	    CSB <= 1'b1;
-	    SCK <= 1'b0;
-	    SDI <= 1'b0;
-	    RSTB <= 1'b0;
-
-	    #2000;
-
-	    RSTB <= 1'b1;
-
-	    // Wait on start of program execution
-	    wait(checkbits == 16'hA000);
-
-            // First do a normal read from the housekeeping SPI to
-	    // make sure the housekeeping SPI works.
-
-	    start_csb();
-	    write_byte(8'h40);	// Read stream command
-	    write_byte(8'h03);	// Address (register 3 = product ID)
-	    read_byte(tbdata);
-	    end_csb();
-	    #10;
-	    $display("Read data = 0x%02x (should be 0x10)", tbdata);
-	    if(tbdata !== 8'h10) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-
-	    // Now write a command directly to the SPI flash.
-	    start_csb();
-	    write_byte(8'hc4);	// Pass-thru mode
-	    write_byte(8'h03);	// Command 03 (read values w/3-byte address
-	    write_byte(8'h00);	// Address is next three bytes (0x000000)
-	    write_byte(8'h00);
-	    write_byte(8'h00);
-
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x93)", tbdata);
-	    if(tbdata !== 8'h93) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x93)", tbdata);
-	    if(tbdata !== 8'h93) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x01)", tbdata);
-	    if(tbdata !== 8'h01) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-
-	    end_csb();
-
-	    // Wait for processor to restart
-	    wait(checkbits == 16'hA000);
-
-	    // Read product ID register again
-
-	    start_csb();
-	    write_byte(8'h40);	// Read stream command
-	    write_byte(8'h03);	// Address (register 3 = product ID)
-	    read_byte(tbdata);
-	    end_csb();
-	    #10;
-	    $display("Read data = 0x%02x (should be 0x10)", tbdata);
-	    if(tbdata !== 8'h10) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-
-		`ifdef GL
-	    	$display("Monitor: Test HK SPI Pass-thru (GL) Passed");
-		`else
-			$display("Monitor: Test HK SPI Pass-thru (RTL) Passed");
-		`endif
-		
-	    #10000;
- 	    $finish;
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	wire hk_sck;
-	wire hk_csb;
-	wire hk_sdi;
-
-	assign hk_sck = SCK;
-	assign hk_csb = CSB;
-	assign hk_sdi = SDI;
-
-	assign checkbits = mprj_io[31:16];
-	assign uart_tx = mprj_io[6];
-	assign mprj_io[5] = uart_rx;
-	assign mprj_io[4] = hk_sck;
-	assign mprj_io[3] = hk_csb;
-	assign mprj_io[2] = hk_sdi;
-	assign SDO = mprj_io[1];
-	
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("pass_thru.hex")
-	) spiflash (
-		.csb(flash_csb),
-		.clk(flash_clk),
-		.io0(flash_io0),
-		.io1(flash_io1),
-		.io2(),			// not used
-		.io3()			// not used
-	);
-
-	tbuart tbuart (
-		.ser_rx(uart_tx)
-	);
-		
-endmodule
-`default_nettype wire
diff --git a/verilog/dv/caravel/mgmt_soc/perf/Makefile b/verilog/dv/caravel/mgmt_soc/perf/Makefile
deleted file mode 100644
index e96935a..0000000
--- a/verilog/dv/caravel/mgmt_soc/perf/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = perf
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/perf/perf.c b/verilog/dv/caravel/mgmt_soc/perf/perf.c
deleted file mode 100644
index 5a17ba2..0000000
--- a/verilog/dv/caravel/mgmt_soc/perf/perf.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
-	Performance Test
-	It uses GPIO to flag the success or failure of the test
-*/
-unsigned int ints[50];
-unsigned short shorts[50];
-unsigned char bytes[50];
-
-int main()
-{
-    int i;
-    int sum = 0;
-
-    /* Upper 16 user area pins are configured to be GPIO output */
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    reg_mprj_datal = 0;
-
-    // start test
-    reg_mprj_datal = 0xA0000000;
-	
-    for (i=0; i<100; i++)
-        sum += (sum + i);
-    
-    reg_mprj_datal = 0xAB000000;
-    
-    return sum;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v b/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v
deleted file mode 100644
index 25798ec..0000000
--- a/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v
+++ /dev/null
@@ -1,159 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module perf_tb;
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire [15:0] checkbits;
-	wire [37:0] mprj_io;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-
-	assign checkbits = mprj_io[31:16];
-
-	// 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 #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	reg [31:0] kcycles;
-
-	initial begin
-		$dumpfile("perf.vcd");
-		$dumpvars(0, perf_tb);
-
-		kcycles = 0;
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (150) begin
-			repeat (1000) @(posedge clock);
-			//$display("+1000 cycles");
-			kcycles <= kcycles + 1;
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test Performance (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test Performance (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin			// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		//#1 $display("GPIO state = %X ", gpio);
-		if(checkbits == 16'hA000) begin
-			kcycles = 0;
-			$display("Performance Test started");
-		end
-		else if(checkbits == 16'hAB00) begin
-			//$display("Monitor: number of cycles/100 iterations: %d KCycles", kcycles);
-			`ifdef GL
-				$display("Monitor: Test Performance (GL) passed [%0d KCycles]", kcycles);
-			`else
-				$display("Monitor: Test Performance (RTL) passed [%0d KCycles]", kcycles);
-			`endif
-			$finish;
-		end
-	end
-	
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	assign mprj_io[3] = 1'b1;       // Force CSB high.
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("perf.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/dv/caravel/mgmt_soc/pll/Makefile b/verilog/dv/caravel/mgmt_soc/pll/Makefile
deleted file mode 100644
index 965ce0a..0000000
--- a/verilog/dv/caravel/mgmt_soc/pll/Makefile
+++ /dev/null
@@ -1,79 +0,0 @@
-# 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 = $(VERILOG_PATH)/rtl
-IP_PATH = ../../../../ip
-BEHAVIOURAL_MODELS = ../../ 
-
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-PDK_PATH?=$(PDK_ROOT)/sky130A
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = pll
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-
-%.vcd: %.vvp check-env
-	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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/pll/pll.c b/verilog/dv/caravel/mgmt_soc/pll/pll.c
deleted file mode 100644
index 81a1fc6..0000000
--- a/verilog/dv/caravel/mgmt_soc/pll/pll.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	PLL Test (self-switching)
- *	- Enables SPI master
- *	- Uses SPI master to internally access the housekeeping SPI
- *      - Switches PLL bypass
- *	- Changes PLL divider
- *
- * 	Tesbench mostly copied from sysctrl
- */
-void main()
-{
-    int i;
-
-    reg_mprj_datal = 0;
-
-    // Configure upper 16 bits of user GPIO for generating testbench
-    // checkpoints.
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    /* Apply configuration */
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // Start test
-    reg_mprj_datal = 0xA0400000;
-
-    // Enable SPI master
-    // SPI master configuration bits:
-    // bits 7-0:	Clock prescaler value (default 2)
-    // bit  8:		MSB/LSB first (0 = MSB first, 1 = LSB first)
-    // bit  9:		CSB sense (0 = inverted, 1 = noninverted)
-    // bit 10:		SCK sense (0 = noninverted, 1 = inverted)
-    // bit 11:		mode (0 = read/write opposite edges, 1 = same edges)
-    // bit 12:		stream (1 = CSB ends transmission)
-    // bit 13:		enable (1 = enabled)
-    // bit 14:		IRQ enable (1 = enabled)
-    // bit 15:		Connect to housekeeping SPI (1 = connected)
-
-    reg_spimaster_config = 0xa002;	// Enable, prescaler = 2,
-					// connect to housekeeping SPI
-
-    // Apply stream read (0x40 + 0x03) and read back one byte 
-
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x80;		// Write 0x80 (write mode)
-    reg_spimaster_data = 0x08;		// Write 0x18 (start address)
-    reg_spimaster_data = 0x01;		// Write 0x01 to PLL enable, no DCO mode
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x80;		// Write 0x80 (write mode)
-    reg_spimaster_data = 0x11;		// Write 0x11 (start address)
-    reg_spimaster_data = 0x03;		// Write 0x03 to PLL output divider
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x80;		// Write 0x80 (write mode)
-    reg_spimaster_data = 0x09;		// Write 0x09 (start address)
-    reg_spimaster_data = 0x00;		// Write 0x00 to clock from PLL (no bypass)
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-
-    // Write checkpoint
-    reg_mprj_datal = 0xA0410000;
-
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x80;		// Write 0x80 (write mode)
-    reg_spimaster_data = 0x12;		// Write 0x12 (start address)
-    reg_spimaster_data = 0x03;		// Write 0x03 to feedback divider (was 0x04)
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-
-    // Write checkpoint
-    reg_mprj_datal = 0xA0420000;
-
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x80;		// Write 0x80 (write mode)
-    reg_spimaster_data = 0x11;		// Write 0x11 (start address)
-    reg_spimaster_data = 0x04;		// Write 0x04 to PLL output divider
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-
-    reg_spimaster_config = 0x2102;	// Release housekeeping SPI
-
-    // End test
-    reg_mprj_datal = 0xA0900000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v b/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v
deleted file mode 100644
index 5c037b0..0000000
--- a/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v
+++ /dev/null
@@ -1,158 +0,0 @@
-// 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
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module pll_tb;
-	reg clock;
-	reg power1;
-	reg power2;
-	reg RSTB;
-
-	wire gpio;
-	wire [15:0] checkbits;
-	wire [7:0] spivalue;
-	wire [37:0] mprj_io;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire SDO;
-
-	assign checkbits = mprj_io[31:16];
-	assign spivalue  = mprj_io[15:8];
-
-	// 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 #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin
-		$dumpfile("pll.vcd");
-		$dumpvars(0, pll_tb);
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		$display ("Monitor: Timeout, Test PLL (RTL) Failed");
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	// Monitor
-	initial begin
-	    wait(checkbits == 16'hA040);
-		
-		$display("Monitor: Test PLL (RTL) Started");
-		
-	    wait(checkbits == 16'hA041);
-            // $display("   SPI value = 0x%x (should be 0x04)", spivalue);
-            // if(spivalue !== 32'h04) begin
-            //     $display("Monitor: Test PLL (RTL) Failed");
-            //     $finish;
-            // end
-	    wait(checkbits == 16'hA042);
-            // $display("   SPI value = 0x%x (should be 0x56)", spivalue);
-            // if(spivalue !== 32'h56) begin
-            //     $display("Monitor: Test PLL (RTL) Failed");
-            //     $finish;
-            // end
-
-	    wait(checkbits == 16'hA090);
-
-		$display("Monitor: Test PLL (RTL) Passed");
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		#1 $display("GPIO state = %b ", checkbits);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-	
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	assign mprj_io[3] = 1'b1;  // Force CSB high.
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("pll.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/dv/caravel/mgmt_soc/qspi/Makefile b/verilog/dv/caravel/mgmt_soc/qspi/Makefile
deleted file mode 100644
index d94dd33..0000000
--- a/verilog/dv/caravel/mgmt_soc/qspi/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = qspi
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/qspi/README b/verilog/dv/caravel/mgmt_soc/qspi/README
deleted file mode 100644
index 4b3644a..0000000
--- a/verilog/dv/caravel/mgmt_soc/qspi/README
+++ /dev/null
@@ -1,28 +0,0 @@
-<!---
-# 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
--->
-------------------------------------------------
-Caravel
-qspi testbench
-------------------------------------------------
-
-This testbench is mainly a copy of the gpio testbench and uses the
-same checks for pass/fail status.  The difference is that the startup
-C code puts the SPI flash into QSPI/DDR/CRM modes for fastest access
-and enables the GPIO channels 36 and 37 to work as the flash IO2 and
-IO3 channels.  If the channel and spimemio setup works correctly,
-then the testbench simulation will pass.
diff --git a/verilog/dv/caravel/mgmt_soc/qspi/qspi.c b/verilog/dv/caravel/mgmt_soc/qspi/qspi.c
deleted file mode 100644
index 597e45f..0000000
--- a/verilog/dv/caravel/mgmt_soc/qspi/qspi.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	GPIO Test
- *		Tests PU and PD on the lower 8 pins while being driven from outside
- *		Tests Writing to the upper 8 pins
- *		Tests reading from the lower 8 pins
- */
-
-void main()
-{
-	int i;
-
-	/* Set SPI flash latency to 8 for use with the spiflash.v
-	 * module (note that spiflash.v does not have configuration
-	 * registers emulated, so the external flash cannot be
-	 * changed from its default of 8).
-	 */
-
-	/* Set data out to zero */
-	reg_mprj_datal = 0;
-
-	/* Lower 8 pins are input and upper 8 pins are output */
-	reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_NOPULL;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	/* Now the flash SPI controller can be put in qspi/ddr/crm mode */
-	/* First run DSPI + CRM */
-	reg_spictrl = 0x80580000;	// DSPI + CRM
-	
-
-	// change the pull up and pull down (checked by the TB)
-	reg_mprj_datal = 0xa0000000;
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	/* Now run QSPI + CRM */
-	reg_spictrl = 0x80380000;	// QSPI + CRM
-
-	reg_mprj_datal = 0x0b000000;
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	/* Now run QSPI + DDR + CRM */
-	reg_spictrl = 0x80780000;	// QSPI + DDR + CRM
-
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_INPUT_PULLDOWN;
-
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_INPUT_PULLUP;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	// read the lower 8 pins, add 1 then output the result
-	// checked by the TB
-	reg_mprj_datal = 0xab000000;
-
-	while (1){
-		int x = (reg_mprj_datal & 0xff0000) >> 16;
-		reg_mprj_datal = (x+1) << 24;
-	}
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/qspi/qspi_tb.v b/verilog/dv/caravel/mgmt_soc/qspi/qspi_tb.v
deleted file mode 100644
index d8683b9..0000000
--- a/verilog/dv/caravel/mgmt_soc/qspi/qspi_tb.v
+++ /dev/null
@@ -1,205 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module qspi_tb;
-
-	reg clock;
-	reg power1;
-	reg power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("qspi.vcd");
-		$dumpvars(0, qspi_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test GPIO (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test GPIO (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	wire [35:0] mprj_io;	// Most of these are no-connects
-	wire [15:0] checkbits;
-	reg  [7:0] checkbits_lo;
-	wire [7:0] checkbits_hi;
-
-	assign mprj_io[23:16] = checkbits_lo;
-	assign checkbits = mprj_io[31:16];
-	assign checkbits_hi = checkbits[15:8];
-	assign mprj_io[3] = 1'b1;       // Force CSB high.
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire flash_io2;
-	wire flash_io3;
-	wire gpio;
-
-	reg RSTB;
-
-	// Transactor
-	initial begin
-		checkbits_lo <= {8{1'bz}};
-		wait(checkbits_hi == 8'hA0);
-		checkbits_lo <= 8'hF0;
-		wait(checkbits_hi == 8'h0B);
-		checkbits_lo <= 8'h0F;
-		wait(checkbits_hi == 8'hAB);
-		checkbits_lo <= 8'h0;
-		repeat (1000) @(posedge clock);
-		checkbits_lo <= 8'h1;
-		repeat (1000) @(posedge clock);
-		checkbits_lo <= 8'h3;
-	end
-
-	// Monitor
-	initial begin
-		wait(checkbits_hi == 8'hA0);
-		`ifdef GL
-			$display("Monitor: Test QSPI (GL) Started");
-		`else
-			$display("Monitor: Test QSPI (RTL) Started");
-		`endif
-		wait(checkbits[7:0]  == 8'hF0);
-		wait(checkbits_hi == 8'h0B);
-		wait(checkbits[7:0]  == 8'h0F);
-		wait(checkbits_hi == 8'hAB);
-		wait(checkbits[7:0]  == 8'h00);
-		wait(checkbits_hi == 8'h01);
-		wait(checkbits[7:0]  == 8'h01);
-		wait(checkbits_hi == 8'h02);
-		wait(checkbits[7:0]  == 8'h03);
-		wait(checkbits_hi == 8'h04);
-		`ifdef GL
-			$display("Monitor: Test QSPI (GL) Passed");
-		`else
-			$display("Monitor: Test QSPI (RTL) Passed");
-		`endif
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin			// Power-up
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-		
-
-	always @(checkbits) begin
-		#1 $display("GPIO state = %b (%d - %d)", checkbits,
-				checkbits_hi, checkbits_lo);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-	// flash_io2 = mgmt_gpio_io[36]		    (inout)
-	// flash_io3 = mgmt_gpio_io[37]		    (inout)
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (VSS),
-		.vssa2	  (VSS),
-		.vccd1	  (VDD1V8),
-		.vccd2	  (VDD1V8),
-		.vssd1	  (VSS),
-		.vssd2	  (VSS),
-		.clock	  (clock),
-		.gpio     (gpio),
-		.mprj_io  ({flash_io3, flash_io2, mprj_io}),
-		.flash_csb(flash_csb),
-		.flash_clk(flash_clk),
-		.flash_io0(flash_io0),
-		.flash_io1(flash_io1),
-		.resetb	  (RSTB)
-	);
-
-	spiflash #(
-		.FILENAME("qspi.hex")
-	) spiflash (
-		.csb(flash_csb),
-		.clk(flash_clk),
-		.io0(flash_io0),
-		.io1(flash_io1),
-		.io2(flash_io2),
-		.io3(flash_io3)
-	);
-
-endmodule
-`default_nettype wire
diff --git a/verilog/dv/caravel/mgmt_soc/storage/Makefile b/verilog/dv/caravel/mgmt_soc/storage/Makefile
deleted file mode 100644
index d0657a3..0000000
--- a/verilog/dv/caravel/mgmt_soc/storage/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = storage
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/storage/storage.c b/verilog/dv/caravel/mgmt_soc/storage/storage.c
deleted file mode 100644
index 55fdd98..0000000
--- a/verilog/dv/caravel/mgmt_soc/storage/storage.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
-	Storage area Test
-	It uses GPIO to flag the success or failure of the test
-*/
-
-void main()
-{
-    int i;
-    volatile uint32_t* ram_addr; 
-    /* Upper 16 user area pins are configured to be GPIO output */
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // start test
-    reg_mprj_datal = 0xA0400000;
-
-    // Test Management R/W block0
-    for (i=0; i<10; i++){
-        ram_addr = &reg_rw_block0 + i;
-        *ram_addr = i*5000 + 10000;
-    }
-	
-    for (i=0; i<10; i++){
-        ram_addr = &reg_rw_block0 + i;
-        if ((i*5000+10000) != *ram_addr) 
-	    reg_mprj_datal = 0xAB400000;
-    }
-	
-    reg_mprj_datal = 0xAB410000;
-	
-    // Test Management R/W block1
-    reg_mprj_datal = 0xA0200000;
-    for (i=0; i<10; i++){
-        ram_addr = &reg_rw_block1 + i;
-        *ram_addr = i*5000 + 10000;
-    }
-	
-    for (i=0; i<10; i++){
-        ram_addr = &reg_rw_block1 + i;
-        if ((i*5000+10000) != *ram_addr) 
-	    reg_mprj_datal = 0xAB200000;
-    }
-    
-    reg_mprj_datal = 0xAB210000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/storage/storage_tb.v b/verilog/dv/caravel/mgmt_soc/storage/storage_tb.v
deleted file mode 100644
index 0adee87..0000000
--- a/verilog/dv/caravel/mgmt_soc/storage/storage_tb.v
+++ /dev/null
@@ -1,190 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module storage_tb;
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	wire gpio;
-    wire [15:0] checkbits;
-	wire [37:0] mprj_io;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-
-	assign checkbits = mprj_io[31:16];
-
-	// 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 #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin
-		$dumpfile("storage.vcd");
-		$dumpvars(0, storage_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (100) begin
-			repeat (1000) @(posedge clock);
-			//$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test Storage (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test Storage (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		if(checkbits == 16'hA040) begin
-			`ifdef GL
-				$display("Mem Test storage MGMT block0 (GL) [word rw] started");
-			`else
-				$display("Mem Test storage MGMT block0 (RTL) [word rw] started");
-			`endif
-		end
-		else if(checkbits == 16'hAB40) begin
-			$display("%c[1;31m",27);
-			`ifdef GL
-				$display("Monitor: Test storage MGMT block0 (GL) [word rw] failed");
-			`else
-				$display("Monitor: Test storage MGMT block0 (RTL) [word rw] failed");
-			`endif
-			$display("%c[0m",27);
-			$finish;
-		end
-		else if(checkbits == 16'hAB41) begin
-			`ifdef GL
-				$display("Monitor: Test storage MGMT block0 (GL) [word rw]  passed");
-			`else
-				$display("Monitor: Test storage MGMT block0 (RTL) [word rw]  passed");
-			`endif
-		end
-		else if(checkbits == 16'hA020) begin
-			`ifdef GL
-				$display("Mem Test storage MGMT block1 (GL) [word rw] started");
-			`else
-				$display("Mem Test storage MGMT block1 (RTL) [word rw] started");
-			`endif
-		end
-		else if(checkbits == 16'hAB20) begin
-			$display("%c[1;31m",27);
-			`ifdef GL
-				$display("Monitor: Test storage MGMT block1 (GL) [word rw] failed");
-			`else
-				$display("Monitor: Test storage MGMT block1 (RTL) [word rw] failed");
-			`endif
-			$display("%c[0m",27);
-			$finish;
-		end
-		else if(checkbits == 16'hAB21) begin
-			`ifdef GL
-				$display("Monitor: Test storage MGMT block1 (GL) [word rw]  passed");
-			`else
-				$display("Monitor: Test storage MGMT block1 (RTL) [word rw]  passed");
-			`endif
-            $finish;
-		end
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VSS = 1'b0;
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-
-	assign mprj_io[3] = 1'b1;  // Force CSB high.
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("storage.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/dv/caravel/mgmt_soc/sysctrl/Makefile b/verilog/dv/caravel/mgmt_soc/sysctrl/Makefile
deleted file mode 100644
index 0566b44..0000000
--- a/verilog/dv/caravel/mgmt_soc/sysctrl/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = sysctrl
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl.c b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl.c
deleted file mode 100644
index 0f5d56d..0000000
--- a/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	System Control Test
- *	- Enables SPI master
- *	- Uses SPI master to internally access the housekeeping SPI
- *      - Reads default value of SPI-Controlled registers
- *      - Flags failure/success using mprj_io
- */
-void main()
-{
-    int i;
-    uint32_t value;
-
-    reg_mprj_datal = 0;
-
-    // Configure upper 16 bits of user GPIO for generating testbench
-    // checkpoints.
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Configure next 8 bits for writing the SPI value read on GPIO
-    reg_mprj_io_15 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_14 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_13 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_12 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_11 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_10 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_9  = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_8  = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    /* Apply configuration */
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // Start test
-    reg_mprj_datal = 0xA0400000;
-
-    // Enable SPI master
-    // SPI master configuration bits:
-    // bits 7-0:	Clock prescaler value (default 2)
-    // bit  8:		MSB/LSB first (0 = MSB first, 1 = LSB first)
-    // bit  9:		CSB sense (0 = inverted, 1 = noninverted)
-    // bit 10:		SCK sense (0 = noninverted, 1 = inverted)
-    // bit 11:		mode (0 = read/write opposite edges, 1 = same edges)
-    // bit 12:		stream (1 = CSB ends transmission)
-    // bit 13:		enable (1 = enabled)
-    // bit 14:		IRQ enable (1 = enabled)
-    // bit 15:		Connect to housekeeping SPI (1 = connected)
-
-    reg_spimaster_config = 0xa002;	// Enable, prescaler = 2,
-					// connect to housekeeping SPI
-
-    // Apply stream read (0x40 + 0x03) and read back one byte 
-
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x40;		// Write 0x40 (read mode)
-    reg_spimaster_data = 0x01;		// Write 0x01 (start address)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0410000 | (value << 8);	// Mfgr ID (high)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0420000 | (value << 8);	// Mfgr ID (low)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0430000 | (value << 8);	// Prod ID
-
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x40;		// Write 0x40 (read mode)
-    reg_spimaster_data = 0x08;		// Write 0x08 (start address)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0440000 | (value << 8);	// PLL enable
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0450000 | (value << 8);	// PLL bypass
-
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-    reg_spimaster_config = 0xb002;	// Apply stream mode
-    reg_spimaster_data = 0x40;		// Write 0x40 (read mode)
-    reg_spimaster_data = 0x0d;		// Write 0x0d (start address)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0460000 | (value << 8);	// PLL trim (2 high bits)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0470000 | (value << 8);	// PLL trim (2nd byte)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0480000 | (value << 8);	// PLL trim (3rd byte)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA0490000 | (value << 8);	// PLL trim (low byte)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA04a0000 | (value << 8);	// PLL select (3 lowest bits)
-
-    reg_spimaster_data = 0x00;		// Write 0x00 for read
-    value = reg_spimaster_data;		// Read back byte
-    // Write checkpoint
-    reg_mprj_datal = 0xA04b0000 | (value << 8);	// PLL divider (5 lowest bits)
-
-    reg_spimaster_config = 0xa102;	// Release CSB (ends stream mode)
-    reg_spimaster_config = 0x2102;	// Release housekeeping SPI
-
-    // End test
-    reg_mprj_datal = 0xA0900000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v
deleted file mode 100644
index 295c029..0000000
--- a/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v
+++ /dev/null
@@ -1,224 +0,0 @@
-// 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
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module sysctrl_tb;
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire [15:0] checkbits;
-	wire [7:0] spivalue;
-	wire [37:0] mprj_io;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire SDO;
-
-	assign checkbits = mprj_io[31:16];
-	assign spivalue  = mprj_io[15:8];
-
-	// 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 #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin
-		$dumpfile("sysctrl.vcd");
-		$dumpvars(0, sysctrl_tb);
-		repeat (25) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test Sysctrl (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test Sysctrl (RTL) Failed");
-		`endif
-		 $display("%c[0m",27);
-		$finish;
-	end
-
-	// Monitor
-	initial begin
-	    wait(checkbits == 16'hA040);
-			`ifdef GL
-            	$display("Monitor: Test Sysctrl (GL) Started");
-			`else
-			    $display("Monitor: Test Sysctrl (RTL) Started");
-			`endif
-	    wait(checkbits == 16'hA041);
-            $display("   SPI value = 0x%x (should be 0x04)", spivalue);
-            if(spivalue !== 32'h04) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA042);
-            $display("   SPI value = 0x%x (should be 0x56)", spivalue);
-            if(spivalue !== 32'h56) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA043);
-            $display("   SPI value = 0x%x (should be 0x10)", spivalue);
-            if(spivalue !== 32'h10) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA044);
-            $display("   SPI value = 0x%x (should be 0x02)", spivalue);
-            if(spivalue !== 32'h02) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA045);
-            $display("   SPI value = 0x%x (should be 0x01)", spivalue);
-            if(spivalue !== 32'h01) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA046);
-            $display("   SPI value = 0x%x (should be 0xff)", spivalue);
-            if(spivalue !== 32'hff) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA047);
-            $display("   SPI value = 0x%x (should be 0xef)", spivalue);
-            if(spivalue !== 32'hef) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA048);
-            $display("   SPI value = 0x%x (should be 0xff)", spivalue);
-            if(spivalue !== 32'hff) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA049);
-            $display("   SPI value = 0x%x (should be 0x03)", spivalue);
-            if(spivalue !== 32'h03) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA04a);
-            $display("   SPI value = 0x%x (should be 0x12)", spivalue);
-            if(spivalue !== 32'h12) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-	    wait(checkbits == 16'hA04b);
-            $display("   SPI value = 0x%x (should be 0x04)", spivalue);
-            if(spivalue !== 32'h04) begin
-                $display("Monitor: Test Sysctrl Failed");
-                $finish;
-            end
-
-	    wait(checkbits == 16'hA090);
-		 	`ifdef GL
-            	$display("Monitor: Test Sysctrl (GL) Passed");
-			`else
-		        $display("Monitor: Test Sysctrl (RTL) Passed");
-			`endif
-            $finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		#1 $display("GPIO state = %b ", checkbits);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-	
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	assign mprj_io[3] = 1'b1;
-	
-	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("sysctrl.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/dv/caravel/mgmt_soc/timer/Makefile b/verilog/dv/caravel/mgmt_soc/timer/Makefile
deleted file mode 100644
index aa978e5..0000000
--- a/verilog/dv/caravel/mgmt_soc/timer/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = timer
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/timer/timer.c b/verilog/dv/caravel/mgmt_soc/timer/timer.c
deleted file mode 100644
index e01ed7f..0000000
--- a/verilog/dv/caravel/mgmt_soc/timer/timer.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	Timer Test
- */
-
-void main()
-{
-	int i;
-	uint32_t value;
-
-	/* Initialize output data vector to zero */
-	reg_mprj_datah = 0x00000000;
-	reg_mprj_datal = 0x00000000;
-
-	/* Apply all 38 bits to management standard output.	*/
-
-	/* The lower 32 will be used to output the count value	*/
-	/* from the timer.  The top 5 bits will be used	to mark	*/
-	/* specific checkpoints for the testbench simulation.	*/
-
-	reg_mprj_io_37 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_36 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_35 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_34 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_33 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_32 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_15 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_14 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_13 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_12 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_11 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_10 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_9  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_8  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_7  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_6  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_5  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_4  = GPIO_MODE_MGMT_STD_OUTPUT;
-	// reg_mprj_io_3  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_2  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_1  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_0  = GPIO_MODE_MGMT_STD_OUTPUT;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	/* Present start marker (see testbench verilog) */
-	reg_mprj_datah = 0x0a;
-
-	/* Configure timer for a single-shot countdown */
-	reg_timer0_value = 0xdcba9876;
-
-	/* Timer configuration bits:				*/
-	/* 0 = timer enable (1 = enabled, 0 = disabled)		*/
-	/* 1 = one-shot mode (1 = oneshot, 0 = continuous)	*/
-	/* 2 = up/down (1 = count up, 0 = count down)		*/
-	/* 3 = chain (1 = enabled, 0 = disabled)		*/
-	/* 4 = IRQ enable (1 = enabled, 0 = disabled)		*/
-
-	reg_timer0_config = 3;	/* Enabled, one-shot, down count */
-
-	for (i = 0; i < 8; i++) {
-	    value = reg_timer0_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_timer0_config = 0;	/* Disabled */
-
-	reg_mprj_datah = 0x01;	/* Check value in testbench */
-
-	reg_timer0_value = 0x00000011;
-	reg_timer0_config = 7;	/* Enabled, one-shot, count up */
-	
-	for (i = 0; i < 3; i++) {
-	    value = reg_timer0_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x02;	/* Check value in testbench */
-	
-	reg_timer0_data = 0x00000101;	// Set value (will be reset)
-	reg_timer0_config = 2;	/* Disabled, one-shot, count up */
-	reg_timer0_config = 5;	/* Enabled, continuous, count down */
-	
-	for (i = 0; i < 5; i++) {
-	    value = reg_timer0_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x03;	/* Check value in testbench */
-
-	reg_timer0_data = 0x00000145;	// Force new value
-
-	reg_mprj_datah = 0x04;	/* Check value in testbench */
-	
-	for (i = 0; i < 5; i++) {
-	    value = reg_timer0_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-	
-	/* Present end marker (see testbench verilog) */
-	reg_mprj_datah = 0x05;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v b/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v
deleted file mode 100644
index 3865bf3..0000000
--- a/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v
+++ /dev/null
@@ -1,201 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module timer_tb;
-
-	reg RSTB;
-	reg clock;
-	reg power1, power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("timer.vcd");
-		$dumpvars(0, timer_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (50) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test GPIO (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test GPIO (RTL) Failed");
-		`endif
-		 $display("%c[0m",27);
-		$finish;
-	end
-
-	wire [37:0] mprj_io;	// Most of these are no-connects
-	wire [5:0] checkbits;
-	wire [31:0] countbits;
-
-	assign checkbits = mprj_io[37:32];
-	assign countbits = mprj_io[31:0];
-
-	assign mprj_io[3] = 1'b1;  // Force CSB high.
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire gpio;
-
-	// Monitor
-	initial begin
-		wait(checkbits == 6'h0a);
-		`ifdef GL
-			$display("Monitor: Test Timer (GL) Started");
-		`else 
-			$display("Monitor: Test Timer (RTL) Started");
-		`endif
-		/* Add checks here */
-		wait(checkbits == 6'h01);
-		$display("   countbits = 0x%x (should be 0xdcba7cfb)", countbits);
-		if(countbits !== 32'hdcba7cfb) begin
-		    $display("Monitor: Test Timer Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h02);
-		$display("   countbits = 0x%x (should be 0x19)", countbits);
-		if(countbits !== 32'h19) begin
-		    $display("Monitor: Test Timer Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h03);
-		$display("   countbits = %x (should be 0x0f)", countbits);
-		if(countbits !== ((32'h0f) | (3'b100))) begin
-		    $display("Monitor: Test Timer Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h04);
-		$display("   countbits = %x (should be 0x0f)", countbits);
-		if(countbits !== ((32'h0f) | (3'b100))) begin
-		    $display("Monitor: Test Timer Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h05);
-		$display("   countbits = %x (should be 0x12bc)", countbits);
-		if(countbits !== 32'h12bc) begin
-		    $display("Monitor: Test Timer Failed");
-		    $finish;
-		end
-		
-		`ifdef GL
-			$display("Monitor: Test Timer (GL) Passed");
-		`else
-			$display("Monitor: Test Timer (RTL) Passed");
-		`endif
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		#1 $display("Timer state = %b (%d)", countbits, countbits);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("timer.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/dv/caravel/mgmt_soc/timer2/Makefile b/verilog/dv/caravel/mgmt_soc/timer2/Makefile
deleted file mode 100644
index 206be56..0000000
--- a/verilog/dv/caravel/mgmt_soc/timer2/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = timer2
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/timer2/timer2.c b/verilog/dv/caravel/mgmt_soc/timer2/timer2.c
deleted file mode 100644
index 6d598ac..0000000
--- a/verilog/dv/caravel/mgmt_soc/timer2/timer2.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-/*
- *	Timer2 Test --- This runs the same testbench as the
- *	other timer, on the 2nd counter/timer module instance.
- */
-
-void main()
-{
-	int i;
-	uint32_t value;
-
-	/* Initialize output data vector to zero */
-	reg_mprj_datah = 0x00000000;
-	reg_mprj_datal = 0x00000000;
-
-	/* Apply all 38 bits to management standard output.	*/
-
-	/* The lower 32 will be used to output the count value	*/
-	/* from the timer.  The top 5 bits will be used	to mark	*/
-	/* specific checkpoints for the testbench simulation.	*/
-
-	reg_mprj_io_37 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_36 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_35 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_34 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_33 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_32 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_15 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_14 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_13 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_12 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_11 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_10 = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_9  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_8  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_7  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_6  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_5  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_4  = GPIO_MODE_MGMT_STD_OUTPUT;
-	// reg_mprj_io_3  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_2  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_1  = GPIO_MODE_MGMT_STD_OUTPUT;
-	reg_mprj_io_0  = GPIO_MODE_MGMT_STD_OUTPUT;
-
-	/* Apply configuration */
-	reg_mprj_xfer = 1;
-	while (reg_mprj_xfer == 1);
-
-	/* Present start marker (see testbench verilog) */
-	reg_mprj_datah = 0x0a;
-
-	/* Configure timer for a single-shot countdown */
-	reg_timer1_value = 0xdcba9876;
-
-	/* Timer configuration bits:				*/
-	/* 0 = timer enable (1 = enabled, 0 = disabled)		*/
-	/* 1 = one-shot mode (1 = oneshot, 0 = continuous)	*/
-	/* 2 = up/down (1 = count up, 0 = count down)		*/
-	/* 3 = IRQ enable (1 = enabled, 0 = disabled)		*/
-
-	reg_timer1_config = 3;	/* Enabled, one-shot, down count */
-
-	for (i = 0; i < 8; i++) {
-	    value = reg_timer1_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_timer1_config = 0;	/* Disabled */
-
-	reg_mprj_datah = 0x01;	/* Check value in testbench */
-
-	reg_timer1_value = 0x00000011;
-	reg_timer1_config = 7;	/* Enabled, one-shot, count up */
-	
-	for (i = 0; i < 3; i++) {
-	    value = reg_timer1_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x02;	/* Check value in testbench */
-	
-	reg_timer1_data = 0x00000101;	// Set value (will be reset)
-	reg_timer1_config = 2;	/* Disabled, one-shot, count up */
-	reg_timer1_config = 5;	/* Enabled, continuous, count down */
-	
-	for (i = 0; i < 5; i++) {
-	    value = reg_timer1_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x03;	/* Check value in testbench */
-
-	reg_timer1_data = 0x00000145;	// Force new value
-
-	reg_mprj_datah = 0x04;	/* Check value in testbench */
-	
-	for (i = 0; i < 5; i++) {
-	    value = reg_timer1_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x05;	/* Check value in testbench */
-
-	/* Now, set up chained 64 bit timer.  Check count-up	*/
-	/* value and count-down value crossing the 32-bit	*/
-	/* boundary.						*/
-
-	/* First disable both counters, and set the "chained"	*/
-	/* property so that enable/disable will be synchronized	*/
-
-	reg_timer1_config = 8;	/* Disabled, chained */
-	reg_timer0_config = 8;	/* Disabled, chained */
-
-	/* Configure timer for a chained single-shot countdown. */
-	/* Count start = 0x0000000100001000, end = 0x0		*/
-
-	reg_timer1_value = 0x00000055;
-	reg_timer0_value = 0x00001000;
-
-	/* Timer configuration bits:				*/
-	/* 0 = timer enable (1 = enabled, 0 = disabled)		*/
-	/* 1 = one-shot mode (1 = oneshot, 0 = continuous)	*/
-	/* 2 = up/down (1 = count up, 0 = count down)		*/
-	/* 3 = chain (1 = enabled, 0 = disabled)		*/
-	/* 4 = IRQ enable (1 = enabled, 0 = disabled)		*/
-
-	reg_timer1_config = 11;	/* Enabled, one-shot, down count, chained */
-	reg_timer0_config = 11;	/* Enabled, one-shot, down count, chained */
-
-	for (i = 0; i < 1; i++) {
-	    value = reg_timer1_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x06;	/* Check value in testbench */
-
-	// Skip to the end. . .
-	reg_timer1_data = 0x00000000;
-	reg_timer0_data = 0x00000200;
-
-	for (i = 0; i < 4; i++) {
-	    value = reg_timer0_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x07;	/* Check value in testbench */
-
-	reg_timer1_config = 14;	/* Disabled, one-shot, up count, chained */
-	reg_timer0_config = 14;	/* Disabled, one-shot, up count, chained */
-
-	reg_timer1_value = 0x00000002;
-	reg_timer0_value = 0x00000000;
-
-	reg_timer1_config = 15;	/* Enabled, one-shot, up count, chained */
-	reg_timer0_config = 15;	/* Enabled, one-shot, up count, chained */
-
-	for (i = 0; i < 1; i++) {
-	    value = reg_timer0_data;
-	    reg_mprj_datal = value;	// Put count value on GPIO
-	}
-
-	reg_mprj_datah = 0x08;	/* Check value in testbench */
-
-	// Skip to the end. . . 
-	/* Count 0x00000001ffffff00 to 0x0000000200000000 and stop */
-
-	reg_timer1_data = 0x00000001;	// Set value (will be reset)
-	reg_timer0_data = 0xffffff00;	// Set value (will be reset)
-
-	for (i = 0; i < 4; i++) {
-	    value = reg_timer1_data;
-	    reg_mprj_datal = value;	// Put timer1 count value on GPIO
-	}
-
-	/* Present end marker (see testbench verilog) */
-	reg_mprj_datah = 0x10;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v b/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v
deleted file mode 100644
index a53e216..0000000
--- a/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v
+++ /dev/null
@@ -1,229 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-
-module timer2_tb;
-
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock <= 0;
-	end
-
-	initial begin
-		$dumpfile("timer2.vcd");
-		$dumpvars(0, timer2_tb);
-
-		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (60) begin
-			repeat (1000) @(posedge clock);
-			$display("+1000 cycles");
-		end
-		$display("%c[1;31m",27);
-		`ifdef GL
-			$display ("Monitor: Timeout, Test Timer2 (GL) Failed");
-		`else
-			$display ("Monitor: Timeout, Test Timer2 (RTL) Failed");
-		`endif
-		$display("%c[0m",27);
-		$finish;
-	end
-
-	wire [37:0] mprj_io;	// Most of these are no-connects
-	wire [5:0] checkbits;
-	wire [31:0] countbits;
-
-	assign checkbits = mprj_io[37:32];
-	assign countbits = mprj_io[31:0];
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire gpio;
-
-	// Monitor
-	initial begin
-		wait(checkbits == 6'h0a);
-		`ifdef GL
-			$display("Monitor: Test Timer2 (GL) Started");
-		`else
-			$display("Monitor: Test Timer2 (RTL) Started");
-		`endif
-		/* Add checks here */
-		wait(checkbits == 6'h01);
-		$display("   countbits = 0x%x (should be 0xdcba7cfb)", countbits);
-		if(countbits !== 32'hdcba7cfb) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h02);
-		$display("   countbits = 0x%x (should be 0x19)", countbits);
-		if(countbits !== 32'h19) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h03);
-		$display("   countbits = %x (should be 0x0f)", countbits);
-		if(countbits !== 32'h0f) begin
-		    $display("Monitor: Test Timer (RTL) Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h04);
-		$display("   countbits = %x (should be 0x0f)", countbits);
-		if(countbits !== 32'h0f) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-		wait(checkbits == 6'h05);
-		$display("   countbits = %x (should be 0x12bc)", countbits);
-		if(countbits !== 32'h12bc) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-
-		wait(checkbits == 6'h06);
-		$display("   countbits = %x (should be 0x005d)", countbits);
-		if(countbits !== 32'h005d) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-
-		wait(checkbits == 6'h07);
-		$display("   countbits = %x (should be 0x0008)", countbits);
-		if(countbits !== 32'h0008) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-
-		wait(checkbits == 6'h08);
-		$display("   countbits = %x (should be 0x0259)", countbits);
-		if(countbits !== 32'h0259) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-
-		wait(checkbits == 6'h10);
-		$display("   countbits = %x (should be 0x000a)", countbits);
-		if(countbits !== 32'h000a) begin
-		    $display("Monitor: Test Timer2 (RTL) Failed");
-		    $finish;
-		end
-
-		`ifdef GL
-			$display("Monitor: Test Timer2 (GL) Passed");
-		`else
-			$display("Monitor: Test Timer2 (RTL) Passed");
-		`endif
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		#1 $display("Timer state = %b (%d)", countbits, countbits);
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-	
-	assign mprj_io[3] = 1'b1;  // Force CSB high.
-
-	// These are the mappings of mprj_io GPIO pads that are set to
-	// specific functions on startup:
-	//
-	// JTAG      = mgmt_gpio_io[0]              (inout)
-	// SDO       = mgmt_gpio_io[1]              (output)
-	// SDI       = mgmt_gpio_io[2]              (input)
-	// CSB       = mgmt_gpio_io[3]              (input)
-	// SCK       = mgmt_gpio_io[4]              (input)
-	// ser_rx    = mgmt_gpio_io[5]              (input)
-	// ser_tx    = mgmt_gpio_io[6]              (output)
-	// irq       = mgmt_gpio_io[7]              (input)
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("timer2.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/dv/caravel/mgmt_soc/uart/Makefile b/verilog/dv/caravel/mgmt_soc/uart/Makefile
deleted file mode 100644
index e8bd40a..0000000
--- a/verilog/dv/caravel/mgmt_soc/uart/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = uart
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/uart/uart.c b/verilog/dv/caravel/mgmt_soc/uart/uart.c
deleted file mode 100644
index 13cee0f..0000000
--- a/verilog/dv/caravel/mgmt_soc/uart/uart.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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"
-#include "../../stub.c"
-
-// --------------------------------------------------------
-
-void main()
-{
-    int j;
-
-    // Configure I/O:  High 16 bits of user area used for a 16-bit
-    // word to write and be detected by the testbench verilog.
-    // Only serial Tx line is used in this testbench.  It connects
-    // to mprj_io[6].  Since all lines of the chip are input or
-    // high impedence on startup, the I/O has to be configured
-    // for output
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_6 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Set clock to 64 kbaud and enable the UART.  It is important to do this
-    // before applying the configuration, or else the Tx line initializes as
-    // zero, which indicates the start of a byte to the receiver.
-
-    reg_uart_clkdiv = 625;
-    reg_uart_enable = 1;
-
-    // Now, apply the configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // Start test
-    reg_mprj_datal = 0xa0000000;
-
-    // This should appear at the output, received by the testbench UART.
-    // (Makes simulation time long.)
-    print("Monitor: Test UART (RTL) passed\n");
-
-    // Allow transmission to complete before signalling that the program
-    // has ended.
-    for (j = 0; j < 20; j++);
-    reg_mprj_datal = 0xab000000;
-}
diff --git a/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v b/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v
deleted file mode 100644
index d8bbd35..0000000
--- a/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v
+++ /dev/null
@@ -1,150 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017  Clifford Wolf, 2018  Tim Edwards
- *
- *  StriVe - A full example SoC using PicoRV32 in SkyWater s8
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  Tim Edwards <tim@efabless.com>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-`include "tbuart.v"
-
-module uart_tb;
-	reg clock;
-	reg RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire [37:0] mprj_io;
-	wire [15:0] checkbits;
-	wire uart_tx;
-	wire SDO;
-
-	assign checkbits = mprj_io[31:16];
-	assign uart_tx = mprj_io[6];
-
-	always #12.5 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin
-		$dumpfile("uart.vcd");
-		$dumpvars(0, uart_tb);
-
-		$display("Wait for UART o/p");
-		repeat (150) begin
-			repeat (10000) @(posedge clock);
-			// Diagnostic. . . interrupts output pattern.
-		end
-		$finish;
-	end
-
-	initial begin
-		RSTB <= 1'b0;
-		#1000;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-	always @(checkbits) begin
-		if(checkbits == 16'hA000) begin
-			$display("UART Test started");
-		end
-		else if(checkbits == 16'hAB00) begin
-			`ifdef GL
-				$display("UART Test (GL) passed");
-			`else
-				$display("UART Test (RTL) passed");
-			`endif
-			$finish;
-		end
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-	
-	assign mprj_io[3] = 1'b1;  // Force CSB high.
-
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("uart.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)
-	);
-		
-endmodule
-`default_nettype wire
diff --git a/verilog/dv/caravel/mgmt_soc/user_pass_thru/Makefile b/verilog/dv/caravel/mgmt_soc/user_pass_thru/Makefile
deleted file mode 100644
index 074b999..0000000
--- a/verilog/dv/caravel/mgmt_soc/user_pass_thru/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../..
-RTL_PATH = $(VERILOG_PATH)/rtl
-BEHAVIOURAL_MODELS = ../../ 
-
-FIRMWARE_PATH = ../..
-GCC_PATH?=/ef/apps/bin
-GCC_PREFIX?=riscv32-unknown-elf
-
-SIM_DEFINES = -DFUNCTIONAL -DSIM
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = user_pass_thru
-
-all:  ${PATTERN:=.vcd}
-
-hex:  ${PATTERN:=.hex}
-
-%.vvp: %_tb.v %.hex
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp $(SIM_DEFINES) -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-else  
-	iverilog -Ttyp $(SIM_DEFINES) -DGL -I $(BEHAVIOURAL_MODELS) \
-	-I $(PDK_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) \
-	$< -o $@ 
-endif
-
-%.vcd: %.vvp
-	vvp $<
-
-%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s check-env
-	${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 > $@
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
-	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
-endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
-# check for efabless style installation
-ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
-SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
-endif
-# ---- Clean ----
-
-clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log
-
-.PHONY: clean hex all
-
diff --git a/verilog/dv/caravel/mgmt_soc/user_pass_thru/README b/verilog/dv/caravel/mgmt_soc/user_pass_thru/README
deleted file mode 100644
index e4072d6..0000000
--- a/verilog/dv/caravel/mgmt_soc/user_pass_thru/README
+++ /dev/null
@@ -1,14 +0,0 @@
-------------------------------------
-user_pass_thru test bench
-------------------------------------
-
-This test bench exercises the pass-thru mode to the GPIO pins
-that are reserved for use by a user project for connecting to
-an SPI flash.  The pass-thru mode allows the SPI flash to be
-programmed using the housekeeping SPI.
-
-The testbench is essentially the same as the pass_thru test
-bench, but using the pins specified for the secondary SPI
-flash.  Note that the testbench does not define a controller
-on the user side to access the SPI flash (which would be a
-useful thing to add to the testbench).
diff --git a/verilog/dv/caravel/mgmt_soc/user_pass_thru/user_pass_thru.c b/verilog/dv/caravel/mgmt_soc/user_pass_thru/user_pass_thru.c
deleted file mode 100644
index 011102c..0000000
--- a/verilog/dv/caravel/mgmt_soc/user_pass_thru/user_pass_thru.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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"
-
-// --------------------------------------------------------
-
-void putchar(char c)
-{
-	if (c == '\n')
-		putchar('\r');
-	reg_uart_data = c;
-}
-
-void print(const char *p)
-{
-	while (*p)
-		putchar(*(p++));
-}
-
-// --------------------------------------------------------
-
-void main()
-{
-    // This program is just to keep the processor busy while the
-    // housekeeping SPI is being accessed. to show that the
-    // processor is halted while the SPI is accessing the
-    // flash SPI in pass-through mode.
-
-    // Configure I/O:  High 16 bits of user area used for a 16-bit
-    // word to write and be detected by the testbench verilog.
-    // Only serial Tx line is used in this testbench.  It connects
-    // to mprj_io[6].  Since all lines of the chip are input or
-    // high impedence on startup, the I/O has to be configured
-    // for output
-
-    reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Management needs to apply output on these pads to access the user area SPI flash
-    reg_mprj_io_10 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_9 = GPIO_MODE_MGMT_STD_OUTPUT;
-    reg_mprj_io_8 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    reg_mprj_io_6 = GPIO_MODE_MGMT_STD_OUTPUT;
-
-    // Apply configuration
-    reg_mprj_xfer = 1;
-    while (reg_mprj_xfer == 1);
-
-    // Start test
-    reg_mprj_datal = 0xa0000000;
-
-    // Set clock to 64 kbaud and enable the UART
-    reg_uart_clkdiv = 625;
-    reg_uart_enable = 1;
-
-    // Test in progress
-    reg_mprj_datal = 0xa5000000;
-
-    // Test message
-    print("Test message\n");
-
-    // End test
-    reg_mprj_datal = 0xab000000;
-}
-
diff --git a/verilog/dv/caravel/mgmt_soc/user_pass_thru/user_pass_thru_tb.v b/verilog/dv/caravel/mgmt_soc/user_pass_thru/user_pass_thru_tb.v
deleted file mode 100644
index 6407813..0000000
--- a/verilog/dv/caravel/mgmt_soc/user_pass_thru/user_pass_thru_tb.v
+++ /dev/null
@@ -1,399 +0,0 @@
-// 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
-/*	
- *	StriVe housekeeping pass-thru mode SPI testbench.
- */
-
-`timescale 1 ns / 1 ps
-
-`include "__uprj_netlists.v"
-`include "caravel_netlists.v"
-`include "spiflash.v"
-`include "tbuart.v"
-
-module user_pass_thru_tb;
-	reg clock;
-	reg SDI, CSB, SCK, RSTB;
-	reg power1, power2;
-
-	wire gpio;
-	wire [15:0] checkbits;
-	wire [37:0] mprj_io;
-	wire uart_tx;
-	wire uart_rx;
-
-	wire flash_csb;
-	wire flash_clk;
-	wire flash_io0;
-	wire flash_io1;
-	wire flash_io2;
-	wire flash_io3;
-
-	wire user_csb;
-	wire user_clk;
-	wire user_io0;
-	wire user_io1;
-
-	wire SDO;
-
-	always #10 clock <= (clock === 1'b0);
-
-	initial begin
-		clock = 0;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-    // The main testbench is here.  Put the housekeeping SPI into
-    // pass-thru mode and read several bytes from the flash SPI.
-
-    // First define tasks for SPI functions
-
-	task start_csb;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		CSB <= 1'b0;
-		#50;
-	    end
-	endtask
-
-	task end_csb;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		CSB <= 1'b1;
-		#50;
-	    end
-	endtask
-
-	task write_byte;
-	    input [7:0] odata;
-	    begin
-		SCK <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-		    SDI <= odata[i];
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-
-	task read_byte;
-	    output [7:0] idata;
-	    begin
-		SCK <= 1'b0;
-		SDI <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-                    idata[i] = SDO;
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-
-	task read_write_byte
-	    (input [7:0] odata,
-	    output [7:0] idata);
-	    begin
-		SCK <= 1'b0;
-		for (i=7; i >= 0; i--) begin
-		    #50;
-		    SDI <= odata[i];
-                    idata[i] = SDO;
-                    #50;
-		    SCK <= 1'b1;
-                    #100;
-		    SCK <= 1'b0;
-		end
-	    end
-	endtask
-	
-	integer i;
-
-    // Now drive the digital signals on the housekeeping SPI
-	reg [7:0] tbdata;
-
-	initial begin
-	    $dumpfile("user_pass_thru.vcd");
-	    $dumpvars(0, user_pass_thru_tb);
-
-	    CSB <= 1'b1;
-	    SCK <= 1'b0;
-	    SDI <= 1'b0;
-	    RSTB <= 1'b0;
-
-	    #2000;
-
-	    RSTB <= 1'b1;
-
-	    // Wait on start of program execution
-	    wait(checkbits == 16'hA000);
-
-            // First do a normal read from the housekeeping SPI to
-	    // make sure the housekeeping SPI works.
-
-	    start_csb();
-	    write_byte(8'h40);	// Read stream command
-	    write_byte(8'h03);	// Address (register 3 = product ID)
-	    read_byte(tbdata);
-	    end_csb();
-	    #10;
-
-	    $display("Read data = 0x%02x (should be 0x10)", tbdata);
-	    if(tbdata !== 8'h10) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-
-	    // The SPI flash may need to be reset.
-	    start_csb();
-	    write_byte(8'hc2);	// Apply user pass-thru command to housekeeping SPI
-	    write_byte(8'hff);	// SPI flash command ff
-	    end_csb();
-
-	    start_csb();
-	    write_byte(8'hc2);	// Apply user pass-thru command to housekeeping SPI
-	    write_byte(8'hab);	// SPI flash command ab
-	    end_csb();
-
-	    start_csb();
-	    write_byte(8'hc2); // Apply user pass-thru command to housekeeping SPI
-	    write_byte(8'h03);	// Command 03 (read values w/3-byte address)
-	    write_byte(8'h00);	// Address is next three bytes (0x000000)
-	    write_byte(8'h00);
-	    write_byte(8'h00);
-
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x93)", tbdata);
-	    if(tbdata !== 8'h93) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x93)", tbdata);
-	    if(tbdata !== 8'h93) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x01)", tbdata);
-	    if(tbdata !== 8'h01) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-	    read_byte(tbdata);
-	    $display("Read flash data = 0x%02x (should be 0x00)", tbdata);
-	    if(tbdata !== 8'h00) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-
-	    end_csb();
-
-	    // Reset processor
-	    start_csb();
-	    write_byte(8'h80);	// Write stream command
-	    write_byte(8'h0b);	// Address (register 11 = reset)
-	    write_byte(8'h01);	// Data (value 1 = apply reset)
-	    end_csb();
-
-	    start_csb();
-	    write_byte(8'h80);	// Write stream command
-	    write_byte(8'h0b);	// Address (register 11 = reset)
-	    write_byte(8'h00);	// Data (value 1 = apply reset)
-	    end_csb();
-
-	    // Wait for processor to restart
-	    wait(checkbits == 16'hA000);
-
-	    // Read product ID register again
-
-	    start_csb();
-	    write_byte(8'h40);	// Read stream command
-	    write_byte(8'h03);	// Address (register 3 = product ID)
-	    read_byte(tbdata);
-	    end_csb();
-	    #10;
-	    $display("Read data = 0x%02x (should be 0x10)", tbdata);
-	    if(tbdata !== 8'h10) begin 
-			`ifdef GL
-				$display("Monitor: Test HK SPI Pass-thru (GL) Failed"); $finish; 
-			`else
-				$display("Monitor: Test HK SPI Pass-thru (RTL) Failed"); $finish; 
-			`endif
-		end
-
-		`ifdef GL
-	    	$display("Monitor: Test HK SPI Pass-thru (GL) Passed");
-		`else
-			$display("Monitor: Test HK SPI Pass-thru (RTL) Passed");
-		`endif
-		
-	    #10000;
- 	    $finish;
-	end
-
-	wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-
-	wire hk_sck;
-	wire hk_csb;
-	wire hk_sdi;
-
-	assign hk_sck = SCK;
-	assign hk_csb = CSB;
-	assign hk_sdi = SDI;
-
-	assign checkbits = mprj_io[31:16];
-	assign uart_tx = mprj_io[6];
-	assign mprj_io[5] = uart_rx;
-	assign mprj_io[4] = hk_sck;
-	assign mprj_io[3] = hk_csb;
-	assign mprj_io[2] = hk_sdi;
-	assign SDO = mprj_io[1];
-
-	assign user_csb = mprj_io[8];
-	assign user_clk = mprj_io[9];
-	assign user_io0 = mprj_io[10];
-	assign mprj_io[11] = user_io1;
-	
-	caravel uut (
-		.vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (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("user_pass_thru.hex")
-	) spiflash (
-		.csb(flash_csb),
-		.clk(flash_clk),
-		.io0(flash_io0),
-		.io1(flash_io1),
-		.io2(),			// not used
-		.io3()			// not used
-	);
-
-	// Use the same flash; this is just to put known data in memory that can be
-	// checked by reading it back through a pass-through command.
-	spiflash #(
-		.FILENAME("user_pass_thru.hex")
-	) secondary (
-		.csb(user_csb),
-		.clk(user_clk),
-		.io0(user_io0),
-		.io1(user_io1),
-		.io2(),			// not used
-		.io3()			// not used
-	);
-
-
-	tbuart tbuart (
-		.ser_rx(uart_tx)
-	);
-		
-endmodule
-`default_nettype wire
diff --git a/verilog/dv/caravel/sections.lds b/verilog/dv/caravel/sections.lds
deleted file mode 100644
index 2d8c048..0000000
--- a/verilog/dv/caravel/sections.lds
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-# 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
-*/
-
-MEMORY {
-	FLASH (rx)	: ORIGIN = 0x10000000, LENGTH = 0x400000 	/* 4MB */
-	RAM(xrw)	: ORIGIN = 0x00000000, LENGTH = 0x0400		/* 256 words (1 KB) */ 
-}
-
-SECTIONS {
-	/* The program code and other data goes into FLASH */
-	.text :
-	{
-		. = ALIGN(4);
-		*(.text)	/* .text sections (code) */
-		*(.text*)	/* .text* sections (code) */
-		*(.rodata)	/* .rodata sections (constants, strings, etc.) */
-		*(.rodata*)	/* .rodata* sections (constants, strings, etc.) */
-		*(.srodata)	/* .srodata sections (constants, strings, etc.) */
-		*(.srodata*)	/* .srodata*sections (constants, strings, etc.) */
-		. = ALIGN(4);
-		_etext = .;		/* define a global symbol at end of code */
-		_sidata = _etext;	/* This is used by the startup to initialize data */
-	} >FLASH
-
-	/* Initialized data section */
-	.data : AT ( _sidata )
-	{
-		. = ALIGN(4);
-		_sdata = .;
-		_ram_start = .;
-		. = ALIGN(4);
-		*(.data)
-		*(.data*)
-		*(.sdata)
-		*(.sdata*)
-		. = ALIGN(4);
-		_edata = .;
-	} >RAM
-
-	/* Uninitialized data section */
-	.bss :
-	{
-		. = ALIGN(4);
-		_sbss = .;
-		*(.bss)
-		*(.bss*)
-		*(.sbss)
-		*(.sbss*)
-		*(COMMON)
-
-		. = ALIGN(4);
-		_ebss = .;
-	} >RAM
-
-	/* Define the start of the heap */
-	.heap :
-	{
-		. = ALIGN(4);
-		_heap_start = .;
-	} >RAM
-}
diff --git a/verilog/dv/caravel/spiflash.v b/verilog/dv/caravel/spiflash.v
deleted file mode 100644
index 6aa29ba..0000000
--- a/verilog/dv/caravel/spiflash.v
+++ /dev/null
@@ -1,447 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017 Clifford Wolf
- *
- *  PicoSoC - A simple example SoC using PicoRV32
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-//
-// Simple SPI flash simulation model
-//
-// This model samples io input signals 1ns before the SPI clock edge and
-// updates output signals 1ns after the SPI clock edge.
-//
-// Supported commands:
-//    AB, B9, FF, 03, BB, EB, ED
-//
-// Well written SPI flash data sheets:
-//    Cypress S25FL064L http://www.cypress.com/file/316661/download
-//    Cypress S25FL128L http://www.cypress.com/file/316171/download
-//
-
-module spiflash #(
-	parameter FILENAME = "firmware.hex"
-)(
-	input csb,
-	input clk,
-	inout io0, // MOSI
-	inout io1, // MISO
-	inout io2,
-	inout io3
-);
-	localparam verbose = 0;
-	localparam integer latency = 8;
-	
-	reg [7:0] buffer;
-	reg [3:0] reset_count = 0;
-	reg [3:0] reset_monitor = 0;
-	integer bitcount = 0;
-	integer bytecount = 0;
-	integer dummycount = 0;
-
-	reg [7:0] spi_cmd;
-	reg [7:0] xip_cmd = 0;
-	reg [23:0] spi_addr;
-
-	reg [7:0] spi_in;
-	reg [7:0] spi_out;
-	reg spi_io_vld;
-
-	reg powered_up = 0;
-
-	localparam [3:0] mode_spi         = 1;
-	localparam [3:0] mode_dspi_rd     = 2;
-	localparam [3:0] mode_dspi_wr     = 3;
-	localparam [3:0] mode_qspi_rd     = 4;
-	localparam [3:0] mode_qspi_wr     = 5;
-	localparam [3:0] mode_qspi_ddr_rd = 6;
-	localparam [3:0] mode_qspi_ddr_wr = 7;
-
-	reg [3:0] mode = 0;
-	reg [3:0] next_mode = 0;
-
-	reg io0_oe = 0;
-	reg io1_oe = 0;
-	reg io2_oe = 0;
-	reg io3_oe = 0;
-
-	reg io0_dout = 0;
-	reg io1_dout = 0;
-	reg io2_dout = 0;
-	reg io3_dout = 0;
-
-	assign #1 io0 = io0_oe ? io0_dout : 1'bz;
-	assign #1 io1 = io1_oe ? io1_dout : 1'bz;
-	assign #1 io2 = io2_oe ? io2_dout : 1'bz;
-	assign #1 io3 = io3_oe ? io3_dout : 1'bz;
-
-	wire io0_delayed;
-	wire io1_delayed;
-	wire io2_delayed;
-	wire io3_delayed;
-
-	assign #1 io0_delayed = io0;
-	assign #1 io1_delayed = io1;
-	assign #1 io2_delayed = io2;
-	assign #1 io3_delayed = io3;
-
-	// 16 MB (128Mb) Flash
-	reg [7:0] memory [0:16*1024*1024-1];
-
-	initial begin
-		$display("Memory 5 bytes = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
-			memory[1048576], memory[1048577], memory[1048578],
-			memory[1048579], memory[1048580]);
-		$display("Reading %s",  FILENAME);
-		$readmemh(FILENAME, memory);
-		$display("%s loaded into memory", FILENAME);
-		$display("Memory 5 bytes = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
-			memory[1048576], memory[1048577], memory[1048578],
-			memory[1048579], memory[1048580]);
-	end
-
-	task spi_action;
-		begin
-			spi_in = buffer;
-
-			if (bytecount == 1) begin
-				spi_cmd = buffer;
-
-				if (spi_cmd == 8'h ab)
-					powered_up = 1;
-
-				if (spi_cmd == 8'h b9)
-					powered_up = 0;
-
-				if (spi_cmd == 8'h ff)
-					xip_cmd = 0;
-			end
-
-			if (powered_up && spi_cmd == 'h 03) begin
-				if (bytecount == 2)
-					spi_addr[23:16] = buffer;
-
-				if (bytecount == 3)
-					spi_addr[15:8] = buffer;
-
-				if (bytecount == 4)
-					spi_addr[7:0] = buffer;
-
-				if (bytecount >= 4) begin
-					buffer = memory[spi_addr];
-					spi_addr = spi_addr + 1;
-				end
-			end
-
-			if (powered_up && spi_cmd == 'h bb) begin
-				if (bytecount == 1)
-					mode = mode_dspi_rd;
-
-				if (bytecount == 2)
-					spi_addr[23:16] = buffer;
-
-				if (bytecount == 3)
-					spi_addr[15:8] = buffer;
-
-				if (bytecount == 4)
-					spi_addr[7:0] = buffer;
-
-				if (bytecount == 5) begin
-					xip_cmd = (buffer == 8'h a5) ? spi_cmd : 8'h 00;
-					mode = mode_dspi_wr;
-					dummycount = latency;
-				end
-
-				if (bytecount >= 5) begin
-					buffer = memory[spi_addr];
-					spi_addr = spi_addr + 1;
-				end
-			end
-
-			if (powered_up && spi_cmd == 'h eb) begin
-				if (bytecount == 1)
-					mode = mode_qspi_rd;
-
-				if (bytecount == 2)
-					spi_addr[23:16] = buffer;
-
-				if (bytecount == 3)
-					spi_addr[15:8] = buffer;
-
-				if (bytecount == 4)
-					spi_addr[7:0] = buffer;
-
-				if (bytecount == 5) begin
-					xip_cmd = (buffer == 8'h a5) ? spi_cmd : 8'h 00;
-					mode = mode_qspi_wr;
-					dummycount = latency;
-				end
-
-				if (bytecount >= 5) begin
-					buffer = memory[spi_addr];
-					spi_addr = spi_addr + 1;
-				end
-			end
-
-			if (powered_up && spi_cmd == 'h ed) begin
-				if (bytecount == 1)
-					next_mode = mode_qspi_ddr_rd;
-
-				if (bytecount == 2)
-					spi_addr[23:16] = buffer;
-
-				if (bytecount == 3)
-					spi_addr[15:8] = buffer;
-
-				if (bytecount == 4)
-					spi_addr[7:0] = buffer;
-
-				if (bytecount == 5) begin
-					xip_cmd = (buffer == 8'h a5) ? spi_cmd : 8'h 00;
-					mode = mode_qspi_ddr_wr;
-					dummycount = latency;
-				end
-
-				if (bytecount >= 5) begin
-					buffer = memory[spi_addr];
-					spi_addr = spi_addr + 1;
-				end
-			end
-
-			spi_out = buffer;
-			spi_io_vld = 1;
-
-			if (verbose) begin
-				if (bytecount == 1)
-					$write("<SPI-START>");
-				$write("<SPI:%02x:%02x>", spi_in, spi_out);
-			end
-
-		end
-	endtask
-
-	task ddr_rd_edge;
-		begin
-			buffer = {buffer, io3_delayed, io2_delayed, io1_delayed, io0_delayed};
-			bitcount = bitcount + 4;
-			if (bitcount == 8) begin
-				bitcount = 0;
-				bytecount = bytecount + 1;
-				spi_action;
-			end
-		end
-	endtask
-
-	task ddr_wr_edge;
-		begin
-			io0_oe = 1;
-			io1_oe = 1;
-			io2_oe = 1;
-			io3_oe = 1;
-
-			io0_dout = buffer[4];
-			io1_dout = buffer[5];
-			io2_dout = buffer[6];
-			io3_dout = buffer[7];
-
-			buffer = {buffer, 4'h 0};
-			bitcount = bitcount + 4;
-			if (bitcount == 8) begin
-				bitcount = 0;
-				bytecount = bytecount + 1;
-				spi_action;
-			end
-		end
-	endtask
-
-	always @(csb) begin
-		if (csb) begin
-			if (verbose) begin
-				$display("");
-				$fflush;
-			end
-			buffer = 0;
-			bitcount = 0;
-			bytecount = 0;
-			mode = mode_spi;
-			io0_oe = 0;
-			io1_oe = 0;
-			io2_oe = 0;
-			io3_oe = 0;
-
-			// Handle MBR.  If in XIP continuous mode, the following
-			// 8 clock cycles are normally not expected to be a command.
-			// If followed by CSB high, however, if the address bits
-			// are consistent with io0 == 1 for 8 clk cycles, then an
-			// MBR has been issued and the system must exit XIP
-			// continuous mode.
-			if (xip_cmd == 8'hbb || xip_cmd == 8'heb
-					|| xip_cmd == 8'hed) begin
-				if (reset_count == 4'h8 && reset_monitor == 4'h8) begin
-					xip_cmd = 8'h00;
-					spi_cmd = 8'h03;
-				end
-			end
-		end else
-		if (xip_cmd) begin
-			buffer = xip_cmd;
-			bitcount = 0;
-			bytecount = 1;
-			spi_action;
-		end
-	end
-
-	always @(posedge clk or posedge csb) begin
-		if (csb == 1'b1) begin
-			reset_count = 0;
-			reset_monitor = 0;
-		end else begin
-			if (reset_count < 4'h9) begin
-				reset_count = reset_count + 1;
-				if (io0_delayed == 1'b1) begin
-				    reset_monitor = reset_monitor + 1;
-				end
-			end
-		end
-	end
-
-	always @(csb, clk) begin
-		spi_io_vld = 0;
-		if (!csb && !clk) begin
-			if (dummycount > 0) begin
-				io0_oe = 0;
-				io1_oe = 0;
-				io2_oe = 0;
-				io3_oe = 0;
-			end else
-			case (mode)
-				mode_spi: begin
-					io0_oe = 0;
-					io1_oe = 1;
-					io2_oe = 0;
-					io3_oe = 0;
-					io1_dout = buffer[7];
-				end
-				mode_dspi_rd: begin
-					io0_oe = 0;
-					io1_oe = 0;
-					io2_oe = 0;
-					io3_oe = 0;
-				end
-				mode_dspi_wr: begin
-					io0_oe = 1;
-					io1_oe = 1;
-					io2_oe = 0;
-					io3_oe = 0;
-					io0_dout = buffer[6];
-					io1_dout = buffer[7];
-				end
-				mode_qspi_rd: begin
-					io0_oe = 0;
-					io1_oe = 0;
-					io2_oe = 0;
-					io3_oe = 0;
-				end
-				mode_qspi_wr: begin
-					io0_oe = 1;
-					io1_oe = 1;
-					io2_oe = 1;
-					io3_oe = 1;
-					io0_dout = buffer[4];
-					io1_dout = buffer[5];
-					io2_dout = buffer[6];
-					io3_dout = buffer[7];
-				end
-				mode_qspi_ddr_rd: begin
-					ddr_rd_edge;
-				end
-				mode_qspi_ddr_wr: begin
-					ddr_wr_edge;
-				end
-			endcase
-			if (next_mode) begin
-				case (next_mode)
-					mode_qspi_ddr_rd: begin
-						io0_oe = 0;
-						io1_oe = 0;
-						io2_oe = 0;
-						io3_oe = 0;
-					end
-					mode_qspi_ddr_wr: begin
-						io0_oe = 1;
-						io1_oe = 1;
-						io2_oe = 1;
-						io3_oe = 1;
-						io0_dout = buffer[4];
-						io1_dout = buffer[5];
-						io2_dout = buffer[6];
-						io3_dout = buffer[7];
-					end
-				endcase
-				mode = next_mode;
-				next_mode = 0;
-			end
-		end
-	end
-
-	always @(posedge clk) begin
-		if (!csb) begin
-			if (dummycount > 0) begin
-				dummycount = dummycount - 1;
-			end else
-			case (mode)
-				mode_spi: begin
-					buffer = {buffer, io0};
-					bitcount = bitcount + 1;
-					if (bitcount == 8) begin
-						bitcount = 0;
-						bytecount = bytecount + 1;
-						spi_action;
-					end
-				end
-				mode_dspi_rd, mode_dspi_wr: begin
-					buffer = {buffer, io1, io0};
-					bitcount = bitcount + 2;
-					if (bitcount == 8) begin
-						bitcount = 0;
-						bytecount = bytecount + 1;
-						spi_action;
-					end
-				end
-				mode_qspi_rd, mode_qspi_wr: begin
-					buffer = {buffer, io3, io2, io1, io0};
-					bitcount = bitcount + 4;
-					if (bitcount == 8) begin
-						bitcount = 0;
-						bytecount = bytecount + 1;
-						spi_action;
-					end
-				end
-				mode_qspi_ddr_rd: begin
-					ddr_rd_edge;
-				end
-				mode_qspi_ddr_wr: begin
-					ddr_wr_edge;
-				end
-			endcase
-		end
-	end
-endmodule
diff --git a/verilog/dv/caravel/start.s b/verilog/dv/caravel/start.s
deleted file mode 100644
index 287cba2..0000000
--- a/verilog/dv/caravel/start.s
+++ /dev/null
@@ -1,174 +0,0 @@
-# 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
-
-.section .text
-
-start:
-
-# zero-initialize register file
-addi x1, zero, 0
-# x2 (sp) is initialized by reset
-addi x3, zero, 0
-addi x4, zero, 0
-addi x5, zero, 0
-addi x6, zero, 0
-addi x7, zero, 0
-addi x8, zero, 0
-addi x9, zero, 0
-addi x10, zero, 0
-addi x11, zero, 0
-addi x12, zero, 0
-addi x13, zero, 0
-addi x14, zero, 0
-addi x15, zero, 0
-addi x16, zero, 0
-addi x17, zero, 0
-addi x18, zero, 0
-addi x19, zero, 0
-addi x20, zero, 0
-addi x21, zero, 0
-addi x22, zero, 0
-addi x23, zero, 0
-addi x24, zero, 0
-addi x25, zero, 0
-addi x26, zero, 0
-addi x27, zero, 0
-addi x28, zero, 0
-addi x29, zero, 0
-addi x30, zero, 0
-addi x31, zero, 0
-
-# zero initialize scratchpad memory
-# setmemloop:
-# sw zero, 0(x1)
-# addi x1, x1, 4
-# blt x1, sp, setmemloop
-
-# copy data section
-la a0, _sidata
-la a1, _sdata
-la a2, _edata
-bge a1, a2, end_init_data
-loop_init_data:
-lw a3, 0(a0)
-sw a3, 0(a1)
-addi a0, a0, 4
-addi a1, a1, 4
-blt a1, a2, loop_init_data
-end_init_data:
-
-# zero-init bss section
-la a0, _sbss
-la a1, _ebss
-bge a0, a1, end_init_bss
-loop_init_bss:
-sw zero, 0(a0)
-addi a0, a0, 4
-blt a0, a1, loop_init_bss
-end_init_bss:
-
-# call main
-call main
-loop:
-j loop
-
-.global flashio_worker_begin
-.global flashio_worker_end
-
-.balign 4
-
-flashio_worker_begin:
-# a0 ... data pointer
-# a1 ... data length
-# a2 ... optional WREN cmd (0 = disable)
-
-# address of SPI ctrl reg
-li   t0, 0x28000000
-
-# Set CS high, IO0 is output
-li   t1, 0x120
-sh   t1, 0(t0)
-
-# Enable Manual SPI Ctrl
-sb   zero, 3(t0)
-
-# Send optional WREN cmd
-beqz a2, flashio_worker_L1
-li   t5, 8
-andi t2, a2, 0xff
-flashio_worker_L4:
-srli t4, t2, 7
-sb   t4, 0(t0)
-ori  t4, t4, 0x10
-sb   t4, 0(t0)
-slli t2, t2, 1
-andi t2, t2, 0xff
-addi t5, t5, -1
-bnez t5, flashio_worker_L4
-sb   t1, 0(t0)
-
-# SPI transfer
-flashio_worker_L1:
-
-# If byte count is zero, we're done
-beqz a1, flashio_worker_L3
-
-# Set t5 to count down 32 bits
-li   t5, 32
-# Load t2 from address a0 (4 bytes)
-lw   t2, 0(a0)
-
-flashio_worker_LY:
-# Set t6 to count down 8 bits
-li   t6, 8
-
-flashio_worker_L2:
-# Clock out the bit (msb first) on IO0 and read bit in from IO1
-srli t4, t2, 31
-sb   t4, 0(t0)
-ori  t4, t4, 0x10
-sb   t4, 0(t0)
-lbu  t4, 0(t0)
-andi t4, t4, 2
-srli t4, t4, 1
-slli t2, t2, 1
-or   t2, t2, t4
-
-# Decrement 32 bit count
-addi t5, t5, -1
-bnez t5, flashio_worker_LX
-
-sw   t2, 0(a0)
-addi a0, a0, 4
-lw   t2, 0(a0)
-
-flashio_worker_LX:
-addi t6, t6, -1
-bnez t6, flashio_worker_L2
-addi a1, a1, -1
-bnez a1, flashio_worker_LY
-
-beqz t5, flashio_worker_L3
-sw   t2, 0(a0)
-
-flashio_worker_L3:
-# Back to MEMIO mode
-li   t1, 0x80
-sb   t1, 3(t0)
-
-ret
-.balign 4
-flashio_worker_end:
-
diff --git a/verilog/dv/caravel/stub.c b/verilog/dv/caravel/stub.c
deleted file mode 100644
index 575cfc3..0000000
--- a/verilog/dv/caravel/stub.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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
- */
-
-void putchar(char c)
-{
-	if (c == '\n')
-		putchar('\r');
-	reg_uart_data = c;
-}
-
-void print(const char *p)
-{
-	while (*p)
-		putchar(*(p++));
-}
\ No newline at end of file
diff --git a/verilog/dv/caravel/tbuart.v b/verilog/dv/caravel/tbuart.v
deleted file mode 100644
index bac9480..0000000
--- a/verilog/dv/caravel/tbuart.v
+++ /dev/null
@@ -1,93 +0,0 @@
-`default_nettype none
-/*
- *  SPDX-FileCopyrightText: 2017 Clifford Wolf
- *
- *  PicoSoC - A simple example SoC using PicoRV32
- *
- *  Copyright (C) 2017  Clifford Wolf <clifford@clifford.at>
- *
- *  Permission to use, copy, modify, and/or distribute this software for any
- *  purpose with or without fee is hereby granted, provided that the above
- *  copyright notice and this permission notice appear in all copies.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- *  SPDX-License-Identifier: ISC
- */
-
-`timescale 1 ns / 1 ps
-
-/* tbuart --- mimic an external UART display, operating at 9600 baud	*/
-/* and accepting ASCII characters for display.				*/
-
-/* To do:  Match a known UART 3.3V 16x2 LCD display.  However, it	*/
-/* should be possible on a testing system to interface to the UART	*/
-/* pins on a Raspberry Pi, also running at 3.3V.			*/
-
-module tbuart (
-	input  ser_rx
-);
-	reg [3:0] recv_state;
-	reg [2:0] recv_divcnt;
-	reg [7:0] recv_pattern;
-	reg [8*50-1:0] recv_buf_data;	// 50 characters.  Increase as needed for tests.
-
-	reg clk;
-
-	initial begin
-		clk <= 1'b0;
-		recv_state <= 0;
-		recv_divcnt <= 0;
-		recv_pattern <= 0;
-		recv_buf_data <= 0;
-	end
-
-	// NOTE:  Running at 3.0us clock period @ 5 clocks per bit = 15.0us per
-	// bit ~= 64 kbaud. Not tuned to any particular UART.  Most run at
-	// 9600 baud default and will bounce up to higher baud rates when
-	// passed specific command words.
-
-	always #1500 clk <= (clk === 1'b0);
-
-	always @(posedge clk) begin
-		recv_divcnt <= recv_divcnt + 1;
-		case (recv_state)
-			0: begin
-				if (!ser_rx)
-					recv_state <= 1;
-				recv_divcnt <= 0;
-			end
-			1: begin
-				if (2*recv_divcnt > 3'd3) begin
-					recv_state <= 2;
-					recv_divcnt <= 0;
-				end
-			end
-			10: begin
-				if (recv_divcnt > 3'd3) begin
-					// 0x0a = '\n'
-					if (recv_pattern == 8'h0a) begin
-						$display("output: %s", recv_buf_data);
-					end else begin
-						recv_buf_data <= {recv_buf_data, recv_pattern};
-					end
-					recv_state <= 0;
-				end
-			end
-			default: begin
-				if (recv_divcnt > 3'd3) begin
-					recv_pattern <= {ser_rx, recv_pattern[7:1]};
-					recv_state <= recv_state + 1;
-					recv_divcnt <= 0;
-				end
-			end
-		endcase
-	end
-
-endmodule
diff --git a/verilog/dv/dummy_slave.v b/verilog/dv/dummy_slave.v
deleted file mode 100644
index be068fc..0000000
--- a/verilog/dv/dummy_slave.v
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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
-module dummy_slave(
-    input wb_clk_i,
-    input wb_rst_i,
-    
-    input wb_stb_i,
-    input wb_cyc_i,
-    input wb_we_i,
-    input [3:0] wb_sel_i,
-    input [31:0] wb_adr_i,
-    input [31:0] wb_dat_i,
-    
-    output reg [31:0] wb_dat_o,
-    output reg wb_ack_o
-);
-    reg [31:0] store;
-
-    wire valid = wb_cyc_i & wb_stb_i;
-
-    always @(posedge wb_clk_i) begin
-        if (wb_rst_i == 1'b 1) begin
-            wb_ack_o <= 1'b 0;
-        end else begin
-            if (wb_we_i == 1'b 1) begin
-                if (wb_sel_i[0]) store[7:0]   <= wb_dat_i[7:0];
-                if (wb_sel_i[1]) store[15:8]  <= wb_dat_i[15:8];
-                if (wb_sel_i[2]) store[23:16] <= wb_dat_i[23:16];
-                if (wb_sel_i[3]) store[31:24] <= wb_dat_i[31:24];
-            end
-            wb_dat_o <= store;
-            wb_ack_o <= valid & !wb_ack_o;
-        end
-    end
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/readme b/verilog/dv/readme
deleted file mode 100644
index 8b13789..0000000
--- a/verilog/dv/readme
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/verilog/dv/wb_utests/Makefile b/verilog/dv/wb_utests/Makefile
deleted file mode 100644
index cd86cb8..0000000
--- a/verilog/dv/wb_utests/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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 = gpio_wb intercon_wb la_wb mem_wb mprj_ctrl spi_sysctrl_wb spimemio_wb uart_wb storage_wb mgmt_protect chip_io
-
-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/wb_utests/chip_io/Makefile b/verilog/dv/wb_utests/chip_io/Makefile
deleted file mode 100644
index 4bd731a..0000000
--- a/verilog/dv/wb_utests/chip_io/Makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-# 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
-
-PDK_PATH = $(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../
-RTL_PATH = $(VERILOG_PATH)/rtl
-
-SIM ?= RTL
-
-.SUFFIXES:
-
-PATTERN = chip_io
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp -DFUNCTIONAL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-endif
-ifeq ($(SIM),SPLIT_BUS)
-	iverilog -Ttyp  -DFUNCTIONAL -DSPLIT_BUS -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-endif
-ifeq ($(SIM),GL)
-	iverilog -Ttyp -DFUNCTIONAL -DGL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-endif
-
-%.vcd: %.vvp check-env
-	vvp $<
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-
-clean:
-	rm -f *.vvp *.vcd
-
-.PHONY: clean all
diff --git a/verilog/dv/wb_utests/chip_io/chip_io_split.v b/verilog/dv/wb_utests/chip_io/chip_io_split.v
deleted file mode 100644
index 62a1cb2..0000000
--- a/verilog/dv/wb_utests/chip_io/chip_io_split.v
+++ /dev/null
@@ -1,4218 +0,0 @@
-// 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
-
-module chip_io(vddio, vssio, vccd, vssd, vdda, vssa, vdda1, vdda2, vssa1, vssa2, vccd1, vccd2, vssd1, vssd2, gpio, clock, resetb, flash_csb, flash_clk, flash_io0, flash_io1, porb_h, por, resetb_core_h, clock_core, gpio_out_core, gpio_in_core, gpio_mode0_core, gpio_mode1_core, gpio_outenb_core, gpio_inenb_core, flash_csb_core, flash_clk_core, flash_csb_oeb_core, flash_clk_oeb_core, flash_io0_oeb_core, flash_io1_oeb_core, flash_csb_ieb_core, flash_clk_ieb_core, flash_io0_ieb_core, flash_io1_ieb_core, flash_io0_do_core, flash_io1_do_core, flash_io0_di_core, flash_io1_di_core, \mprj_io[0] , \mprj_io[1] , \mprj_io[2] , \mprj_io[3] , \mprj_io[4] , \mprj_io[5] , \mprj_io[6] , \mprj_io[7] , \mprj_io[8] , \mprj_io[9] , \mprj_io[10] , \mprj_io[11] , \mprj_io[12] , \mprj_io[13] , \mprj_io[14] , \mprj_io[15] , \mprj_io[16] , \mprj_io[17] , \mprj_io[18] , \mprj_io[19] , \mprj_io[20] , \mprj_io[21] , \mprj_io[22] , \mprj_io[23] , \mprj_io[24] , \mprj_io[25] , \mprj_io[26] , \mprj_io[27] , \mprj_io[28] , \mprj_io[29] , \mprj_io[30] , \mprj_io[31] , \mprj_io[32] , \mprj_io[33] , \mprj_io[34] , \mprj_io[35] , \mprj_io[36] , \mprj_io[37] , \mprj_io_out[0] , \mprj_io_out[1] , \mprj_io_out[2] , \mprj_io_out[3] , \mprj_io_out[4] , \mprj_io_out[5] , \mprj_io_out[6] , \mprj_io_out[7] , \mprj_io_out[8] , \mprj_io_out[9] , \mprj_io_out[10] , \mprj_io_out[11] , \mprj_io_out[12] , \mprj_io_out[13] , \mprj_io_out[14] , \mprj_io_out[15] , \mprj_io_out[16] , \mprj_io_out[17] , \mprj_io_out[18] , \mprj_io_out[19] , \mprj_io_out[20] , \mprj_io_out[21] , \mprj_io_out[22] , \mprj_io_out[23] , \mprj_io_out[24] , \mprj_io_out[25] , \mprj_io_out[26] , \mprj_io_out[27] , \mprj_io_out[28] , \mprj_io_out[29] , \mprj_io_out[30] , \mprj_io_out[31] , \mprj_io_out[32] , \mprj_io_out[33] , \mprj_io_out[34] , \mprj_io_out[35] , \mprj_io_out[36] , \mprj_io_out[37] , \mprj_io_oeb[0] , \mprj_io_oeb[1] , \mprj_io_oeb[2] , \mprj_io_oeb[3] , \mprj_io_oeb[4] , \mprj_io_oeb[5] , \mprj_io_oeb[6] , \mprj_io_oeb[7] , \mprj_io_oeb[8] , \mprj_io_oeb[9] , \mprj_io_oeb[10] , \mprj_io_oeb[11] , \mprj_io_oeb[12] , \mprj_io_oeb[13] , \mprj_io_oeb[14] , \mprj_io_oeb[15] , \mprj_io_oeb[16] , \mprj_io_oeb[17] , \mprj_io_oeb[18] , \mprj_io_oeb[19] , \mprj_io_oeb[20] , \mprj_io_oeb[21] , \mprj_io_oeb[22] , \mprj_io_oeb[23] , \mprj_io_oeb[24] , \mprj_io_oeb[25] , \mprj_io_oeb[26] , \mprj_io_oeb[27] , \mprj_io_oeb[28] , \mprj_io_oeb[29] , \mprj_io_oeb[30] , \mprj_io_oeb[31] , \mprj_io_oeb[32] , \mprj_io_oeb[33] , \mprj_io_oeb[34] , \mprj_io_oeb[35] , \mprj_io_oeb[36] , \mprj_io_oeb[37] , \mprj_io_hldh_n[0] , \mprj_io_hldh_n[1] , \mprj_io_hldh_n[2] , \mprj_io_hldh_n[3] , \mprj_io_hldh_n[4] , \mprj_io_hldh_n[5] , \mprj_io_hldh_n[6] , \mprj_io_hldh_n[7] , \mprj_io_hldh_n[8] , \mprj_io_hldh_n[9] , \mprj_io_hldh_n[10] , \mprj_io_hldh_n[11] , \mprj_io_hldh_n[12] , \mprj_io_hldh_n[13] , \mprj_io_hldh_n[14] , \mprj_io_hldh_n[15] , \mprj_io_hldh_n[16] , \mprj_io_hldh_n[17] , \mprj_io_hldh_n[18] , \mprj_io_hldh_n[19] , \mprj_io_hldh_n[20] , \mprj_io_hldh_n[21] , \mprj_io_hldh_n[22] , \mprj_io_hldh_n[23] , \mprj_io_hldh_n[24] , \mprj_io_hldh_n[25] , \mprj_io_hldh_n[26] , \mprj_io_hldh_n[27] , \mprj_io_hldh_n[28] , \mprj_io_hldh_n[29] , \mprj_io_hldh_n[30] , \mprj_io_hldh_n[31] , \mprj_io_hldh_n[32] , \mprj_io_hldh_n[33] , \mprj_io_hldh_n[34] , \mprj_io_hldh_n[35] , \mprj_io_hldh_n[36] , \mprj_io_hldh_n[37] , \mprj_io_enh[0] , \mprj_io_enh[1] , \mprj_io_enh[2] , \mprj_io_enh[3] , \mprj_io_enh[4] , \mprj_io_enh[5] , \mprj_io_enh[6] , \mprj_io_enh[7] , \mprj_io_enh[8] , \mprj_io_enh[9] , \mprj_io_enh[10] , \mprj_io_enh[11] , \mprj_io_enh[12] , \mprj_io_enh[13] , \mprj_io_enh[14] , \mprj_io_enh[15] , \mprj_io_enh[16] , \mprj_io_enh[17] , \mprj_io_enh[18] , \mprj_io_enh[19] , \mprj_io_enh[20] , \mprj_io_enh[21] , \mprj_io_enh[22] , \mprj_io_enh[23] , \mprj_io_enh[24] , \mprj_io_enh[25] , \mprj_io_enh[26] , \mprj_io_enh[27] , \mprj_io_enh[28] , \mprj_io_enh[29] , \mprj_io_enh[30] , \mprj_io_enh[31] , \mprj_io_enh[32] , \mprj_io_enh[33] , \mprj_io_enh[34] , \mprj_io_enh[35] , \mprj_io_enh[36] , \mprj_io_enh[37] , \mprj_io_inp_dis[0] , \mprj_io_inp_dis[1] , \mprj_io_inp_dis[2] , \mprj_io_inp_dis[3] , \mprj_io_inp_dis[4] , \mprj_io_inp_dis[5] , \mprj_io_inp_dis[6] , \mprj_io_inp_dis[7] , \mprj_io_inp_dis[8] , \mprj_io_inp_dis[9] , \mprj_io_inp_dis[10] , \mprj_io_inp_dis[11] , \mprj_io_inp_dis[12] , \mprj_io_inp_dis[13] , \mprj_io_inp_dis[14] , \mprj_io_inp_dis[15] , \mprj_io_inp_dis[16] , \mprj_io_inp_dis[17] , \mprj_io_inp_dis[18] , \mprj_io_inp_dis[19] , \mprj_io_inp_dis[20] , \mprj_io_inp_dis[21] , \mprj_io_inp_dis[22] , \mprj_io_inp_dis[23] , \mprj_io_inp_dis[24] , \mprj_io_inp_dis[25] , \mprj_io_inp_dis[26] , \mprj_io_inp_dis[27] , \mprj_io_inp_dis[28] , \mprj_io_inp_dis[29] , \mprj_io_inp_dis[30] , \mprj_io_inp_dis[31] , \mprj_io_inp_dis[32] , \mprj_io_inp_dis[33] , \mprj_io_inp_dis[34] , \mprj_io_inp_dis[35] , \mprj_io_inp_dis[36] , \mprj_io_inp_dis[37] , \mprj_io_ib_mode_sel[0] , \mprj_io_ib_mode_sel[1] , \mprj_io_ib_mode_sel[2] , \mprj_io_ib_mode_sel[3] , \mprj_io_ib_mode_sel[4] , \mprj_io_ib_mode_sel[5] , \mprj_io_ib_mode_sel[6] , \mprj_io_ib_mode_sel[7] , \mprj_io_ib_mode_sel[8] , \mprj_io_ib_mode_sel[9] , \mprj_io_ib_mode_sel[10] , \mprj_io_ib_mode_sel[11] , \mprj_io_ib_mode_sel[12] , \mprj_io_ib_mode_sel[13] , \mprj_io_ib_mode_sel[14] , \mprj_io_ib_mode_sel[15] , \mprj_io_ib_mode_sel[16] , \mprj_io_ib_mode_sel[17] , \mprj_io_ib_mode_sel[18] , \mprj_io_ib_mode_sel[19] , \mprj_io_ib_mode_sel[20] , \mprj_io_ib_mode_sel[21] , \mprj_io_ib_mode_sel[22] , \mprj_io_ib_mode_sel[23] , \mprj_io_ib_mode_sel[24] , \mprj_io_ib_mode_sel[25] , \mprj_io_ib_mode_sel[26] , \mprj_io_ib_mode_sel[27] , \mprj_io_ib_mode_sel[28] , \mprj_io_ib_mode_sel[29] , \mprj_io_ib_mode_sel[30] , \mprj_io_ib_mode_sel[31] , \mprj_io_ib_mode_sel[32] , \mprj_io_ib_mode_sel[33] , \mprj_io_ib_mode_sel[34] , \mprj_io_ib_mode_sel[35] , \mprj_io_ib_mode_sel[36] , \mprj_io_ib_mode_sel[37] , \mprj_io_vtrip_sel[0] , \mprj_io_vtrip_sel[1] , \mprj_io_vtrip_sel[2] , \mprj_io_vtrip_sel[3] , \mprj_io_vtrip_sel[4] , \mprj_io_vtrip_sel[5] , \mprj_io_vtrip_sel[6] , \mprj_io_vtrip_sel[7] , \mprj_io_vtrip_sel[8] , \mprj_io_vtrip_sel[9] , \mprj_io_vtrip_sel[10] , \mprj_io_vtrip_sel[11] , \mprj_io_vtrip_sel[12] , \mprj_io_vtrip_sel[13] , \mprj_io_vtrip_sel[14] , \mprj_io_vtrip_sel[15] , \mprj_io_vtrip_sel[16] , \mprj_io_vtrip_sel[17] , \mprj_io_vtrip_sel[18] , \mprj_io_vtrip_sel[19] , \mprj_io_vtrip_sel[20] , \mprj_io_vtrip_sel[21] , \mprj_io_vtrip_sel[22] , \mprj_io_vtrip_sel[23] , \mprj_io_vtrip_sel[24] , \mprj_io_vtrip_sel[25] , \mprj_io_vtrip_sel[26] , \mprj_io_vtrip_sel[27] , \mprj_io_vtrip_sel[28] , \mprj_io_vtrip_sel[29] , \mprj_io_vtrip_sel[30] , \mprj_io_vtrip_sel[31] , \mprj_io_vtrip_sel[32] , \mprj_io_vtrip_sel[33] , \mprj_io_vtrip_sel[34] , \mprj_io_vtrip_sel[35] , \mprj_io_vtrip_sel[36] , \mprj_io_vtrip_sel[37] , \mprj_io_slow_sel[0] , \mprj_io_slow_sel[1] , \mprj_io_slow_sel[2] , \mprj_io_slow_sel[3] , \mprj_io_slow_sel[4] , \mprj_io_slow_sel[5] , \mprj_io_slow_sel[6] , \mprj_io_slow_sel[7] , \mprj_io_slow_sel[8] , \mprj_io_slow_sel[9] , \mprj_io_slow_sel[10] , \mprj_io_slow_sel[11] , \mprj_io_slow_sel[12] , \mprj_io_slow_sel[13] , \mprj_io_slow_sel[14] , \mprj_io_slow_sel[15] , \mprj_io_slow_sel[16] , \mprj_io_slow_sel[17] , \mprj_io_slow_sel[18] , \mprj_io_slow_sel[19] , \mprj_io_slow_sel[20] , \mprj_io_slow_sel[21] , \mprj_io_slow_sel[22] , \mprj_io_slow_sel[23] , \mprj_io_slow_sel[24] , \mprj_io_slow_sel[25] , \mprj_io_slow_sel[26] , \mprj_io_slow_sel[27] , \mprj_io_slow_sel[28] , \mprj_io_slow_sel[29] , \mprj_io_slow_sel[30] , \mprj_io_slow_sel[31] , \mprj_io_slow_sel[32] , \mprj_io_slow_sel[33] , \mprj_io_slow_sel[34] , \mprj_io_slow_sel[35] , \mprj_io_slow_sel[36] , \mprj_io_slow_sel[37] , \mprj_io_holdover[0] , \mprj_io_holdover[1] , \mprj_io_holdover[2] , \mprj_io_holdover[3] , \mprj_io_holdover[4] , \mprj_io_holdover[5] , \mprj_io_holdover[6] , \mprj_io_holdover[7] , \mprj_io_holdover[8] , \mprj_io_holdover[9] , \mprj_io_holdover[10] , \mprj_io_holdover[11] , \mprj_io_holdover[12] , \mprj_io_holdover[13] , \mprj_io_holdover[14] , \mprj_io_holdover[15] , \mprj_io_holdover[16] , \mprj_io_holdover[17] , \mprj_io_holdover[18] , \mprj_io_holdover[19] , \mprj_io_holdover[20] , \mprj_io_holdover[21] , \mprj_io_holdover[22] , \mprj_io_holdover[23] , \mprj_io_holdover[24] , \mprj_io_holdover[25] , \mprj_io_holdover[26] , \mprj_io_holdover[27] , \mprj_io_holdover[28] , \mprj_io_holdover[29] , \mprj_io_holdover[30] , \mprj_io_holdover[31] , \mprj_io_holdover[32] , \mprj_io_holdover[33] , \mprj_io_holdover[34] , \mprj_io_holdover[35] , \mprj_io_holdover[36] , \mprj_io_holdover[37] , \mprj_io_analog_en[0] , \mprj_io_analog_en[1] , \mprj_io_analog_en[2] , \mprj_io_analog_en[3] , \mprj_io_analog_en[4] , \mprj_io_analog_en[5] , \mprj_io_analog_en[6] , \mprj_io_analog_en[7] , \mprj_io_analog_en[8] , \mprj_io_analog_en[9] , \mprj_io_analog_en[10] , \mprj_io_analog_en[11] , \mprj_io_analog_en[12] , \mprj_io_analog_en[13] , \mprj_io_analog_en[14] , \mprj_io_analog_en[15] , \mprj_io_analog_en[16] , \mprj_io_analog_en[17] , \mprj_io_analog_en[18] , \mprj_io_analog_en[19] , \mprj_io_analog_en[20] , \mprj_io_analog_en[21] , \mprj_io_analog_en[22] , \mprj_io_analog_en[23] , \mprj_io_analog_en[24] , \mprj_io_analog_en[25] , \mprj_io_analog_en[26] , \mprj_io_analog_en[27] , \mprj_io_analog_en[28] , \mprj_io_analog_en[29] , \mprj_io_analog_en[30] , \mprj_io_analog_en[31] , \mprj_io_analog_en[32] , \mprj_io_analog_en[33] , \mprj_io_analog_en[34] , \mprj_io_analog_en[35] , \mprj_io_analog_en[36] , \mprj_io_analog_en[37] , \mprj_io_analog_sel[0] , \mprj_io_analog_sel[1] , \mprj_io_analog_sel[2] , \mprj_io_analog_sel[3] , \mprj_io_analog_sel[4] , \mprj_io_analog_sel[5] , \mprj_io_analog_sel[6] , \mprj_io_analog_sel[7] , \mprj_io_analog_sel[8] , \mprj_io_analog_sel[9] , \mprj_io_analog_sel[10] , \mprj_io_analog_sel[11] , \mprj_io_analog_sel[12] , \mprj_io_analog_sel[13] , \mprj_io_analog_sel[14] , \mprj_io_analog_sel[15] , \mprj_io_analog_sel[16] , \mprj_io_analog_sel[17] , \mprj_io_analog_sel[18] , \mprj_io_analog_sel[19] , \mprj_io_analog_sel[20] , \mprj_io_analog_sel[21] , \mprj_io_analog_sel[22] , \mprj_io_analog_sel[23] , \mprj_io_analog_sel[24] , \mprj_io_analog_sel[25] , \mprj_io_analog_sel[26] , \mprj_io_analog_sel[27] , \mprj_io_analog_sel[28] , \mprj_io_analog_sel[29] , \mprj_io_analog_sel[30] , \mprj_io_analog_sel[31] , \mprj_io_analog_sel[32] , \mprj_io_analog_sel[33] , \mprj_io_analog_sel[34] , \mprj_io_analog_sel[35] , \mprj_io_analog_sel[36] , \mprj_io_analog_sel[37] , \mprj_io_analog_pol[0] , \mprj_io_analog_pol[1] , \mprj_io_analog_pol[2] , \mprj_io_analog_pol[3] , \mprj_io_analog_pol[4] , \mprj_io_analog_pol[5] , \mprj_io_analog_pol[6] , \mprj_io_analog_pol[7] , \mprj_io_analog_pol[8] , \mprj_io_analog_pol[9] , \mprj_io_analog_pol[10] , \mprj_io_analog_pol[11] , \mprj_io_analog_pol[12] , \mprj_io_analog_pol[13] , \mprj_io_analog_pol[14] , \mprj_io_analog_pol[15] , \mprj_io_analog_pol[16] , \mprj_io_analog_pol[17] , \mprj_io_analog_pol[18] , \mprj_io_analog_pol[19] , \mprj_io_analog_pol[20] , \mprj_io_analog_pol[21] , \mprj_io_analog_pol[22] , \mprj_io_analog_pol[23] , \mprj_io_analog_pol[24] , \mprj_io_analog_pol[25] , \mprj_io_analog_pol[26] , \mprj_io_analog_pol[27] , \mprj_io_analog_pol[28] , \mprj_io_analog_pol[29] , \mprj_io_analog_pol[30] , \mprj_io_analog_pol[31] , \mprj_io_analog_pol[32] , \mprj_io_analog_pol[33] , \mprj_io_analog_pol[34] , \mprj_io_analog_pol[35] , \mprj_io_analog_pol[36] , \mprj_io_analog_pol[37] , \mprj_io_dm[0] , \mprj_io_dm[1] , \mprj_io_dm[2] , \mprj_io_dm[3] , \mprj_io_dm[4] , \mprj_io_dm[5] , \mprj_io_dm[6] , \mprj_io_dm[7] , \mprj_io_dm[8] , \mprj_io_dm[9] , \mprj_io_dm[10] , \mprj_io_dm[11] , \mprj_io_dm[12] , \mprj_io_dm[13] , \mprj_io_dm[14] , \mprj_io_dm[15] , \mprj_io_dm[16] , \mprj_io_dm[17] , \mprj_io_dm[18] , \mprj_io_dm[19] , \mprj_io_dm[20] , \mprj_io_dm[21] , \mprj_io_dm[22] , \mprj_io_dm[23] , \mprj_io_dm[24] , \mprj_io_dm[25] , \mprj_io_dm[26] , \mprj_io_dm[27] , \mprj_io_dm[28] , \mprj_io_dm[29] , \mprj_io_dm[30] , \mprj_io_dm[31] , \mprj_io_dm[32] , \mprj_io_dm[33] , \mprj_io_dm[34] , \mprj_io_dm[35] , \mprj_io_dm[36] , \mprj_io_dm[37] , \mprj_io_dm[38] , \mprj_io_dm[39] , \mprj_io_dm[40] , \mprj_io_dm[41] , \mprj_io_dm[42] , \mprj_io_dm[43] , \mprj_io_dm[44] , \mprj_io_dm[45] , \mprj_io_dm[46] , \mprj_io_dm[47] , \mprj_io_dm[48] , \mprj_io_dm[49] , \mprj_io_dm[50] , \mprj_io_dm[51] , \mprj_io_dm[52] , \mprj_io_dm[53] , \mprj_io_dm[54] , \mprj_io_dm[55] , \mprj_io_dm[56] , \mprj_io_dm[57] , \mprj_io_dm[58] , \mprj_io_dm[59] , \mprj_io_dm[60] , \mprj_io_dm[61] , \mprj_io_dm[62] , \mprj_io_dm[63] , \mprj_io_dm[64] , \mprj_io_dm[65] , \mprj_io_dm[66] , \mprj_io_dm[67] , \mprj_io_dm[68] , \mprj_io_dm[69] , \mprj_io_dm[70] , \mprj_io_dm[71] , \mprj_io_dm[72] , \mprj_io_dm[73] , \mprj_io_dm[74] , \mprj_io_dm[75] , \mprj_io_dm[76] , \mprj_io_dm[77] , \mprj_io_dm[78] , \mprj_io_dm[79] , \mprj_io_dm[80] , \mprj_io_dm[81] , \mprj_io_dm[82] , \mprj_io_dm[83] , \mprj_io_dm[84] , \mprj_io_dm[85] , \mprj_io_dm[86] , \mprj_io_dm[87] , \mprj_io_dm[88] , \mprj_io_dm[89] , \mprj_io_dm[90] , \mprj_io_dm[91] , \mprj_io_dm[92] , \mprj_io_dm[93] , \mprj_io_dm[94] , \mprj_io_dm[95] , \mprj_io_dm[96] , \mprj_io_dm[97] , \mprj_io_dm[98] , \mprj_io_dm[99] , \mprj_io_dm[100] , \mprj_io_dm[101] , \mprj_io_dm[102] , \mprj_io_dm[103] , \mprj_io_dm[104] , \mprj_io_dm[105] , \mprj_io_dm[106] , \mprj_io_dm[107] , \mprj_io_dm[108] , \mprj_io_dm[109] , \mprj_io_dm[110] , \mprj_io_dm[111] , \mprj_io_dm[112] , \mprj_io_dm[113] , \mprj_io_in[0] , \mprj_io_in[1] , \mprj_io_in[2] , \mprj_io_in[3] , \mprj_io_in[4] , \mprj_io_in[5] , \mprj_io_in[6] , \mprj_io_in[7] , \mprj_io_in[8] , \mprj_io_in[9] , \mprj_io_in[10] , \mprj_io_in[11] , \mprj_io_in[12] , \mprj_io_in[13] , \mprj_io_in[14] , \mprj_io_in[15] , \mprj_io_in[16] , \mprj_io_in[17] , \mprj_io_in[18] , \mprj_io_in[19] , \mprj_io_in[20] , \mprj_io_in[21] , \mprj_io_in[22] , \mprj_io_in[23] , \mprj_io_in[24] , \mprj_io_in[25] , \mprj_io_in[26] , \mprj_io_in[27] , \mprj_io_in[28] , \mprj_io_in[29] , \mprj_io_in[30] , \mprj_io_in[31] , \mprj_io_in[32] , \mprj_io_in[33] , \mprj_io_in[34] , \mprj_io_in[35] , \mprj_io_in[36] , \mprj_io_in[37] , \mprj_analog_io[0] , \mprj_analog_io[1] , \mprj_analog_io[2] , \mprj_analog_io[3] , \mprj_analog_io[4] , \mprj_analog_io[5] , \mprj_analog_io[6] , \mprj_analog_io[7] , \mprj_analog_io[8] , \mprj_analog_io[9] , \mprj_analog_io[10] , \mprj_analog_io[11] , \mprj_analog_io[12] , \mprj_analog_io[13] , \mprj_analog_io[14] , \mprj_analog_io[15] , \mprj_analog_io[16] , \mprj_analog_io[17] , \mprj_analog_io[18] , \mprj_analog_io[19] , \mprj_analog_io[20] , \mprj_analog_io[21] , \mprj_analog_io[22] , \mprj_analog_io[23] , \mprj_analog_io[24] , \mprj_analog_io[25] , \mprj_analog_io[26] , \mprj_analog_io[27] , \mprj_analog_io[28] , \mprj_analog_io[29] , \mprj_analog_io[30] );
-  wire analog_a;
-  wire analog_b;
-  input clock;
-  output clock_core;
-  wire \dm_all[0] ;
-  wire \dm_all[1] ;
-  wire \dm_all[2] ;
-  output flash_clk;
-  input flash_clk_core;
-  input flash_clk_ieb_core;
-  input flash_clk_oeb_core;
-  output flash_csb;
-  input flash_csb_core;
-  input flash_csb_ieb_core;
-  input flash_csb_oeb_core;
-  inout flash_io0;
-  output flash_io0_di_core;
-  input flash_io0_do_core;
-  input flash_io0_ieb_core;
-  wire \flash_io0_mode[0] ;
-  wire \flash_io0_mode[1] ;
-  wire \flash_io0_mode[2] ;
-  input flash_io0_oeb_core;
-  inout flash_io1;
-  output flash_io1_di_core;
-  input flash_io1_do_core;
-  input flash_io1_ieb_core;
-  wire \flash_io1_mode[0] ;
-  wire \flash_io1_mode[1] ;
-  wire \flash_io1_mode[2] ;
-  input flash_io1_oeb_core;
-  inout gpio;
-  output gpio_in_core;
-  input gpio_inenb_core;
-  input gpio_mode0_core;
-  input gpio_mode1_core;
-  input gpio_out_core;
-  input gpio_outenb_core;
-  wire loop_clock;
-  wire loop_flash_clk;
-  wire loop_flash_csb;
-  wire loop_flash_io0;
-  wire loop_flash_io1;
-  wire loop_gpio;
-  inout \mprj_analog_io[0] ;
-  inout \mprj_analog_io[10] ;
-  inout \mprj_analog_io[11] ;
-  inout \mprj_analog_io[12] ;
-  inout \mprj_analog_io[13] ;
-  inout \mprj_analog_io[14] ;
-  inout \mprj_analog_io[15] ;
-  inout \mprj_analog_io[16] ;
-  inout \mprj_analog_io[17] ;
-  inout \mprj_analog_io[18] ;
-  inout \mprj_analog_io[19] ;
-  inout \mprj_analog_io[1] ;
-  inout \mprj_analog_io[20] ;
-  inout \mprj_analog_io[21] ;
-  inout \mprj_analog_io[22] ;
-  inout \mprj_analog_io[23] ;
-  inout \mprj_analog_io[24] ;
-  inout \mprj_analog_io[25] ;
-  inout \mprj_analog_io[26] ;
-  inout \mprj_analog_io[27] ;
-  inout \mprj_analog_io[28] ;
-  inout \mprj_analog_io[29] ;
-  inout \mprj_analog_io[2] ;
-  inout \mprj_analog_io[30] ;
-  inout \mprj_analog_io[3] ;
-  inout \mprj_analog_io[4] ;
-  inout \mprj_analog_io[5] ;
-  inout \mprj_analog_io[6] ;
-  inout \mprj_analog_io[7] ;
-  inout \mprj_analog_io[8] ;
-  inout \mprj_analog_io[9] ;
-  inout \mprj_io[0] ;
-  inout \mprj_io[10] ;
-  inout \mprj_io[11] ;
-  inout \mprj_io[12] ;
-  inout \mprj_io[13] ;
-  inout \mprj_io[14] ;
-  inout \mprj_io[15] ;
-  inout \mprj_io[16] ;
-  inout \mprj_io[17] ;
-  inout \mprj_io[18] ;
-  inout \mprj_io[19] ;
-  inout \mprj_io[1] ;
-  inout \mprj_io[20] ;
-  inout \mprj_io[21] ;
-  inout \mprj_io[22] ;
-  inout \mprj_io[23] ;
-  inout \mprj_io[24] ;
-  inout \mprj_io[25] ;
-  inout \mprj_io[26] ;
-  inout \mprj_io[27] ;
-  inout \mprj_io[28] ;
-  inout \mprj_io[29] ;
-  inout \mprj_io[2] ;
-  inout \mprj_io[30] ;
-  inout \mprj_io[31] ;
-  inout \mprj_io[32] ;
-  inout \mprj_io[33] ;
-  inout \mprj_io[34] ;
-  inout \mprj_io[35] ;
-  inout \mprj_io[36] ;
-  inout \mprj_io[37] ;
-  inout \mprj_io[3] ;
-  inout \mprj_io[4] ;
-  inout \mprj_io[5] ;
-  inout \mprj_io[6] ;
-  inout \mprj_io[7] ;
-  inout \mprj_io[8] ;
-  inout \mprj_io[9] ;
-  input \mprj_io_analog_en[0] ;
-  input \mprj_io_analog_en[10] ;
-  input \mprj_io_analog_en[11] ;
-  input \mprj_io_analog_en[12] ;
-  input \mprj_io_analog_en[13] ;
-  input \mprj_io_analog_en[14] ;
-  input \mprj_io_analog_en[15] ;
-  input \mprj_io_analog_en[16] ;
-  input \mprj_io_analog_en[17] ;
-  input \mprj_io_analog_en[18] ;
-  input \mprj_io_analog_en[19] ;
-  input \mprj_io_analog_en[1] ;
-  input \mprj_io_analog_en[20] ;
-  input \mprj_io_analog_en[21] ;
-  input \mprj_io_analog_en[22] ;
-  input \mprj_io_analog_en[23] ;
-  input \mprj_io_analog_en[24] ;
-  input \mprj_io_analog_en[25] ;
-  input \mprj_io_analog_en[26] ;
-  input \mprj_io_analog_en[27] ;
-  input \mprj_io_analog_en[28] ;
-  input \mprj_io_analog_en[29] ;
-  input \mprj_io_analog_en[2] ;
-  input \mprj_io_analog_en[30] ;
-  input \mprj_io_analog_en[31] ;
-  input \mprj_io_analog_en[32] ;
-  input \mprj_io_analog_en[33] ;
-  input \mprj_io_analog_en[34] ;
-  input \mprj_io_analog_en[35] ;
-  input \mprj_io_analog_en[36] ;
-  input \mprj_io_analog_en[37] ;
-  input \mprj_io_analog_en[3] ;
-  input \mprj_io_analog_en[4] ;
-  input \mprj_io_analog_en[5] ;
-  input \mprj_io_analog_en[6] ;
-  input \mprj_io_analog_en[7] ;
-  input \mprj_io_analog_en[8] ;
-  input \mprj_io_analog_en[9] ;
-  input \mprj_io_analog_pol[0] ;
-  input \mprj_io_analog_pol[10] ;
-  input \mprj_io_analog_pol[11] ;
-  input \mprj_io_analog_pol[12] ;
-  input \mprj_io_analog_pol[13] ;
-  input \mprj_io_analog_pol[14] ;
-  input \mprj_io_analog_pol[15] ;
-  input \mprj_io_analog_pol[16] ;
-  input \mprj_io_analog_pol[17] ;
-  input \mprj_io_analog_pol[18] ;
-  input \mprj_io_analog_pol[19] ;
-  input \mprj_io_analog_pol[1] ;
-  input \mprj_io_analog_pol[20] ;
-  input \mprj_io_analog_pol[21] ;
-  input \mprj_io_analog_pol[22] ;
-  input \mprj_io_analog_pol[23] ;
-  input \mprj_io_analog_pol[24] ;
-  input \mprj_io_analog_pol[25] ;
-  input \mprj_io_analog_pol[26] ;
-  input \mprj_io_analog_pol[27] ;
-  input \mprj_io_analog_pol[28] ;
-  input \mprj_io_analog_pol[29] ;
-  input \mprj_io_analog_pol[2] ;
-  input \mprj_io_analog_pol[30] ;
-  input \mprj_io_analog_pol[31] ;
-  input \mprj_io_analog_pol[32] ;
-  input \mprj_io_analog_pol[33] ;
-  input \mprj_io_analog_pol[34] ;
-  input \mprj_io_analog_pol[35] ;
-  input \mprj_io_analog_pol[36] ;
-  input \mprj_io_analog_pol[37] ;
-  input \mprj_io_analog_pol[3] ;
-  input \mprj_io_analog_pol[4] ;
-  input \mprj_io_analog_pol[5] ;
-  input \mprj_io_analog_pol[6] ;
-  input \mprj_io_analog_pol[7] ;
-  input \mprj_io_analog_pol[8] ;
-  input \mprj_io_analog_pol[9] ;
-  input \mprj_io_analog_sel[0] ;
-  input \mprj_io_analog_sel[10] ;
-  input \mprj_io_analog_sel[11] ;
-  input \mprj_io_analog_sel[12] ;
-  input \mprj_io_analog_sel[13] ;
-  input \mprj_io_analog_sel[14] ;
-  input \mprj_io_analog_sel[15] ;
-  input \mprj_io_analog_sel[16] ;
-  input \mprj_io_analog_sel[17] ;
-  input \mprj_io_analog_sel[18] ;
-  input \mprj_io_analog_sel[19] ;
-  input \mprj_io_analog_sel[1] ;
-  input \mprj_io_analog_sel[20] ;
-  input \mprj_io_analog_sel[21] ;
-  input \mprj_io_analog_sel[22] ;
-  input \mprj_io_analog_sel[23] ;
-  input \mprj_io_analog_sel[24] ;
-  input \mprj_io_analog_sel[25] ;
-  input \mprj_io_analog_sel[26] ;
-  input \mprj_io_analog_sel[27] ;
-  input \mprj_io_analog_sel[28] ;
-  input \mprj_io_analog_sel[29] ;
-  input \mprj_io_analog_sel[2] ;
-  input \mprj_io_analog_sel[30] ;
-  input \mprj_io_analog_sel[31] ;
-  input \mprj_io_analog_sel[32] ;
-  input \mprj_io_analog_sel[33] ;
-  input \mprj_io_analog_sel[34] ;
-  input \mprj_io_analog_sel[35] ;
-  input \mprj_io_analog_sel[36] ;
-  input \mprj_io_analog_sel[37] ;
-  input \mprj_io_analog_sel[3] ;
-  input \mprj_io_analog_sel[4] ;
-  input \mprj_io_analog_sel[5] ;
-  input \mprj_io_analog_sel[6] ;
-  input \mprj_io_analog_sel[7] ;
-  input \mprj_io_analog_sel[8] ;
-  input \mprj_io_analog_sel[9] ;
-  input \mprj_io_dm[0] ;
-  input \mprj_io_dm[100] ;
-  input \mprj_io_dm[101] ;
-  input \mprj_io_dm[102] ;
-  input \mprj_io_dm[103] ;
-  input \mprj_io_dm[104] ;
-  input \mprj_io_dm[105] ;
-  input \mprj_io_dm[106] ;
-  input \mprj_io_dm[107] ;
-  input \mprj_io_dm[108] ;
-  input \mprj_io_dm[109] ;
-  input \mprj_io_dm[10] ;
-  input \mprj_io_dm[110] ;
-  input \mprj_io_dm[111] ;
-  input \mprj_io_dm[112] ;
-  input \mprj_io_dm[113] ;
-  input \mprj_io_dm[11] ;
-  input \mprj_io_dm[12] ;
-  input \mprj_io_dm[13] ;
-  input \mprj_io_dm[14] ;
-  input \mprj_io_dm[15] ;
-  input \mprj_io_dm[16] ;
-  input \mprj_io_dm[17] ;
-  input \mprj_io_dm[18] ;
-  input \mprj_io_dm[19] ;
-  input \mprj_io_dm[1] ;
-  input \mprj_io_dm[20] ;
-  input \mprj_io_dm[21] ;
-  input \mprj_io_dm[22] ;
-  input \mprj_io_dm[23] ;
-  input \mprj_io_dm[24] ;
-  input \mprj_io_dm[25] ;
-  input \mprj_io_dm[26] ;
-  input \mprj_io_dm[27] ;
-  input \mprj_io_dm[28] ;
-  input \mprj_io_dm[29] ;
-  input \mprj_io_dm[2] ;
-  input \mprj_io_dm[30] ;
-  input \mprj_io_dm[31] ;
-  input \mprj_io_dm[32] ;
-  input \mprj_io_dm[33] ;
-  input \mprj_io_dm[34] ;
-  input \mprj_io_dm[35] ;
-  input \mprj_io_dm[36] ;
-  input \mprj_io_dm[37] ;
-  input \mprj_io_dm[38] ;
-  input \mprj_io_dm[39] ;
-  input \mprj_io_dm[3] ;
-  input \mprj_io_dm[40] ;
-  input \mprj_io_dm[41] ;
-  input \mprj_io_dm[42] ;
-  input \mprj_io_dm[43] ;
-  input \mprj_io_dm[44] ;
-  input \mprj_io_dm[45] ;
-  input \mprj_io_dm[46] ;
-  input \mprj_io_dm[47] ;
-  input \mprj_io_dm[48] ;
-  input \mprj_io_dm[49] ;
-  input \mprj_io_dm[4] ;
-  input \mprj_io_dm[50] ;
-  input \mprj_io_dm[51] ;
-  input \mprj_io_dm[52] ;
-  input \mprj_io_dm[53] ;
-  input \mprj_io_dm[54] ;
-  input \mprj_io_dm[55] ;
-  input \mprj_io_dm[56] ;
-  input \mprj_io_dm[57] ;
-  input \mprj_io_dm[58] ;
-  input \mprj_io_dm[59] ;
-  input \mprj_io_dm[5] ;
-  input \mprj_io_dm[60] ;
-  input \mprj_io_dm[61] ;
-  input \mprj_io_dm[62] ;
-  input \mprj_io_dm[63] ;
-  input \mprj_io_dm[64] ;
-  input \mprj_io_dm[65] ;
-  input \mprj_io_dm[66] ;
-  input \mprj_io_dm[67] ;
-  input \mprj_io_dm[68] ;
-  input \mprj_io_dm[69] ;
-  input \mprj_io_dm[6] ;
-  input \mprj_io_dm[70] ;
-  input \mprj_io_dm[71] ;
-  input \mprj_io_dm[72] ;
-  input \mprj_io_dm[73] ;
-  input \mprj_io_dm[74] ;
-  input \mprj_io_dm[75] ;
-  input \mprj_io_dm[76] ;
-  input \mprj_io_dm[77] ;
-  input \mprj_io_dm[78] ;
-  input \mprj_io_dm[79] ;
-  input \mprj_io_dm[7] ;
-  input \mprj_io_dm[80] ;
-  input \mprj_io_dm[81] ;
-  input \mprj_io_dm[82] ;
-  input \mprj_io_dm[83] ;
-  input \mprj_io_dm[84] ;
-  input \mprj_io_dm[85] ;
-  input \mprj_io_dm[86] ;
-  input \mprj_io_dm[87] ;
-  input \mprj_io_dm[88] ;
-  input \mprj_io_dm[89] ;
-  input \mprj_io_dm[8] ;
-  input \mprj_io_dm[90] ;
-  input \mprj_io_dm[91] ;
-  input \mprj_io_dm[92] ;
-  input \mprj_io_dm[93] ;
-  input \mprj_io_dm[94] ;
-  input \mprj_io_dm[95] ;
-  input \mprj_io_dm[96] ;
-  input \mprj_io_dm[97] ;
-  input \mprj_io_dm[98] ;
-  input \mprj_io_dm[99] ;
-  input \mprj_io_dm[9] ;
-  input \mprj_io_enh[0] ;
-  input \mprj_io_enh[10] ;
-  input \mprj_io_enh[11] ;
-  input \mprj_io_enh[12] ;
-  input \mprj_io_enh[13] ;
-  input \mprj_io_enh[14] ;
-  input \mprj_io_enh[15] ;
-  input \mprj_io_enh[16] ;
-  input \mprj_io_enh[17] ;
-  input \mprj_io_enh[18] ;
-  input \mprj_io_enh[19] ;
-  input \mprj_io_enh[1] ;
-  input \mprj_io_enh[20] ;
-  input \mprj_io_enh[21] ;
-  input \mprj_io_enh[22] ;
-  input \mprj_io_enh[23] ;
-  input \mprj_io_enh[24] ;
-  input \mprj_io_enh[25] ;
-  input \mprj_io_enh[26] ;
-  input \mprj_io_enh[27] ;
-  input \mprj_io_enh[28] ;
-  input \mprj_io_enh[29] ;
-  input \mprj_io_enh[2] ;
-  input \mprj_io_enh[30] ;
-  input \mprj_io_enh[31] ;
-  input \mprj_io_enh[32] ;
-  input \mprj_io_enh[33] ;
-  input \mprj_io_enh[34] ;
-  input \mprj_io_enh[35] ;
-  input \mprj_io_enh[36] ;
-  input \mprj_io_enh[37] ;
-  input \mprj_io_enh[3] ;
-  input \mprj_io_enh[4] ;
-  input \mprj_io_enh[5] ;
-  input \mprj_io_enh[6] ;
-  input \mprj_io_enh[7] ;
-  input \mprj_io_enh[8] ;
-  input \mprj_io_enh[9] ;
-  input \mprj_io_hldh_n[0] ;
-  input \mprj_io_hldh_n[10] ;
-  input \mprj_io_hldh_n[11] ;
-  input \mprj_io_hldh_n[12] ;
-  input \mprj_io_hldh_n[13] ;
-  input \mprj_io_hldh_n[14] ;
-  input \mprj_io_hldh_n[15] ;
-  input \mprj_io_hldh_n[16] ;
-  input \mprj_io_hldh_n[17] ;
-  input \mprj_io_hldh_n[18] ;
-  input \mprj_io_hldh_n[19] ;
-  input \mprj_io_hldh_n[1] ;
-  input \mprj_io_hldh_n[20] ;
-  input \mprj_io_hldh_n[21] ;
-  input \mprj_io_hldh_n[22] ;
-  input \mprj_io_hldh_n[23] ;
-  input \mprj_io_hldh_n[24] ;
-  input \mprj_io_hldh_n[25] ;
-  input \mprj_io_hldh_n[26] ;
-  input \mprj_io_hldh_n[27] ;
-  input \mprj_io_hldh_n[28] ;
-  input \mprj_io_hldh_n[29] ;
-  input \mprj_io_hldh_n[2] ;
-  input \mprj_io_hldh_n[30] ;
-  input \mprj_io_hldh_n[31] ;
-  input \mprj_io_hldh_n[32] ;
-  input \mprj_io_hldh_n[33] ;
-  input \mprj_io_hldh_n[34] ;
-  input \mprj_io_hldh_n[35] ;
-  input \mprj_io_hldh_n[36] ;
-  input \mprj_io_hldh_n[37] ;
-  input \mprj_io_hldh_n[3] ;
-  input \mprj_io_hldh_n[4] ;
-  input \mprj_io_hldh_n[5] ;
-  input \mprj_io_hldh_n[6] ;
-  input \mprj_io_hldh_n[7] ;
-  input \mprj_io_hldh_n[8] ;
-  input \mprj_io_hldh_n[9] ;
-  input \mprj_io_holdover[0] ;
-  input \mprj_io_holdover[10] ;
-  input \mprj_io_holdover[11] ;
-  input \mprj_io_holdover[12] ;
-  input \mprj_io_holdover[13] ;
-  input \mprj_io_holdover[14] ;
-  input \mprj_io_holdover[15] ;
-  input \mprj_io_holdover[16] ;
-  input \mprj_io_holdover[17] ;
-  input \mprj_io_holdover[18] ;
-  input \mprj_io_holdover[19] ;
-  input \mprj_io_holdover[1] ;
-  input \mprj_io_holdover[20] ;
-  input \mprj_io_holdover[21] ;
-  input \mprj_io_holdover[22] ;
-  input \mprj_io_holdover[23] ;
-  input \mprj_io_holdover[24] ;
-  input \mprj_io_holdover[25] ;
-  input \mprj_io_holdover[26] ;
-  input \mprj_io_holdover[27] ;
-  input \mprj_io_holdover[28] ;
-  input \mprj_io_holdover[29] ;
-  input \mprj_io_holdover[2] ;
-  input \mprj_io_holdover[30] ;
-  input \mprj_io_holdover[31] ;
-  input \mprj_io_holdover[32] ;
-  input \mprj_io_holdover[33] ;
-  input \mprj_io_holdover[34] ;
-  input \mprj_io_holdover[35] ;
-  input \mprj_io_holdover[36] ;
-  input \mprj_io_holdover[37] ;
-  input \mprj_io_holdover[3] ;
-  input \mprj_io_holdover[4] ;
-  input \mprj_io_holdover[5] ;
-  input \mprj_io_holdover[6] ;
-  input \mprj_io_holdover[7] ;
-  input \mprj_io_holdover[8] ;
-  input \mprj_io_holdover[9] ;
-  input \mprj_io_ib_mode_sel[0] ;
-  input \mprj_io_ib_mode_sel[10] ;
-  input \mprj_io_ib_mode_sel[11] ;
-  input \mprj_io_ib_mode_sel[12] ;
-  input \mprj_io_ib_mode_sel[13] ;
-  input \mprj_io_ib_mode_sel[14] ;
-  input \mprj_io_ib_mode_sel[15] ;
-  input \mprj_io_ib_mode_sel[16] ;
-  input \mprj_io_ib_mode_sel[17] ;
-  input \mprj_io_ib_mode_sel[18] ;
-  input \mprj_io_ib_mode_sel[19] ;
-  input \mprj_io_ib_mode_sel[1] ;
-  input \mprj_io_ib_mode_sel[20] ;
-  input \mprj_io_ib_mode_sel[21] ;
-  input \mprj_io_ib_mode_sel[22] ;
-  input \mprj_io_ib_mode_sel[23] ;
-  input \mprj_io_ib_mode_sel[24] ;
-  input \mprj_io_ib_mode_sel[25] ;
-  input \mprj_io_ib_mode_sel[26] ;
-  input \mprj_io_ib_mode_sel[27] ;
-  input \mprj_io_ib_mode_sel[28] ;
-  input \mprj_io_ib_mode_sel[29] ;
-  input \mprj_io_ib_mode_sel[2] ;
-  input \mprj_io_ib_mode_sel[30] ;
-  input \mprj_io_ib_mode_sel[31] ;
-  input \mprj_io_ib_mode_sel[32] ;
-  input \mprj_io_ib_mode_sel[33] ;
-  input \mprj_io_ib_mode_sel[34] ;
-  input \mprj_io_ib_mode_sel[35] ;
-  input \mprj_io_ib_mode_sel[36] ;
-  input \mprj_io_ib_mode_sel[37] ;
-  input \mprj_io_ib_mode_sel[3] ;
-  input \mprj_io_ib_mode_sel[4] ;
-  input \mprj_io_ib_mode_sel[5] ;
-  input \mprj_io_ib_mode_sel[6] ;
-  input \mprj_io_ib_mode_sel[7] ;
-  input \mprj_io_ib_mode_sel[8] ;
-  input \mprj_io_ib_mode_sel[9] ;
-  output \mprj_io_in[0] ;
-  output \mprj_io_in[10] ;
-  output \mprj_io_in[11] ;
-  output \mprj_io_in[12] ;
-  output \mprj_io_in[13] ;
-  output \mprj_io_in[14] ;
-  output \mprj_io_in[15] ;
-  output \mprj_io_in[16] ;
-  output \mprj_io_in[17] ;
-  output \mprj_io_in[18] ;
-  output \mprj_io_in[19] ;
-  output \mprj_io_in[1] ;
-  output \mprj_io_in[20] ;
-  output \mprj_io_in[21] ;
-  output \mprj_io_in[22] ;
-  output \mprj_io_in[23] ;
-  output \mprj_io_in[24] ;
-  output \mprj_io_in[25] ;
-  output \mprj_io_in[26] ;
-  output \mprj_io_in[27] ;
-  output \mprj_io_in[28] ;
-  output \mprj_io_in[29] ;
-  output \mprj_io_in[2] ;
-  output \mprj_io_in[30] ;
-  output \mprj_io_in[31] ;
-  output \mprj_io_in[32] ;
-  output \mprj_io_in[33] ;
-  output \mprj_io_in[34] ;
-  output \mprj_io_in[35] ;
-  output \mprj_io_in[36] ;
-  output \mprj_io_in[37] ;
-  output \mprj_io_in[3] ;
-  output \mprj_io_in[4] ;
-  output \mprj_io_in[5] ;
-  output \mprj_io_in[6] ;
-  output \mprj_io_in[7] ;
-  output \mprj_io_in[8] ;
-  output \mprj_io_in[9] ;
-  input \mprj_io_inp_dis[0] ;
-  input \mprj_io_inp_dis[10] ;
-  input \mprj_io_inp_dis[11] ;
-  input \mprj_io_inp_dis[12] ;
-  input \mprj_io_inp_dis[13] ;
-  input \mprj_io_inp_dis[14] ;
-  input \mprj_io_inp_dis[15] ;
-  input \mprj_io_inp_dis[16] ;
-  input \mprj_io_inp_dis[17] ;
-  input \mprj_io_inp_dis[18] ;
-  input \mprj_io_inp_dis[19] ;
-  input \mprj_io_inp_dis[1] ;
-  input \mprj_io_inp_dis[20] ;
-  input \mprj_io_inp_dis[21] ;
-  input \mprj_io_inp_dis[22] ;
-  input \mprj_io_inp_dis[23] ;
-  input \mprj_io_inp_dis[24] ;
-  input \mprj_io_inp_dis[25] ;
-  input \mprj_io_inp_dis[26] ;
-  input \mprj_io_inp_dis[27] ;
-  input \mprj_io_inp_dis[28] ;
-  input \mprj_io_inp_dis[29] ;
-  input \mprj_io_inp_dis[2] ;
-  input \mprj_io_inp_dis[30] ;
-  input \mprj_io_inp_dis[31] ;
-  input \mprj_io_inp_dis[32] ;
-  input \mprj_io_inp_dis[33] ;
-  input \mprj_io_inp_dis[34] ;
-  input \mprj_io_inp_dis[35] ;
-  input \mprj_io_inp_dis[36] ;
-  input \mprj_io_inp_dis[37] ;
-  input \mprj_io_inp_dis[3] ;
-  input \mprj_io_inp_dis[4] ;
-  input \mprj_io_inp_dis[5] ;
-  input \mprj_io_inp_dis[6] ;
-  input \mprj_io_inp_dis[7] ;
-  input \mprj_io_inp_dis[8] ;
-  input \mprj_io_inp_dis[9] ;
-  input \mprj_io_oeb[0] ;
-  input \mprj_io_oeb[10] ;
-  input \mprj_io_oeb[11] ;
-  input \mprj_io_oeb[12] ;
-  input \mprj_io_oeb[13] ;
-  input \mprj_io_oeb[14] ;
-  input \mprj_io_oeb[15] ;
-  input \mprj_io_oeb[16] ;
-  input \mprj_io_oeb[17] ;
-  input \mprj_io_oeb[18] ;
-  input \mprj_io_oeb[19] ;
-  input \mprj_io_oeb[1] ;
-  input \mprj_io_oeb[20] ;
-  input \mprj_io_oeb[21] ;
-  input \mprj_io_oeb[22] ;
-  input \mprj_io_oeb[23] ;
-  input \mprj_io_oeb[24] ;
-  input \mprj_io_oeb[25] ;
-  input \mprj_io_oeb[26] ;
-  input \mprj_io_oeb[27] ;
-  input \mprj_io_oeb[28] ;
-  input \mprj_io_oeb[29] ;
-  input \mprj_io_oeb[2] ;
-  input \mprj_io_oeb[30] ;
-  input \mprj_io_oeb[31] ;
-  input \mprj_io_oeb[32] ;
-  input \mprj_io_oeb[33] ;
-  input \mprj_io_oeb[34] ;
-  input \mprj_io_oeb[35] ;
-  input \mprj_io_oeb[36] ;
-  input \mprj_io_oeb[37] ;
-  input \mprj_io_oeb[3] ;
-  input \mprj_io_oeb[4] ;
-  input \mprj_io_oeb[5] ;
-  input \mprj_io_oeb[6] ;
-  input \mprj_io_oeb[7] ;
-  input \mprj_io_oeb[8] ;
-  input \mprj_io_oeb[9] ;
-  input \mprj_io_out[0] ;
-  input \mprj_io_out[10] ;
-  input \mprj_io_out[11] ;
-  input \mprj_io_out[12] ;
-  input \mprj_io_out[13] ;
-  input \mprj_io_out[14] ;
-  input \mprj_io_out[15] ;
-  input \mprj_io_out[16] ;
-  input \mprj_io_out[17] ;
-  input \mprj_io_out[18] ;
-  input \mprj_io_out[19] ;
-  input \mprj_io_out[1] ;
-  input \mprj_io_out[20] ;
-  input \mprj_io_out[21] ;
-  input \mprj_io_out[22] ;
-  input \mprj_io_out[23] ;
-  input \mprj_io_out[24] ;
-  input \mprj_io_out[25] ;
-  input \mprj_io_out[26] ;
-  input \mprj_io_out[27] ;
-  input \mprj_io_out[28] ;
-  input \mprj_io_out[29] ;
-  input \mprj_io_out[2] ;
-  input \mprj_io_out[30] ;
-  input \mprj_io_out[31] ;
-  input \mprj_io_out[32] ;
-  input \mprj_io_out[33] ;
-  input \mprj_io_out[34] ;
-  input \mprj_io_out[35] ;
-  input \mprj_io_out[36] ;
-  input \mprj_io_out[37] ;
-  input \mprj_io_out[3] ;
-  input \mprj_io_out[4] ;
-  input \mprj_io_out[5] ;
-  input \mprj_io_out[6] ;
-  input \mprj_io_out[7] ;
-  input \mprj_io_out[8] ;
-  input \mprj_io_out[9] ;
-  input \mprj_io_slow_sel[0] ;
-  input \mprj_io_slow_sel[10] ;
-  input \mprj_io_slow_sel[11] ;
-  input \mprj_io_slow_sel[12] ;
-  input \mprj_io_slow_sel[13] ;
-  input \mprj_io_slow_sel[14] ;
-  input \mprj_io_slow_sel[15] ;
-  input \mprj_io_slow_sel[16] ;
-  input \mprj_io_slow_sel[17] ;
-  input \mprj_io_slow_sel[18] ;
-  input \mprj_io_slow_sel[19] ;
-  input \mprj_io_slow_sel[1] ;
-  input \mprj_io_slow_sel[20] ;
-  input \mprj_io_slow_sel[21] ;
-  input \mprj_io_slow_sel[22] ;
-  input \mprj_io_slow_sel[23] ;
-  input \mprj_io_slow_sel[24] ;
-  input \mprj_io_slow_sel[25] ;
-  input \mprj_io_slow_sel[26] ;
-  input \mprj_io_slow_sel[27] ;
-  input \mprj_io_slow_sel[28] ;
-  input \mprj_io_slow_sel[29] ;
-  input \mprj_io_slow_sel[2] ;
-  input \mprj_io_slow_sel[30] ;
-  input \mprj_io_slow_sel[31] ;
-  input \mprj_io_slow_sel[32] ;
-  input \mprj_io_slow_sel[33] ;
-  input \mprj_io_slow_sel[34] ;
-  input \mprj_io_slow_sel[35] ;
-  input \mprj_io_slow_sel[36] ;
-  input \mprj_io_slow_sel[37] ;
-  input \mprj_io_slow_sel[3] ;
-  input \mprj_io_slow_sel[4] ;
-  input \mprj_io_slow_sel[5] ;
-  input \mprj_io_slow_sel[6] ;
-  input \mprj_io_slow_sel[7] ;
-  input \mprj_io_slow_sel[8] ;
-  input \mprj_io_slow_sel[9] ;
-  input \mprj_io_vtrip_sel[0] ;
-  input \mprj_io_vtrip_sel[10] ;
-  input \mprj_io_vtrip_sel[11] ;
-  input \mprj_io_vtrip_sel[12] ;
-  input \mprj_io_vtrip_sel[13] ;
-  input \mprj_io_vtrip_sel[14] ;
-  input \mprj_io_vtrip_sel[15] ;
-  input \mprj_io_vtrip_sel[16] ;
-  input \mprj_io_vtrip_sel[17] ;
-  input \mprj_io_vtrip_sel[18] ;
-  input \mprj_io_vtrip_sel[19] ;
-  input \mprj_io_vtrip_sel[1] ;
-  input \mprj_io_vtrip_sel[20] ;
-  input \mprj_io_vtrip_sel[21] ;
-  input \mprj_io_vtrip_sel[22] ;
-  input \mprj_io_vtrip_sel[23] ;
-  input \mprj_io_vtrip_sel[24] ;
-  input \mprj_io_vtrip_sel[25] ;
-  input \mprj_io_vtrip_sel[26] ;
-  input \mprj_io_vtrip_sel[27] ;
-  input \mprj_io_vtrip_sel[28] ;
-  input \mprj_io_vtrip_sel[29] ;
-  input \mprj_io_vtrip_sel[2] ;
-  input \mprj_io_vtrip_sel[30] ;
-  input \mprj_io_vtrip_sel[31] ;
-  input \mprj_io_vtrip_sel[32] ;
-  input \mprj_io_vtrip_sel[33] ;
-  input \mprj_io_vtrip_sel[34] ;
-  input \mprj_io_vtrip_sel[35] ;
-  input \mprj_io_vtrip_sel[36] ;
-  input \mprj_io_vtrip_sel[37] ;
-  input \mprj_io_vtrip_sel[3] ;
-  input \mprj_io_vtrip_sel[4] ;
-  input \mprj_io_vtrip_sel[5] ;
-  input \mprj_io_vtrip_sel[6] ;
-  input \mprj_io_vtrip_sel[7] ;
-  input \mprj_io_vtrip_sel[8] ;
-  input \mprj_io_vtrip_sel[9] ;
-  wire \mprj_pads.analog_a ;
-  wire \mprj_pads.analog_b ;
-  wire \mprj_pads.analog_en[0] ;
-  wire \mprj_pads.analog_en[10] ;
-  wire \mprj_pads.analog_en[11] ;
-  wire \mprj_pads.analog_en[12] ;
-  wire \mprj_pads.analog_en[13] ;
-  wire \mprj_pads.analog_en[14] ;
-  wire \mprj_pads.analog_en[15] ;
-  wire \mprj_pads.analog_en[16] ;
-  wire \mprj_pads.analog_en[17] ;
-  wire \mprj_pads.analog_en[18] ;
-  wire \mprj_pads.analog_en[19] ;
-  wire \mprj_pads.analog_en[1] ;
-  wire \mprj_pads.analog_en[20] ;
-  wire \mprj_pads.analog_en[21] ;
-  wire \mprj_pads.analog_en[22] ;
-  wire \mprj_pads.analog_en[23] ;
-  wire \mprj_pads.analog_en[24] ;
-  wire \mprj_pads.analog_en[25] ;
-  wire \mprj_pads.analog_en[26] ;
-  wire \mprj_pads.analog_en[27] ;
-  wire \mprj_pads.analog_en[28] ;
-  wire \mprj_pads.analog_en[29] ;
-  wire \mprj_pads.analog_en[2] ;
-  wire \mprj_pads.analog_en[30] ;
-  wire \mprj_pads.analog_en[31] ;
-  wire \mprj_pads.analog_en[32] ;
-  wire \mprj_pads.analog_en[33] ;
-  wire \mprj_pads.analog_en[34] ;
-  wire \mprj_pads.analog_en[35] ;
-  wire \mprj_pads.analog_en[36] ;
-  wire \mprj_pads.analog_en[37] ;
-  wire \mprj_pads.analog_en[3] ;
-  wire \mprj_pads.analog_en[4] ;
-  wire \mprj_pads.analog_en[5] ;
-  wire \mprj_pads.analog_en[6] ;
-  wire \mprj_pads.analog_en[7] ;
-  wire \mprj_pads.analog_en[8] ;
-  wire \mprj_pads.analog_en[9] ;
-  wire \mprj_pads.analog_io[0] ;
-  wire \mprj_pads.analog_io[10] ;
-  wire \mprj_pads.analog_io[11] ;
-  wire \mprj_pads.analog_io[12] ;
-  wire \mprj_pads.analog_io[13] ;
-  wire \mprj_pads.analog_io[14] ;
-  wire \mprj_pads.analog_io[15] ;
-  wire \mprj_pads.analog_io[16] ;
-  wire \mprj_pads.analog_io[17] ;
-  wire \mprj_pads.analog_io[18] ;
-  wire \mprj_pads.analog_io[19] ;
-  wire \mprj_pads.analog_io[1] ;
-  wire \mprj_pads.analog_io[20] ;
-  wire \mprj_pads.analog_io[21] ;
-  wire \mprj_pads.analog_io[22] ;
-  wire \mprj_pads.analog_io[23] ;
-  wire \mprj_pads.analog_io[24] ;
-  wire \mprj_pads.analog_io[25] ;
-  wire \mprj_pads.analog_io[26] ;
-  wire \mprj_pads.analog_io[27] ;
-  wire \mprj_pads.analog_io[28] ;
-  wire \mprj_pads.analog_io[29] ;
-  wire \mprj_pads.analog_io[2] ;
-  wire \mprj_pads.analog_io[30] ;
-  wire \mprj_pads.analog_io[3] ;
-  wire \mprj_pads.analog_io[4] ;
-  wire \mprj_pads.analog_io[5] ;
-  wire \mprj_pads.analog_io[6] ;
-  wire \mprj_pads.analog_io[7] ;
-  wire \mprj_pads.analog_io[8] ;
-  wire \mprj_pads.analog_io[9] ;
-  wire \mprj_pads.analog_pol[0] ;
-  wire \mprj_pads.analog_pol[10] ;
-  wire \mprj_pads.analog_pol[11] ;
-  wire \mprj_pads.analog_pol[12] ;
-  wire \mprj_pads.analog_pol[13] ;
-  wire \mprj_pads.analog_pol[14] ;
-  wire \mprj_pads.analog_pol[15] ;
-  wire \mprj_pads.analog_pol[16] ;
-  wire \mprj_pads.analog_pol[17] ;
-  wire \mprj_pads.analog_pol[18] ;
-  wire \mprj_pads.analog_pol[19] ;
-  wire \mprj_pads.analog_pol[1] ;
-  wire \mprj_pads.analog_pol[20] ;
-  wire \mprj_pads.analog_pol[21] ;
-  wire \mprj_pads.analog_pol[22] ;
-  wire \mprj_pads.analog_pol[23] ;
-  wire \mprj_pads.analog_pol[24] ;
-  wire \mprj_pads.analog_pol[25] ;
-  wire \mprj_pads.analog_pol[26] ;
-  wire \mprj_pads.analog_pol[27] ;
-  wire \mprj_pads.analog_pol[28] ;
-  wire \mprj_pads.analog_pol[29] ;
-  wire \mprj_pads.analog_pol[2] ;
-  wire \mprj_pads.analog_pol[30] ;
-  wire \mprj_pads.analog_pol[31] ;
-  wire \mprj_pads.analog_pol[32] ;
-  wire \mprj_pads.analog_pol[33] ;
-  wire \mprj_pads.analog_pol[34] ;
-  wire \mprj_pads.analog_pol[35] ;
-  wire \mprj_pads.analog_pol[36] ;
-  wire \mprj_pads.analog_pol[37] ;
-  wire \mprj_pads.analog_pol[3] ;
-  wire \mprj_pads.analog_pol[4] ;
-  wire \mprj_pads.analog_pol[5] ;
-  wire \mprj_pads.analog_pol[6] ;
-  wire \mprj_pads.analog_pol[7] ;
-  wire \mprj_pads.analog_pol[8] ;
-  wire \mprj_pads.analog_pol[9] ;
-  wire \mprj_pads.analog_sel[0] ;
-  wire \mprj_pads.analog_sel[10] ;
-  wire \mprj_pads.analog_sel[11] ;
-  wire \mprj_pads.analog_sel[12] ;
-  wire \mprj_pads.analog_sel[13] ;
-  wire \mprj_pads.analog_sel[14] ;
-  wire \mprj_pads.analog_sel[15] ;
-  wire \mprj_pads.analog_sel[16] ;
-  wire \mprj_pads.analog_sel[17] ;
-  wire \mprj_pads.analog_sel[18] ;
-  wire \mprj_pads.analog_sel[19] ;
-  wire \mprj_pads.analog_sel[1] ;
-  wire \mprj_pads.analog_sel[20] ;
-  wire \mprj_pads.analog_sel[21] ;
-  wire \mprj_pads.analog_sel[22] ;
-  wire \mprj_pads.analog_sel[23] ;
-  wire \mprj_pads.analog_sel[24] ;
-  wire \mprj_pads.analog_sel[25] ;
-  wire \mprj_pads.analog_sel[26] ;
-  wire \mprj_pads.analog_sel[27] ;
-  wire \mprj_pads.analog_sel[28] ;
-  wire \mprj_pads.analog_sel[29] ;
-  wire \mprj_pads.analog_sel[2] ;
-  wire \mprj_pads.analog_sel[30] ;
-  wire \mprj_pads.analog_sel[31] ;
-  wire \mprj_pads.analog_sel[32] ;
-  wire \mprj_pads.analog_sel[33] ;
-  wire \mprj_pads.analog_sel[34] ;
-  wire \mprj_pads.analog_sel[35] ;
-  wire \mprj_pads.analog_sel[36] ;
-  wire \mprj_pads.analog_sel[37] ;
-  wire \mprj_pads.analog_sel[3] ;
-  wire \mprj_pads.analog_sel[4] ;
-  wire \mprj_pads.analog_sel[5] ;
-  wire \mprj_pads.analog_sel[6] ;
-  wire \mprj_pads.analog_sel[7] ;
-  wire \mprj_pads.analog_sel[8] ;
-  wire \mprj_pads.analog_sel[9] ;
-  wire \mprj_pads.dm[0] ;
-  wire \mprj_pads.dm[100] ;
-  wire \mprj_pads.dm[101] ;
-  wire \mprj_pads.dm[102] ;
-  wire \mprj_pads.dm[103] ;
-  wire \mprj_pads.dm[104] ;
-  wire \mprj_pads.dm[105] ;
-  wire \mprj_pads.dm[106] ;
-  wire \mprj_pads.dm[107] ;
-  wire \mprj_pads.dm[108] ;
-  wire \mprj_pads.dm[109] ;
-  wire \mprj_pads.dm[10] ;
-  wire \mprj_pads.dm[110] ;
-  wire \mprj_pads.dm[111] ;
-  wire \mprj_pads.dm[112] ;
-  wire \mprj_pads.dm[113] ;
-  wire \mprj_pads.dm[11] ;
-  wire \mprj_pads.dm[12] ;
-  wire \mprj_pads.dm[13] ;
-  wire \mprj_pads.dm[14] ;
-  wire \mprj_pads.dm[15] ;
-  wire \mprj_pads.dm[16] ;
-  wire \mprj_pads.dm[17] ;
-  wire \mprj_pads.dm[18] ;
-  wire \mprj_pads.dm[19] ;
-  wire \mprj_pads.dm[1] ;
-  wire \mprj_pads.dm[20] ;
-  wire \mprj_pads.dm[21] ;
-  wire \mprj_pads.dm[22] ;
-  wire \mprj_pads.dm[23] ;
-  wire \mprj_pads.dm[24] ;
-  wire \mprj_pads.dm[25] ;
-  wire \mprj_pads.dm[26] ;
-  wire \mprj_pads.dm[27] ;
-  wire \mprj_pads.dm[28] ;
-  wire \mprj_pads.dm[29] ;
-  wire \mprj_pads.dm[2] ;
-  wire \mprj_pads.dm[30] ;
-  wire \mprj_pads.dm[31] ;
-  wire \mprj_pads.dm[32] ;
-  wire \mprj_pads.dm[33] ;
-  wire \mprj_pads.dm[34] ;
-  wire \mprj_pads.dm[35] ;
-  wire \mprj_pads.dm[36] ;
-  wire \mprj_pads.dm[37] ;
-  wire \mprj_pads.dm[38] ;
-  wire \mprj_pads.dm[39] ;
-  wire \mprj_pads.dm[3] ;
-  wire \mprj_pads.dm[40] ;
-  wire \mprj_pads.dm[41] ;
-  wire \mprj_pads.dm[42] ;
-  wire \mprj_pads.dm[43] ;
-  wire \mprj_pads.dm[44] ;
-  wire \mprj_pads.dm[45] ;
-  wire \mprj_pads.dm[46] ;
-  wire \mprj_pads.dm[47] ;
-  wire \mprj_pads.dm[48] ;
-  wire \mprj_pads.dm[49] ;
-  wire \mprj_pads.dm[4] ;
-  wire \mprj_pads.dm[50] ;
-  wire \mprj_pads.dm[51] ;
-  wire \mprj_pads.dm[52] ;
-  wire \mprj_pads.dm[53] ;
-  wire \mprj_pads.dm[54] ;
-  wire \mprj_pads.dm[55] ;
-  wire \mprj_pads.dm[56] ;
-  wire \mprj_pads.dm[57] ;
-  wire \mprj_pads.dm[58] ;
-  wire \mprj_pads.dm[59] ;
-  wire \mprj_pads.dm[5] ;
-  wire \mprj_pads.dm[60] ;
-  wire \mprj_pads.dm[61] ;
-  wire \mprj_pads.dm[62] ;
-  wire \mprj_pads.dm[63] ;
-  wire \mprj_pads.dm[64] ;
-  wire \mprj_pads.dm[65] ;
-  wire \mprj_pads.dm[66] ;
-  wire \mprj_pads.dm[67] ;
-  wire \mprj_pads.dm[68] ;
-  wire \mprj_pads.dm[69] ;
-  wire \mprj_pads.dm[6] ;
-  wire \mprj_pads.dm[70] ;
-  wire \mprj_pads.dm[71] ;
-  wire \mprj_pads.dm[72] ;
-  wire \mprj_pads.dm[73] ;
-  wire \mprj_pads.dm[74] ;
-  wire \mprj_pads.dm[75] ;
-  wire \mprj_pads.dm[76] ;
-  wire \mprj_pads.dm[77] ;
-  wire \mprj_pads.dm[78] ;
-  wire \mprj_pads.dm[79] ;
-  wire \mprj_pads.dm[7] ;
-  wire \mprj_pads.dm[80] ;
-  wire \mprj_pads.dm[81] ;
-  wire \mprj_pads.dm[82] ;
-  wire \mprj_pads.dm[83] ;
-  wire \mprj_pads.dm[84] ;
-  wire \mprj_pads.dm[85] ;
-  wire \mprj_pads.dm[86] ;
-  wire \mprj_pads.dm[87] ;
-  wire \mprj_pads.dm[88] ;
-  wire \mprj_pads.dm[89] ;
-  wire \mprj_pads.dm[8] ;
-  wire \mprj_pads.dm[90] ;
-  wire \mprj_pads.dm[91] ;
-  wire \mprj_pads.dm[92] ;
-  wire \mprj_pads.dm[93] ;
-  wire \mprj_pads.dm[94] ;
-  wire \mprj_pads.dm[95] ;
-  wire \mprj_pads.dm[96] ;
-  wire \mprj_pads.dm[97] ;
-  wire \mprj_pads.dm[98] ;
-  wire \mprj_pads.dm[99] ;
-  wire \mprj_pads.dm[9] ;
-  wire \mprj_pads.enh[0] ;
-  wire \mprj_pads.enh[10] ;
-  wire \mprj_pads.enh[11] ;
-  wire \mprj_pads.enh[12] ;
-  wire \mprj_pads.enh[13] ;
-  wire \mprj_pads.enh[14] ;
-  wire \mprj_pads.enh[15] ;
-  wire \mprj_pads.enh[16] ;
-  wire \mprj_pads.enh[17] ;
-  wire \mprj_pads.enh[18] ;
-  wire \mprj_pads.enh[19] ;
-  wire \mprj_pads.enh[1] ;
-  wire \mprj_pads.enh[20] ;
-  wire \mprj_pads.enh[21] ;
-  wire \mprj_pads.enh[22] ;
-  wire \mprj_pads.enh[23] ;
-  wire \mprj_pads.enh[24] ;
-  wire \mprj_pads.enh[25] ;
-  wire \mprj_pads.enh[26] ;
-  wire \mprj_pads.enh[27] ;
-  wire \mprj_pads.enh[28] ;
-  wire \mprj_pads.enh[29] ;
-  wire \mprj_pads.enh[2] ;
-  wire \mprj_pads.enh[30] ;
-  wire \mprj_pads.enh[31] ;
-  wire \mprj_pads.enh[32] ;
-  wire \mprj_pads.enh[33] ;
-  wire \mprj_pads.enh[34] ;
-  wire \mprj_pads.enh[35] ;
-  wire \mprj_pads.enh[36] ;
-  wire \mprj_pads.enh[37] ;
-  wire \mprj_pads.enh[3] ;
-  wire \mprj_pads.enh[4] ;
-  wire \mprj_pads.enh[5] ;
-  wire \mprj_pads.enh[6] ;
-  wire \mprj_pads.enh[7] ;
-  wire \mprj_pads.enh[8] ;
-  wire \mprj_pads.enh[9] ;
-  wire \mprj_pads.hldh_n[0] ;
-  wire \mprj_pads.hldh_n[10] ;
-  wire \mprj_pads.hldh_n[11] ;
-  wire \mprj_pads.hldh_n[12] ;
-  wire \mprj_pads.hldh_n[13] ;
-  wire \mprj_pads.hldh_n[14] ;
-  wire \mprj_pads.hldh_n[15] ;
-  wire \mprj_pads.hldh_n[16] ;
-  wire \mprj_pads.hldh_n[17] ;
-  wire \mprj_pads.hldh_n[18] ;
-  wire \mprj_pads.hldh_n[19] ;
-  wire \mprj_pads.hldh_n[1] ;
-  wire \mprj_pads.hldh_n[20] ;
-  wire \mprj_pads.hldh_n[21] ;
-  wire \mprj_pads.hldh_n[22] ;
-  wire \mprj_pads.hldh_n[23] ;
-  wire \mprj_pads.hldh_n[24] ;
-  wire \mprj_pads.hldh_n[25] ;
-  wire \mprj_pads.hldh_n[26] ;
-  wire \mprj_pads.hldh_n[27] ;
-  wire \mprj_pads.hldh_n[28] ;
-  wire \mprj_pads.hldh_n[29] ;
-  wire \mprj_pads.hldh_n[2] ;
-  wire \mprj_pads.hldh_n[30] ;
-  wire \mprj_pads.hldh_n[31] ;
-  wire \mprj_pads.hldh_n[32] ;
-  wire \mprj_pads.hldh_n[33] ;
-  wire \mprj_pads.hldh_n[34] ;
-  wire \mprj_pads.hldh_n[35] ;
-  wire \mprj_pads.hldh_n[36] ;
-  wire \mprj_pads.hldh_n[37] ;
-  wire \mprj_pads.hldh_n[3] ;
-  wire \mprj_pads.hldh_n[4] ;
-  wire \mprj_pads.hldh_n[5] ;
-  wire \mprj_pads.hldh_n[6] ;
-  wire \mprj_pads.hldh_n[7] ;
-  wire \mprj_pads.hldh_n[8] ;
-  wire \mprj_pads.hldh_n[9] ;
-  wire \mprj_pads.holdover[0] ;
-  wire \mprj_pads.holdover[10] ;
-  wire \mprj_pads.holdover[11] ;
-  wire \mprj_pads.holdover[12] ;
-  wire \mprj_pads.holdover[13] ;
-  wire \mprj_pads.holdover[14] ;
-  wire \mprj_pads.holdover[15] ;
-  wire \mprj_pads.holdover[16] ;
-  wire \mprj_pads.holdover[17] ;
-  wire \mprj_pads.holdover[18] ;
-  wire \mprj_pads.holdover[19] ;
-  wire \mprj_pads.holdover[1] ;
-  wire \mprj_pads.holdover[20] ;
-  wire \mprj_pads.holdover[21] ;
-  wire \mprj_pads.holdover[22] ;
-  wire \mprj_pads.holdover[23] ;
-  wire \mprj_pads.holdover[24] ;
-  wire \mprj_pads.holdover[25] ;
-  wire \mprj_pads.holdover[26] ;
-  wire \mprj_pads.holdover[27] ;
-  wire \mprj_pads.holdover[28] ;
-  wire \mprj_pads.holdover[29] ;
-  wire \mprj_pads.holdover[2] ;
-  wire \mprj_pads.holdover[30] ;
-  wire \mprj_pads.holdover[31] ;
-  wire \mprj_pads.holdover[32] ;
-  wire \mprj_pads.holdover[33] ;
-  wire \mprj_pads.holdover[34] ;
-  wire \mprj_pads.holdover[35] ;
-  wire \mprj_pads.holdover[36] ;
-  wire \mprj_pads.holdover[37] ;
-  wire \mprj_pads.holdover[3] ;
-  wire \mprj_pads.holdover[4] ;
-  wire \mprj_pads.holdover[5] ;
-  wire \mprj_pads.holdover[6] ;
-  wire \mprj_pads.holdover[7] ;
-  wire \mprj_pads.holdover[8] ;
-  wire \mprj_pads.holdover[9] ;
-  wire \mprj_pads.ib_mode_sel[0] ;
-  wire \mprj_pads.ib_mode_sel[10] ;
-  wire \mprj_pads.ib_mode_sel[11] ;
-  wire \mprj_pads.ib_mode_sel[12] ;
-  wire \mprj_pads.ib_mode_sel[13] ;
-  wire \mprj_pads.ib_mode_sel[14] ;
-  wire \mprj_pads.ib_mode_sel[15] ;
-  wire \mprj_pads.ib_mode_sel[16] ;
-  wire \mprj_pads.ib_mode_sel[17] ;
-  wire \mprj_pads.ib_mode_sel[18] ;
-  wire \mprj_pads.ib_mode_sel[19] ;
-  wire \mprj_pads.ib_mode_sel[1] ;
-  wire \mprj_pads.ib_mode_sel[20] ;
-  wire \mprj_pads.ib_mode_sel[21] ;
-  wire \mprj_pads.ib_mode_sel[22] ;
-  wire \mprj_pads.ib_mode_sel[23] ;
-  wire \mprj_pads.ib_mode_sel[24] ;
-  wire \mprj_pads.ib_mode_sel[25] ;
-  wire \mprj_pads.ib_mode_sel[26] ;
-  wire \mprj_pads.ib_mode_sel[27] ;
-  wire \mprj_pads.ib_mode_sel[28] ;
-  wire \mprj_pads.ib_mode_sel[29] ;
-  wire \mprj_pads.ib_mode_sel[2] ;
-  wire \mprj_pads.ib_mode_sel[30] ;
-  wire \mprj_pads.ib_mode_sel[31] ;
-  wire \mprj_pads.ib_mode_sel[32] ;
-  wire \mprj_pads.ib_mode_sel[33] ;
-  wire \mprj_pads.ib_mode_sel[34] ;
-  wire \mprj_pads.ib_mode_sel[35] ;
-  wire \mprj_pads.ib_mode_sel[36] ;
-  wire \mprj_pads.ib_mode_sel[37] ;
-  wire \mprj_pads.ib_mode_sel[3] ;
-  wire \mprj_pads.ib_mode_sel[4] ;
-  wire \mprj_pads.ib_mode_sel[5] ;
-  wire \mprj_pads.ib_mode_sel[6] ;
-  wire \mprj_pads.ib_mode_sel[7] ;
-  wire \mprj_pads.ib_mode_sel[8] ;
-  wire \mprj_pads.ib_mode_sel[9] ;
-  wire \mprj_pads.inp_dis[0] ;
-  wire \mprj_pads.inp_dis[10] ;
-  wire \mprj_pads.inp_dis[11] ;
-  wire \mprj_pads.inp_dis[12] ;
-  wire \mprj_pads.inp_dis[13] ;
-  wire \mprj_pads.inp_dis[14] ;
-  wire \mprj_pads.inp_dis[15] ;
-  wire \mprj_pads.inp_dis[16] ;
-  wire \mprj_pads.inp_dis[17] ;
-  wire \mprj_pads.inp_dis[18] ;
-  wire \mprj_pads.inp_dis[19] ;
-  wire \mprj_pads.inp_dis[1] ;
-  wire \mprj_pads.inp_dis[20] ;
-  wire \mprj_pads.inp_dis[21] ;
-  wire \mprj_pads.inp_dis[22] ;
-  wire \mprj_pads.inp_dis[23] ;
-  wire \mprj_pads.inp_dis[24] ;
-  wire \mprj_pads.inp_dis[25] ;
-  wire \mprj_pads.inp_dis[26] ;
-  wire \mprj_pads.inp_dis[27] ;
-  wire \mprj_pads.inp_dis[28] ;
-  wire \mprj_pads.inp_dis[29] ;
-  wire \mprj_pads.inp_dis[2] ;
-  wire \mprj_pads.inp_dis[30] ;
-  wire \mprj_pads.inp_dis[31] ;
-  wire \mprj_pads.inp_dis[32] ;
-  wire \mprj_pads.inp_dis[33] ;
-  wire \mprj_pads.inp_dis[34] ;
-  wire \mprj_pads.inp_dis[35] ;
-  wire \mprj_pads.inp_dis[36] ;
-  wire \mprj_pads.inp_dis[37] ;
-  wire \mprj_pads.inp_dis[3] ;
-  wire \mprj_pads.inp_dis[4] ;
-  wire \mprj_pads.inp_dis[5] ;
-  wire \mprj_pads.inp_dis[6] ;
-  wire \mprj_pads.inp_dis[7] ;
-  wire \mprj_pads.inp_dis[8] ;
-  wire \mprj_pads.inp_dis[9] ;
-  wire \mprj_pads.io[0] ;
-  wire \mprj_pads.io[10] ;
-  wire \mprj_pads.io[11] ;
-  wire \mprj_pads.io[12] ;
-  wire \mprj_pads.io[13] ;
-  wire \mprj_pads.io[14] ;
-  wire \mprj_pads.io[15] ;
-  wire \mprj_pads.io[16] ;
-  wire \mprj_pads.io[17] ;
-  wire \mprj_pads.io[18] ;
-  wire \mprj_pads.io[19] ;
-  wire \mprj_pads.io[1] ;
-  wire \mprj_pads.io[20] ;
-  wire \mprj_pads.io[21] ;
-  wire \mprj_pads.io[22] ;
-  wire \mprj_pads.io[23] ;
-  wire \mprj_pads.io[24] ;
-  wire \mprj_pads.io[25] ;
-  wire \mprj_pads.io[26] ;
-  wire \mprj_pads.io[27] ;
-  wire \mprj_pads.io[28] ;
-  wire \mprj_pads.io[29] ;
-  wire \mprj_pads.io[2] ;
-  wire \mprj_pads.io[30] ;
-  wire \mprj_pads.io[31] ;
-  wire \mprj_pads.io[32] ;
-  wire \mprj_pads.io[33] ;
-  wire \mprj_pads.io[34] ;
-  wire \mprj_pads.io[35] ;
-  wire \mprj_pads.io[36] ;
-  wire \mprj_pads.io[37] ;
-  wire \mprj_pads.io[3] ;
-  wire \mprj_pads.io[4] ;
-  wire \mprj_pads.io[5] ;
-  wire \mprj_pads.io[6] ;
-  wire \mprj_pads.io[7] ;
-  wire \mprj_pads.io[8] ;
-  wire \mprj_pads.io[9] ;
-  wire \mprj_pads.io_in[0] ;
-  wire \mprj_pads.io_in[10] ;
-  wire \mprj_pads.io_in[11] ;
-  wire \mprj_pads.io_in[12] ;
-  wire \mprj_pads.io_in[13] ;
-  wire \mprj_pads.io_in[14] ;
-  wire \mprj_pads.io_in[15] ;
-  wire \mprj_pads.io_in[16] ;
-  wire \mprj_pads.io_in[17] ;
-  wire \mprj_pads.io_in[18] ;
-  wire \mprj_pads.io_in[19] ;
-  wire \mprj_pads.io_in[1] ;
-  wire \mprj_pads.io_in[20] ;
-  wire \mprj_pads.io_in[21] ;
-  wire \mprj_pads.io_in[22] ;
-  wire \mprj_pads.io_in[23] ;
-  wire \mprj_pads.io_in[24] ;
-  wire \mprj_pads.io_in[25] ;
-  wire \mprj_pads.io_in[26] ;
-  wire \mprj_pads.io_in[27] ;
-  wire \mprj_pads.io_in[28] ;
-  wire \mprj_pads.io_in[29] ;
-  wire \mprj_pads.io_in[2] ;
-  wire \mprj_pads.io_in[30] ;
-  wire \mprj_pads.io_in[31] ;
-  wire \mprj_pads.io_in[32] ;
-  wire \mprj_pads.io_in[33] ;
-  wire \mprj_pads.io_in[34] ;
-  wire \mprj_pads.io_in[35] ;
-  wire \mprj_pads.io_in[36] ;
-  wire \mprj_pads.io_in[37] ;
-  wire \mprj_pads.io_in[3] ;
-  wire \mprj_pads.io_in[4] ;
-  wire \mprj_pads.io_in[5] ;
-  wire \mprj_pads.io_in[6] ;
-  wire \mprj_pads.io_in[7] ;
-  wire \mprj_pads.io_in[8] ;
-  wire \mprj_pads.io_in[9] ;
-  wire \mprj_pads.io_out[0] ;
-  wire \mprj_pads.io_out[10] ;
-  wire \mprj_pads.io_out[11] ;
-  wire \mprj_pads.io_out[12] ;
-  wire \mprj_pads.io_out[13] ;
-  wire \mprj_pads.io_out[14] ;
-  wire \mprj_pads.io_out[15] ;
-  wire \mprj_pads.io_out[16] ;
-  wire \mprj_pads.io_out[17] ;
-  wire \mprj_pads.io_out[18] ;
-  wire \mprj_pads.io_out[19] ;
-  wire \mprj_pads.io_out[1] ;
-  wire \mprj_pads.io_out[20] ;
-  wire \mprj_pads.io_out[21] ;
-  wire \mprj_pads.io_out[22] ;
-  wire \mprj_pads.io_out[23] ;
-  wire \mprj_pads.io_out[24] ;
-  wire \mprj_pads.io_out[25] ;
-  wire \mprj_pads.io_out[26] ;
-  wire \mprj_pads.io_out[27] ;
-  wire \mprj_pads.io_out[28] ;
-  wire \mprj_pads.io_out[29] ;
-  wire \mprj_pads.io_out[2] ;
-  wire \mprj_pads.io_out[30] ;
-  wire \mprj_pads.io_out[31] ;
-  wire \mprj_pads.io_out[32] ;
-  wire \mprj_pads.io_out[33] ;
-  wire \mprj_pads.io_out[34] ;
-  wire \mprj_pads.io_out[35] ;
-  wire \mprj_pads.io_out[36] ;
-  wire \mprj_pads.io_out[37] ;
-  wire \mprj_pads.io_out[3] ;
-  wire \mprj_pads.io_out[4] ;
-  wire \mprj_pads.io_out[5] ;
-  wire \mprj_pads.io_out[6] ;
-  wire \mprj_pads.io_out[7] ;
-  wire \mprj_pads.io_out[8] ;
-  wire \mprj_pads.io_out[9] ;
-  wire \mprj_pads.loop1_io[0] ;
-  wire \mprj_pads.loop1_io[10] ;
-  wire \mprj_pads.loop1_io[11] ;
-  wire \mprj_pads.loop1_io[12] ;
-  wire \mprj_pads.loop1_io[13] ;
-  wire \mprj_pads.loop1_io[14] ;
-  wire \mprj_pads.loop1_io[15] ;
-  wire \mprj_pads.loop1_io[16] ;
-  wire \mprj_pads.loop1_io[17] ;
-  wire \mprj_pads.loop1_io[18] ;
-  wire \mprj_pads.loop1_io[19] ;
-  wire \mprj_pads.loop1_io[1] ;
-  wire \mprj_pads.loop1_io[20] ;
-  wire \mprj_pads.loop1_io[21] ;
-  wire \mprj_pads.loop1_io[22] ;
-  wire \mprj_pads.loop1_io[23] ;
-  wire \mprj_pads.loop1_io[24] ;
-  wire \mprj_pads.loop1_io[25] ;
-  wire \mprj_pads.loop1_io[26] ;
-  wire \mprj_pads.loop1_io[27] ;
-  wire \mprj_pads.loop1_io[28] ;
-  wire \mprj_pads.loop1_io[29] ;
-  wire \mprj_pads.loop1_io[2] ;
-  wire \mprj_pads.loop1_io[30] ;
-  wire \mprj_pads.loop1_io[31] ;
-  wire \mprj_pads.loop1_io[32] ;
-  wire \mprj_pads.loop1_io[33] ;
-  wire \mprj_pads.loop1_io[34] ;
-  wire \mprj_pads.loop1_io[35] ;
-  wire \mprj_pads.loop1_io[36] ;
-  wire \mprj_pads.loop1_io[37] ;
-  wire \mprj_pads.loop1_io[3] ;
-  wire \mprj_pads.loop1_io[4] ;
-  wire \mprj_pads.loop1_io[5] ;
-  wire \mprj_pads.loop1_io[6] ;
-  wire \mprj_pads.loop1_io[7] ;
-  wire \mprj_pads.loop1_io[8] ;
-  wire \mprj_pads.loop1_io[9] ;
-  wire \mprj_pads.no_connect[0] ;
-  wire \mprj_pads.no_connect[1] ;
-  wire \mprj_pads.no_connect[2] ;
-  wire \mprj_pads.no_connect[3] ;
-  wire \mprj_pads.no_connect[4] ;
-  wire \mprj_pads.no_connect[5] ;
-  wire \mprj_pads.no_connect[6] ;
-  wire \mprj_pads.oeb[0] ;
-  wire \mprj_pads.oeb[10] ;
-  wire \mprj_pads.oeb[11] ;
-  wire \mprj_pads.oeb[12] ;
-  wire \mprj_pads.oeb[13] ;
-  wire \mprj_pads.oeb[14] ;
-  wire \mprj_pads.oeb[15] ;
-  wire \mprj_pads.oeb[16] ;
-  wire \mprj_pads.oeb[17] ;
-  wire \mprj_pads.oeb[18] ;
-  wire \mprj_pads.oeb[19] ;
-  wire \mprj_pads.oeb[1] ;
-  wire \mprj_pads.oeb[20] ;
-  wire \mprj_pads.oeb[21] ;
-  wire \mprj_pads.oeb[22] ;
-  wire \mprj_pads.oeb[23] ;
-  wire \mprj_pads.oeb[24] ;
-  wire \mprj_pads.oeb[25] ;
-  wire \mprj_pads.oeb[26] ;
-  wire \mprj_pads.oeb[27] ;
-  wire \mprj_pads.oeb[28] ;
-  wire \mprj_pads.oeb[29] ;
-  wire \mprj_pads.oeb[2] ;
-  wire \mprj_pads.oeb[30] ;
-  wire \mprj_pads.oeb[31] ;
-  wire \mprj_pads.oeb[32] ;
-  wire \mprj_pads.oeb[33] ;
-  wire \mprj_pads.oeb[34] ;
-  wire \mprj_pads.oeb[35] ;
-  wire \mprj_pads.oeb[36] ;
-  wire \mprj_pads.oeb[37] ;
-  wire \mprj_pads.oeb[3] ;
-  wire \mprj_pads.oeb[4] ;
-  wire \mprj_pads.oeb[5] ;
-  wire \mprj_pads.oeb[6] ;
-  wire \mprj_pads.oeb[7] ;
-  wire \mprj_pads.oeb[8] ;
-  wire \mprj_pads.oeb[9] ;
-  wire \mprj_pads.porb_h ;
-  wire \mprj_pads.slow_sel[0] ;
-  wire \mprj_pads.slow_sel[10] ;
-  wire \mprj_pads.slow_sel[11] ;
-  wire \mprj_pads.slow_sel[12] ;
-  wire \mprj_pads.slow_sel[13] ;
-  wire \mprj_pads.slow_sel[14] ;
-  wire \mprj_pads.slow_sel[15] ;
-  wire \mprj_pads.slow_sel[16] ;
-  wire \mprj_pads.slow_sel[17] ;
-  wire \mprj_pads.slow_sel[18] ;
-  wire \mprj_pads.slow_sel[19] ;
-  wire \mprj_pads.slow_sel[1] ;
-  wire \mprj_pads.slow_sel[20] ;
-  wire \mprj_pads.slow_sel[21] ;
-  wire \mprj_pads.slow_sel[22] ;
-  wire \mprj_pads.slow_sel[23] ;
-  wire \mprj_pads.slow_sel[24] ;
-  wire \mprj_pads.slow_sel[25] ;
-  wire \mprj_pads.slow_sel[26] ;
-  wire \mprj_pads.slow_sel[27] ;
-  wire \mprj_pads.slow_sel[28] ;
-  wire \mprj_pads.slow_sel[29] ;
-  wire \mprj_pads.slow_sel[2] ;
-  wire \mprj_pads.slow_sel[30] ;
-  wire \mprj_pads.slow_sel[31] ;
-  wire \mprj_pads.slow_sel[32] ;
-  wire \mprj_pads.slow_sel[33] ;
-  wire \mprj_pads.slow_sel[34] ;
-  wire \mprj_pads.slow_sel[35] ;
-  wire \mprj_pads.slow_sel[36] ;
-  wire \mprj_pads.slow_sel[37] ;
-  wire \mprj_pads.slow_sel[3] ;
-  wire \mprj_pads.slow_sel[4] ;
-  wire \mprj_pads.slow_sel[5] ;
-  wire \mprj_pads.slow_sel[6] ;
-  wire \mprj_pads.slow_sel[7] ;
-  wire \mprj_pads.slow_sel[8] ;
-  wire \mprj_pads.slow_sel[9] ;
-  wire \mprj_pads.vccd ;
-  wire \mprj_pads.vccd1 ;
-  wire \mprj_pads.vccd2 ;
-  wire \mprj_pads.vdda ;
-  wire \mprj_pads.vdda1 ;
-  wire \mprj_pads.vdda2 ;
-  wire \mprj_pads.vddio ;
-  wire \mprj_pads.vddio_q ;
-  wire \mprj_pads.vssa ;
-  wire \mprj_pads.vssa1 ;
-  wire \mprj_pads.vssa2 ;
-  wire \mprj_pads.vssd ;
-  wire \mprj_pads.vssd1 ;
-  wire \mprj_pads.vssd2 ;
-  wire \mprj_pads.vssio ;
-  wire \mprj_pads.vssio_q ;
-  wire \mprj_pads.vtrip_sel[0] ;
-  wire \mprj_pads.vtrip_sel[10] ;
-  wire \mprj_pads.vtrip_sel[11] ;
-  wire \mprj_pads.vtrip_sel[12] ;
-  wire \mprj_pads.vtrip_sel[13] ;
-  wire \mprj_pads.vtrip_sel[14] ;
-  wire \mprj_pads.vtrip_sel[15] ;
-  wire \mprj_pads.vtrip_sel[16] ;
-  wire \mprj_pads.vtrip_sel[17] ;
-  wire \mprj_pads.vtrip_sel[18] ;
-  wire \mprj_pads.vtrip_sel[19] ;
-  wire \mprj_pads.vtrip_sel[1] ;
-  wire \mprj_pads.vtrip_sel[20] ;
-  wire \mprj_pads.vtrip_sel[21] ;
-  wire \mprj_pads.vtrip_sel[22] ;
-  wire \mprj_pads.vtrip_sel[23] ;
-  wire \mprj_pads.vtrip_sel[24] ;
-  wire \mprj_pads.vtrip_sel[25] ;
-  wire \mprj_pads.vtrip_sel[26] ;
-  wire \mprj_pads.vtrip_sel[27] ;
-  wire \mprj_pads.vtrip_sel[28] ;
-  wire \mprj_pads.vtrip_sel[29] ;
-  wire \mprj_pads.vtrip_sel[2] ;
-  wire \mprj_pads.vtrip_sel[30] ;
-  wire \mprj_pads.vtrip_sel[31] ;
-  wire \mprj_pads.vtrip_sel[32] ;
-  wire \mprj_pads.vtrip_sel[33] ;
-  wire \mprj_pads.vtrip_sel[34] ;
-  wire \mprj_pads.vtrip_sel[35] ;
-  wire \mprj_pads.vtrip_sel[36] ;
-  wire \mprj_pads.vtrip_sel[37] ;
-  wire \mprj_pads.vtrip_sel[3] ;
-  wire \mprj_pads.vtrip_sel[4] ;
-  wire \mprj_pads.vtrip_sel[5] ;
-  wire \mprj_pads.vtrip_sel[6] ;
-  wire \mprj_pads.vtrip_sel[7] ;
-  wire \mprj_pads.vtrip_sel[8] ;
-  wire \mprj_pads.vtrip_sel[9] ;
-  input por;
-  input porb_h;
-  input resetb;
-  output resetb_core_h;
-  inout vccd;
-  inout vccd1;
-  inout vccd2;
-  inout vdda;
-  inout vdda1;
-  inout vdda2;
-  inout vddio;
-  wire vddio_q;
-  inout vssa;
-  inout vssa1;
-  inout vssa2;
-  inout vssd;
-  inout vssd1;
-  inout vssd2;
-  inout vssio;
-  wire vssio_q;
-  wire xresloop;
-  sky130_ef_io__gpiov2_pad_wrapped clock_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(vssd),
-    .ANALOG_POL(vssd),
-    .ANALOG_SEL(vssd),
-    .DM({ vssd, vssd, vccd }),
-    .ENABLE_H(porb_h),
-    .ENABLE_INP_H(loop_clock),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssa),
-    .HLD_H_N(vddio),
-    .HLD_OVR(vssd),
-    .IB_MODE_SEL(vssd),
-    .IN(clock_core),
-    .INP_DIS(por),
-    .IN_H(),
-    .OE_N(vccd),
-    .OUT(vssd),
-    .PAD(clock),
-    .PAD_A_ESD_0_H(),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(vssd),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(loop_clock),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(vssd)
-  );
-  sky130_ef_io__gpiov2_pad_wrapped flash_clk_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(vssd),
-    .ANALOG_POL(vssd),
-    .ANALOG_SEL(vssd),
-    .DM({ vccd, vccd, vssd }),
-    .ENABLE_H(porb_h),
-    .ENABLE_INP_H(loop_flash_clk),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssa),
-    .HLD_H_N(vddio),
-    .HLD_OVR(vssd),
-    .IB_MODE_SEL(vssd),
-    .IN(),
-    .INP_DIS(flash_clk_ieb_core),
-    .IN_H(),
-    .OE_N(flash_clk_oeb_core),
-    .OUT(flash_clk_core),
-    .PAD(flash_clk),
-    .PAD_A_ESD_0_H(),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(vssd),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(loop_flash_clk),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(vssd)
-  );
-  sky130_ef_io__gpiov2_pad_wrapped flash_csb_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(vssd),
-    .ANALOG_POL(vssd),
-    .ANALOG_SEL(vssd),
-    .DM({ vccd, vccd, vssd }),
-    .ENABLE_H(porb_h),
-    .ENABLE_INP_H(loop_flash_csb),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssa),
-    .HLD_H_N(vddio),
-    .HLD_OVR(vssd),
-    .IB_MODE_SEL(vssd),
-    .IN(),
-    .INP_DIS(flash_csb_ieb_core),
-    .IN_H(),
-    .OE_N(flash_csb_oeb_core),
-    .OUT(flash_csb_core),
-    .PAD(flash_csb),
-    .PAD_A_ESD_0_H(),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(vssd),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(loop_flash_csb),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(vssd)
-  );
-  sky130_ef_io__gpiov2_pad_wrapped flash_io0_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(vssd),
-    .ANALOG_POL(vssd),
-    .ANALOG_SEL(vssd),
-    .DM({ flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core }),
-    .ENABLE_H(porb_h),
-    .ENABLE_INP_H(loop_flash_io0),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssa),
-    .HLD_H_N(vddio),
-    .HLD_OVR(vssd),
-    .IB_MODE_SEL(vssd),
-    .IN(flash_io0_di_core),
-    .INP_DIS(flash_io0_ieb_core),
-    .IN_H(),
-    .OE_N(flash_io0_oeb_core),
-    .OUT(flash_io0_do_core),
-    .PAD(flash_io0),
-    .PAD_A_ESD_0_H(),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(vssd),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(loop_flash_io0),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(vssd)
-  );
-  sky130_ef_io__gpiov2_pad_wrapped flash_io1_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(vssd),
-    .ANALOG_POL(vssd),
-    .ANALOG_SEL(vssd),
-    .DM({ flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core }),
-    .ENABLE_H(porb_h),
-    .ENABLE_INP_H(loop_flash_io1),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssa),
-    .HLD_H_N(vddio),
-    .HLD_OVR(vssd),
-    .IB_MODE_SEL(vssd),
-    .IN(flash_io1_di_core),
-    .INP_DIS(flash_io1_ieb_core),
-    .IN_H(),
-    .OE_N(flash_io1_oeb_core),
-    .OUT(flash_io1_do_core),
-    .PAD(flash_io1),
-    .PAD_A_ESD_0_H(),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(vssd),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(loop_flash_io1),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(vssd)
-  );
-  sky130_ef_io__gpiov2_pad_wrapped gpio_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(vssd),
-    .ANALOG_POL(vssd),
-    .ANALOG_SEL(vssd),
-    .DM({ gpio_mode1_core, gpio_mode1_core, gpio_mode0_core }),
-    .ENABLE_H(porb_h),
-    .ENABLE_INP_H(loop_gpio),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssa),
-    .HLD_H_N(vddio),
-    .HLD_OVR(vssd),
-    .IB_MODE_SEL(vssd),
-    .IN(gpio_in_core),
-    .INP_DIS(gpio_inenb_core),
-    .IN_H(),
-    .OE_N(gpio_outenb_core),
-    .OUT(gpio_out_core),
-    .PAD(gpio),
-    .PAD_A_ESD_0_H(),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(vssd),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(loop_gpio),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(vssd)
-  );
-  sky130_ef_io__corner_pad \mgmt_corner[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__corner_pad \mgmt_corner[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vccd_lvc_clamped_pad mgmt_vccd_lvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vdda_hvc_clamped_pad mgmt_vdda_hvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vddio_hvc_clamped_pad \mgmt_vddio_hvclamp_pad[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vddio_hvc_clamped_pad \mgmt_vddio_hvclamp_pad[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssa_hvc_clamped_pad mgmt_vssa_hvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssd_lvc_clamped_pad mgmt_vssd_lvclmap_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssio_hvc_clamped_pad \mgmt_vssio_hvclamp_pad[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssio_hvc_clamped_pad \mgmt_vssio_hvclamp_pad[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[0] ),
-    .ANALOG_POL(\mprj_io_analog_pol[0] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[0] ),
-    .DM({ \mprj_io_dm[2] , \mprj_io_dm[1] , \mprj_io_dm[0]  }),
-    .ENABLE_H(\mprj_io_enh[0] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[0] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[0] ),
-    .HLD_OVR(\mprj_io_holdover[0] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[0] ),
-    .IN(\mprj_pads.io_in[0] ),
-    .INP_DIS(\mprj_io_inp_dis[0] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[0] ),
-    .OUT(\mprj_io_out[0] ),
-    .PAD(\mprj_io[0] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[0] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[0] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[0] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[0] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[10]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[10] ),
-    .ANALOG_POL(\mprj_io_analog_pol[10] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[10] ),
-    .DM({ \mprj_io_dm[32] , \mprj_io_dm[31] , \mprj_io_dm[30]  }),
-    .ENABLE_H(\mprj_io_enh[10] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[10] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[10] ),
-    .HLD_OVR(\mprj_io_holdover[10] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[10] ),
-    .IN(\mprj_pads.io_in[10] ),
-    .INP_DIS(\mprj_io_inp_dis[10] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[10] ),
-    .OUT(\mprj_io_out[10] ),
-    .PAD(\mprj_io[10] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[3] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[10] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[10] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[10] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[11]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[11] ),
-    .ANALOG_POL(\mprj_io_analog_pol[11] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[11] ),
-    .DM({ \mprj_io_dm[35] , \mprj_io_dm[34] , \mprj_io_dm[33]  }),
-    .ENABLE_H(\mprj_io_enh[11] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[11] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[11] ),
-    .HLD_OVR(\mprj_io_holdover[11] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[11] ),
-    .IN(\mprj_pads.io_in[11] ),
-    .INP_DIS(\mprj_io_inp_dis[11] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[11] ),
-    .OUT(\mprj_io_out[11] ),
-    .PAD(\mprj_io[11] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[4] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[11] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[11] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[11] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[12]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[12] ),
-    .ANALOG_POL(\mprj_io_analog_pol[12] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[12] ),
-    .DM({ \mprj_io_dm[38] , \mprj_io_dm[37] , \mprj_io_dm[36]  }),
-    .ENABLE_H(\mprj_io_enh[12] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[12] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[12] ),
-    .HLD_OVR(\mprj_io_holdover[12] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[12] ),
-    .IN(\mprj_pads.io_in[12] ),
-    .INP_DIS(\mprj_io_inp_dis[12] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[12] ),
-    .OUT(\mprj_io_out[12] ),
-    .PAD(\mprj_io[12] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[5] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[12] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[12] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[12] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[13]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[13] ),
-    .ANALOG_POL(\mprj_io_analog_pol[13] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[13] ),
-    .DM({ \mprj_io_dm[41] , \mprj_io_dm[40] , \mprj_io_dm[39]  }),
-    .ENABLE_H(\mprj_io_enh[13] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[13] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[13] ),
-    .HLD_OVR(\mprj_io_holdover[13] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[13] ),
-    .IN(\mprj_pads.io_in[13] ),
-    .INP_DIS(\mprj_io_inp_dis[13] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[13] ),
-    .OUT(\mprj_io_out[13] ),
-    .PAD(\mprj_io[13] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[6] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[13] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[13] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[13] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[14]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[14] ),
-    .ANALOG_POL(\mprj_io_analog_pol[14] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[14] ),
-    .DM({ \mprj_io_dm[44] , \mprj_io_dm[43] , \mprj_io_dm[42]  }),
-    .ENABLE_H(\mprj_io_enh[14] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[14] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[14] ),
-    .HLD_OVR(\mprj_io_holdover[14] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[14] ),
-    .IN(\mprj_pads.io_in[14] ),
-    .INP_DIS(\mprj_io_inp_dis[14] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[14] ),
-    .OUT(\mprj_io_out[14] ),
-    .PAD(\mprj_io[14] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[7] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[14] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[14] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[14] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[15]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[15] ),
-    .ANALOG_POL(\mprj_io_analog_pol[15] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[15] ),
-    .DM({ \mprj_io_dm[47] , \mprj_io_dm[46] , \mprj_io_dm[45]  }),
-    .ENABLE_H(\mprj_io_enh[15] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[15] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[15] ),
-    .HLD_OVR(\mprj_io_holdover[15] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[15] ),
-    .IN(\mprj_pads.io_in[15] ),
-    .INP_DIS(\mprj_io_inp_dis[15] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[15] ),
-    .OUT(\mprj_io_out[15] ),
-    .PAD(\mprj_io[15] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[8] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[15] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[15] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[15] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[16]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[16] ),
-    .ANALOG_POL(\mprj_io_analog_pol[16] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[16] ),
-    .DM({ \mprj_io_dm[50] , \mprj_io_dm[49] , \mprj_io_dm[48]  }),
-    .ENABLE_H(\mprj_io_enh[16] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[16] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[16] ),
-    .HLD_OVR(\mprj_io_holdover[16] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[16] ),
-    .IN(\mprj_pads.io_in[16] ),
-    .INP_DIS(\mprj_io_inp_dis[16] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[16] ),
-    .OUT(\mprj_io_out[16] ),
-    .PAD(\mprj_io[16] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[9] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[16] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[16] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[16] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[17]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[17] ),
-    .ANALOG_POL(\mprj_io_analog_pol[17] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[17] ),
-    .DM({ \mprj_io_dm[53] , \mprj_io_dm[52] , \mprj_io_dm[51]  }),
-    .ENABLE_H(\mprj_io_enh[17] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[17] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[17] ),
-    .HLD_OVR(\mprj_io_holdover[17] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[17] ),
-    .IN(\mprj_pads.io_in[17] ),
-    .INP_DIS(\mprj_io_inp_dis[17] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[17] ),
-    .OUT(\mprj_io_out[17] ),
-    .PAD(\mprj_io[17] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[10] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[17] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[17] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[17] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[1] ),
-    .ANALOG_POL(\mprj_io_analog_pol[1] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[1] ),
-    .DM({ \mprj_io_dm[5] , \mprj_io_dm[4] , \mprj_io_dm[3]  }),
-    .ENABLE_H(\mprj_io_enh[1] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[1] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[1] ),
-    .HLD_OVR(\mprj_io_holdover[1] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[1] ),
-    .IN(\mprj_pads.io_in[1] ),
-    .INP_DIS(\mprj_io_inp_dis[1] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[1] ),
-    .OUT(\mprj_io_out[1] ),
-    .PAD(\mprj_io[1] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[1] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[1] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[1] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[1] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[2]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[2] ),
-    .ANALOG_POL(\mprj_io_analog_pol[2] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[2] ),
-    .DM({ \mprj_io_dm[8] , \mprj_io_dm[7] , \mprj_io_dm[6]  }),
-    .ENABLE_H(\mprj_io_enh[2] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[2] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[2] ),
-    .HLD_OVR(\mprj_io_holdover[2] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[2] ),
-    .IN(\mprj_pads.io_in[2] ),
-    .INP_DIS(\mprj_io_inp_dis[2] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[2] ),
-    .OUT(\mprj_io_out[2] ),
-    .PAD(\mprj_io[2] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[2] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[2] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[2] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[2] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[3]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[3] ),
-    .ANALOG_POL(\mprj_io_analog_pol[3] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[3] ),
-    .DM({ \mprj_io_dm[11] , \mprj_io_dm[10] , \mprj_io_dm[9]  }),
-    .ENABLE_H(\mprj_io_enh[3] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[3] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[3] ),
-    .HLD_OVR(\mprj_io_holdover[3] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[3] ),
-    .IN(\mprj_pads.io_in[3] ),
-    .INP_DIS(\mprj_io_inp_dis[3] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[3] ),
-    .OUT(\mprj_io_out[3] ),
-    .PAD(\mprj_io[3] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[3] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[3] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[3] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[3] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[4]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[4] ),
-    .ANALOG_POL(\mprj_io_analog_pol[4] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[4] ),
-    .DM({ \mprj_io_dm[14] , \mprj_io_dm[13] , \mprj_io_dm[12]  }),
-    .ENABLE_H(\mprj_io_enh[4] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[4] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[4] ),
-    .HLD_OVR(\mprj_io_holdover[4] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[4] ),
-    .IN(\mprj_pads.io_in[4] ),
-    .INP_DIS(\mprj_io_inp_dis[4] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[4] ),
-    .OUT(\mprj_io_out[4] ),
-    .PAD(\mprj_io[4] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[4] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[4] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[4] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[4] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[5]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[5] ),
-    .ANALOG_POL(\mprj_io_analog_pol[5] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[5] ),
-    .DM({ \mprj_io_dm[17] , \mprj_io_dm[16] , \mprj_io_dm[15]  }),
-    .ENABLE_H(\mprj_io_enh[5] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[5] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[5] ),
-    .HLD_OVR(\mprj_io_holdover[5] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[5] ),
-    .IN(\mprj_pads.io_in[5] ),
-    .INP_DIS(\mprj_io_inp_dis[5] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[5] ),
-    .OUT(\mprj_io_out[5] ),
-    .PAD(\mprj_io[5] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[5] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[5] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[5] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[5] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[6]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[6] ),
-    .ANALOG_POL(\mprj_io_analog_pol[6] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[6] ),
-    .DM({ \mprj_io_dm[20] , \mprj_io_dm[19] , \mprj_io_dm[18]  }),
-    .ENABLE_H(\mprj_io_enh[6] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[6] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[6] ),
-    .HLD_OVR(\mprj_io_holdover[6] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[6] ),
-    .IN(\mprj_pads.io_in[6] ),
-    .INP_DIS(\mprj_io_inp_dis[6] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[6] ),
-    .OUT(\mprj_io_out[6] ),
-    .PAD(\mprj_io[6] ),
-    .PAD_A_ESD_0_H(\mprj_pads.no_connect[6] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[6] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[6] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[6] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[7]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[7] ),
-    .ANALOG_POL(\mprj_io_analog_pol[7] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[7] ),
-    .DM({ \mprj_io_dm[23] , \mprj_io_dm[22] , \mprj_io_dm[21]  }),
-    .ENABLE_H(\mprj_io_enh[7] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[7] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[7] ),
-    .HLD_OVR(\mprj_io_holdover[7] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[7] ),
-    .IN(\mprj_pads.io_in[7] ),
-    .INP_DIS(\mprj_io_inp_dis[7] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[7] ),
-    .OUT(\mprj_io_out[7] ),
-    .PAD(\mprj_io[7] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[0] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[7] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[7] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[7] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[8]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[8] ),
-    .ANALOG_POL(\mprj_io_analog_pol[8] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[8] ),
-    .DM({ \mprj_io_dm[26] , \mprj_io_dm[25] , \mprj_io_dm[24]  }),
-    .ENABLE_H(\mprj_io_enh[8] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[8] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[8] ),
-    .HLD_OVR(\mprj_io_holdover[8] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[8] ),
-    .IN(\mprj_pads.io_in[8] ),
-    .INP_DIS(\mprj_io_inp_dis[8] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[8] ),
-    .OUT(\mprj_io_out[8] ),
-    .PAD(\mprj_io[8] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[1] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[8] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[8] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[8] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area1_io_pad[9]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[9] ),
-    .ANALOG_POL(\mprj_io_analog_pol[9] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[9] ),
-    .DM({ \mprj_io_dm[29] , \mprj_io_dm[28] , \mprj_io_dm[27]  }),
-    .ENABLE_H(\mprj_io_enh[9] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[9] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[9] ),
-    .HLD_OVR(\mprj_io_holdover[9] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[9] ),
-    .IN(\mprj_pads.io_in[9] ),
-    .INP_DIS(\mprj_io_inp_dis[9] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[9] ),
-    .OUT(\mprj_io_out[9] ),
-    .PAD(\mprj_io[9] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[2] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[9] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[9] ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[9] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[18] ),
-    .ANALOG_POL(\mprj_io_analog_pol[18] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[18] ),
-    .DM({ \mprj_io_dm[56] , \mprj_io_dm[55] , \mprj_io_dm[54]  }),
-    .ENABLE_H(\mprj_io_enh[18] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[18] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[18] ),
-    .HLD_OVR(\mprj_io_holdover[18] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[18] ),
-    .IN(\mprj_pads.io_in[18] ),
-    .INP_DIS(\mprj_io_inp_dis[18] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[18] ),
-    .OUT(\mprj_io_out[18] ),
-    .PAD(\mprj_io[18] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[11] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[18] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[18] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[18] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[10]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[28] ),
-    .ANALOG_POL(\mprj_io_analog_pol[28] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[28] ),
-    .DM({ \mprj_io_dm[86] , \mprj_io_dm[85] , \mprj_io_dm[84]  }),
-    .ENABLE_H(\mprj_io_enh[28] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[28] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[28] ),
-    .HLD_OVR(\mprj_io_holdover[28] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[28] ),
-    .IN(\mprj_pads.io_in[28] ),
-    .INP_DIS(\mprj_io_inp_dis[28] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[28] ),
-    .OUT(\mprj_io_out[28] ),
-    .PAD(\mprj_io[28] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[21] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[28] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[28] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[28] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[11]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[29] ),
-    .ANALOG_POL(\mprj_io_analog_pol[29] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[29] ),
-    .DM({ \mprj_io_dm[89] , \mprj_io_dm[88] , \mprj_io_dm[87]  }),
-    .ENABLE_H(\mprj_io_enh[29] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[29] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[29] ),
-    .HLD_OVR(\mprj_io_holdover[29] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[29] ),
-    .IN(\mprj_pads.io_in[29] ),
-    .INP_DIS(\mprj_io_inp_dis[29] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[29] ),
-    .OUT(\mprj_io_out[29] ),
-    .PAD(\mprj_io[29] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[22] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[29] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[29] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[29] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[12]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[30] ),
-    .ANALOG_POL(\mprj_io_analog_pol[30] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[30] ),
-    .DM({ \mprj_io_dm[92] , \mprj_io_dm[91] , \mprj_io_dm[90]  }),
-    .ENABLE_H(\mprj_io_enh[30] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[30] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[30] ),
-    .HLD_OVR(\mprj_io_holdover[30] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[30] ),
-    .IN(\mprj_pads.io_in[30] ),
-    .INP_DIS(\mprj_io_inp_dis[30] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[30] ),
-    .OUT(\mprj_io_out[30] ),
-    .PAD(\mprj_io[30] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[23] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[30] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[30] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[30] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[13]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[31] ),
-    .ANALOG_POL(\mprj_io_analog_pol[31] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[31] ),
-    .DM({ \mprj_io_dm[95] , \mprj_io_dm[94] , \mprj_io_dm[93]  }),
-    .ENABLE_H(\mprj_io_enh[31] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[31] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[31] ),
-    .HLD_OVR(\mprj_io_holdover[31] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[31] ),
-    .IN(\mprj_pads.io_in[31] ),
-    .INP_DIS(\mprj_io_inp_dis[31] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[31] ),
-    .OUT(\mprj_io_out[31] ),
-    .PAD(\mprj_io[31] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[24] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[31] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[31] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[31] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[14]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[32] ),
-    .ANALOG_POL(\mprj_io_analog_pol[32] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[32] ),
-    .DM({ \mprj_io_dm[98] , \mprj_io_dm[97] , \mprj_io_dm[96]  }),
-    .ENABLE_H(\mprj_io_enh[32] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[32] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[32] ),
-    .HLD_OVR(\mprj_io_holdover[32] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[32] ),
-    .IN(\mprj_pads.io_in[32] ),
-    .INP_DIS(\mprj_io_inp_dis[32] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[32] ),
-    .OUT(\mprj_io_out[32] ),
-    .PAD(\mprj_io[32] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[25] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[32] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[32] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[32] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[15]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[33] ),
-    .ANALOG_POL(\mprj_io_analog_pol[33] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[33] ),
-    .DM({ \mprj_io_dm[101] , \mprj_io_dm[100] , \mprj_io_dm[99]  }),
-    .ENABLE_H(\mprj_io_enh[33] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[33] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[33] ),
-    .HLD_OVR(\mprj_io_holdover[33] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[33] ),
-    .IN(\mprj_pads.io_in[33] ),
-    .INP_DIS(\mprj_io_inp_dis[33] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[33] ),
-    .OUT(\mprj_io_out[33] ),
-    .PAD(\mprj_io[33] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[26] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[33] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[33] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[33] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[16]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[34] ),
-    .ANALOG_POL(\mprj_io_analog_pol[34] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[34] ),
-    .DM({ \mprj_io_dm[104] , \mprj_io_dm[103] , \mprj_io_dm[102]  }),
-    .ENABLE_H(\mprj_io_enh[34] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[34] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[34] ),
-    .HLD_OVR(\mprj_io_holdover[34] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[34] ),
-    .IN(\mprj_pads.io_in[34] ),
-    .INP_DIS(\mprj_io_inp_dis[34] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[34] ),
-    .OUT(\mprj_io_out[34] ),
-    .PAD(\mprj_io[34] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[27] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[34] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[34] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[34] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[17]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[35] ),
-    .ANALOG_POL(\mprj_io_analog_pol[35] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[35] ),
-    .DM({ \mprj_io_dm[107] , \mprj_io_dm[106] , \mprj_io_dm[105]  }),
-    .ENABLE_H(\mprj_io_enh[35] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[35] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[35] ),
-    .HLD_OVR(\mprj_io_holdover[35] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[35] ),
-    .IN(\mprj_pads.io_in[35] ),
-    .INP_DIS(\mprj_io_inp_dis[35] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[35] ),
-    .OUT(\mprj_io_out[35] ),
-    .PAD(\mprj_io[35] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[28] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[35] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[35] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[35] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[18]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[36] ),
-    .ANALOG_POL(\mprj_io_analog_pol[36] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[36] ),
-    .DM({ \mprj_io_dm[110] , \mprj_io_dm[109] , \mprj_io_dm[108]  }),
-    .ENABLE_H(\mprj_io_enh[36] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[36] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[36] ),
-    .HLD_OVR(\mprj_io_holdover[36] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[36] ),
-    .IN(\mprj_pads.io_in[36] ),
-    .INP_DIS(\mprj_io_inp_dis[36] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[36] ),
-    .OUT(\mprj_io_out[36] ),
-    .PAD(\mprj_io[36] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[29] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[36] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[36] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[36] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[19]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[37] ),
-    .ANALOG_POL(\mprj_io_analog_pol[37] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[37] ),
-    .DM({ \mprj_io_dm[113] , \mprj_io_dm[112] , \mprj_io_dm[111]  }),
-    .ENABLE_H(\mprj_io_enh[37] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[37] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[37] ),
-    .HLD_OVR(\mprj_io_holdover[37] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[37] ),
-    .IN(\mprj_pads.io_in[37] ),
-    .INP_DIS(\mprj_io_inp_dis[37] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[37] ),
-    .OUT(\mprj_io_out[37] ),
-    .PAD(\mprj_io[37] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[30] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[37] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[37] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[37] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[19] ),
-    .ANALOG_POL(\mprj_io_analog_pol[19] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[19] ),
-    .DM({ \mprj_io_dm[59] , \mprj_io_dm[58] , \mprj_io_dm[57]  }),
-    .ENABLE_H(\mprj_io_enh[19] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[19] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[19] ),
-    .HLD_OVR(\mprj_io_holdover[19] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[19] ),
-    .IN(\mprj_pads.io_in[19] ),
-    .INP_DIS(\mprj_io_inp_dis[19] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[19] ),
-    .OUT(\mprj_io_out[19] ),
-    .PAD(\mprj_io[19] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[12] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[19] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[19] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[19] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[2]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[20] ),
-    .ANALOG_POL(\mprj_io_analog_pol[20] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[20] ),
-    .DM({ \mprj_io_dm[62] , \mprj_io_dm[61] , \mprj_io_dm[60]  }),
-    .ENABLE_H(\mprj_io_enh[20] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[20] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[20] ),
-    .HLD_OVR(\mprj_io_holdover[20] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[20] ),
-    .IN(\mprj_pads.io_in[20] ),
-    .INP_DIS(\mprj_io_inp_dis[20] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[20] ),
-    .OUT(\mprj_io_out[20] ),
-    .PAD(\mprj_io[20] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[13] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[20] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[20] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[20] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[3]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[21] ),
-    .ANALOG_POL(\mprj_io_analog_pol[21] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[21] ),
-    .DM({ \mprj_io_dm[65] , \mprj_io_dm[64] , \mprj_io_dm[63]  }),
-    .ENABLE_H(\mprj_io_enh[21] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[21] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[21] ),
-    .HLD_OVR(\mprj_io_holdover[21] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[21] ),
-    .IN(\mprj_pads.io_in[21] ),
-    .INP_DIS(\mprj_io_inp_dis[21] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[21] ),
-    .OUT(\mprj_io_out[21] ),
-    .PAD(\mprj_io[21] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[14] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[21] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[21] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[21] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[4]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[22] ),
-    .ANALOG_POL(\mprj_io_analog_pol[22] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[22] ),
-    .DM({ \mprj_io_dm[68] , \mprj_io_dm[67] , \mprj_io_dm[66]  }),
-    .ENABLE_H(\mprj_io_enh[22] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[22] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[22] ),
-    .HLD_OVR(\mprj_io_holdover[22] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[22] ),
-    .IN(\mprj_pads.io_in[22] ),
-    .INP_DIS(\mprj_io_inp_dis[22] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[22] ),
-    .OUT(\mprj_io_out[22] ),
-    .PAD(\mprj_io[22] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[15] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[22] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[22] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[22] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[5]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[23] ),
-    .ANALOG_POL(\mprj_io_analog_pol[23] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[23] ),
-    .DM({ \mprj_io_dm[71] , \mprj_io_dm[70] , \mprj_io_dm[69]  }),
-    .ENABLE_H(\mprj_io_enh[23] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[23] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[23] ),
-    .HLD_OVR(\mprj_io_holdover[23] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[23] ),
-    .IN(\mprj_pads.io_in[23] ),
-    .INP_DIS(\mprj_io_inp_dis[23] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[23] ),
-    .OUT(\mprj_io_out[23] ),
-    .PAD(\mprj_io[23] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[16] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[23] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[23] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[23] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[6]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[24] ),
-    .ANALOG_POL(\mprj_io_analog_pol[24] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[24] ),
-    .DM({ \mprj_io_dm[74] , \mprj_io_dm[73] , \mprj_io_dm[72]  }),
-    .ENABLE_H(\mprj_io_enh[24] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[24] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[24] ),
-    .HLD_OVR(\mprj_io_holdover[24] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[24] ),
-    .IN(\mprj_pads.io_in[24] ),
-    .INP_DIS(\mprj_io_inp_dis[24] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[24] ),
-    .OUT(\mprj_io_out[24] ),
-    .PAD(\mprj_io[24] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[17] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[24] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[24] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[24] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[7]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[25] ),
-    .ANALOG_POL(\mprj_io_analog_pol[25] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[25] ),
-    .DM({ \mprj_io_dm[77] , \mprj_io_dm[76] , \mprj_io_dm[75]  }),
-    .ENABLE_H(\mprj_io_enh[25] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[25] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[25] ),
-    .HLD_OVR(\mprj_io_holdover[25] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[25] ),
-    .IN(\mprj_pads.io_in[25] ),
-    .INP_DIS(\mprj_io_inp_dis[25] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[25] ),
-    .OUT(\mprj_io_out[25] ),
-    .PAD(\mprj_io[25] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[18] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[25] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[25] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[25] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[8]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[26] ),
-    .ANALOG_POL(\mprj_io_analog_pol[26] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[26] ),
-    .DM({ \mprj_io_dm[80] , \mprj_io_dm[79] , \mprj_io_dm[78]  }),
-    .ENABLE_H(\mprj_io_enh[26] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[26] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[26] ),
-    .HLD_OVR(\mprj_io_holdover[26] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[26] ),
-    .IN(\mprj_pads.io_in[26] ),
-    .INP_DIS(\mprj_io_inp_dis[26] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[26] ),
-    .OUT(\mprj_io_out[26] ),
-    .PAD(\mprj_io[26] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[19] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[26] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[26] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[26] )
-  );
-  sky130_ef_io__gpiov2_pad_wrapped \mprj_pads.area2_io_pad[9]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .ANALOG_EN(\mprj_io_analog_en[27] ),
-    .ANALOG_POL(\mprj_io_analog_pol[27] ),
-    .ANALOG_SEL(\mprj_io_analog_sel[27] ),
-    .DM({ \mprj_io_dm[83] , \mprj_io_dm[82] , \mprj_io_dm[81]  }),
-    .ENABLE_H(\mprj_io_enh[27] ),
-    .ENABLE_INP_H(\mprj_pads.loop1_io[27] ),
-    .ENABLE_VDDA_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .ENABLE_VSWITCH_H(vssio),
-    .HLD_H_N(\mprj_io_hldh_n[27] ),
-    .HLD_OVR(\mprj_io_holdover[27] ),
-    .IB_MODE_SEL(\mprj_io_ib_mode_sel[27] ),
-    .IN(\mprj_pads.io_in[27] ),
-    .INP_DIS(\mprj_io_inp_dis[27] ),
-    .IN_H(),
-    .OE_N(\mprj_io_oeb[27] ),
-    .OUT(\mprj_io_out[27] ),
-    .PAD(\mprj_io[27] ),
-    .PAD_A_ESD_0_H(\mprj_analog_io[20] ),
-    .PAD_A_ESD_1_H(),
-    .PAD_A_NOESD_H(),
-    .SLOW(\mprj_io_slow_sel[27] ),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(\mprj_pads.loop1_io[27] ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .VTRIP_SEL(\mprj_io_vtrip_sel[27] )
-  );
-  sky130_fd_io__top_xres4v2 resetb_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .DISABLE_PULLUP_H(vssio),
-    .ENABLE_H(porb_h),
-    .ENABLE_VDDIO(vccd),
-    .EN_VDDIO_SIG_H(vssio),
-    .FILT_IN_H(vssio),
-    .INP_SEL_H(vssio),
-    .PAD(resetb),
-    .PAD_A_ESD_H(xresloop),
-    .PULLUP_H(vssio),
-    .TIE_HI_ESD(),
-    .TIE_LO_ESD(),
-    .TIE_WEAK_HI_H(xresloop),
-    .VCCD(vccd),
-    .VCCHIB(vccd),
-    .VDDA(vdda),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa),
-    .VSSD(vssd),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio),
-    .XRES_H_N(resetb_core_h)
-  );
-  sky130_ef_io__corner_pad user1_corner (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vccd_lvc_clamped2_pad user1_vccd_lvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vdda_hvc_clamped_pad \user1_vdda_hvclamp_pad[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vdda_hvc_clamped_pad \user1_vdda_hvclamp_pad[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssa_hvc_clamped_pad \user1_vssa_hvclamp_pad[0]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssa_hvc_clamped_pad \user1_vssa_hvclamp_pad[1]  (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssd_lvc_clamped2_pad user1_vssd_lvclmap_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd1),
-    .VCCHIB(vccd),
-    .VDDA(vdda1),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa1),
-    .VSSD(vssd1),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__corner_pad user2_corner (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vccd_lvc_clamped2_pad user2_vccd_lvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vdda_hvc_clamped_pad user2_vdda_hvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssa_hvc_clamped_pad user2_vssa_hvclamp_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  sky130_ef_io__vssd_lvc_clamped2_pad user2_vssd_lvclmap_pad (
-    .AMUXBUS_A(\mprj_pads.analog_a ),
-    .AMUXBUS_B(\mprj_pads.analog_b ),
-    .VCCD(vccd2),
-    .VCCHIB(vccd),
-    .VDDA(vdda2),
-    .VDDIO(vddio),
-    .VDDIO_Q(\mprj_pads.vddio_q ),
-    .VSSA(vssa2),
-    .VSSD(vssd2),
-    .VSSIO(vssio),
-    .VSSIO_Q(\mprj_pads.vssio_q ),
-    .VSWITCH(vddio)
-  );
-  assign \mprj_pads.slow_sel[19]  = \mprj_io_slow_sel[19] ;
-  assign \mprj_pads.slow_sel[18]  = \mprj_io_slow_sel[18] ;
-  assign \mprj_pads.slow_sel[17]  = \mprj_io_slow_sel[17] ;
-  assign \mprj_pads.slow_sel[16]  = \mprj_io_slow_sel[16] ;
-  assign \mprj_pads.slow_sel[15]  = \mprj_io_slow_sel[15] ;
-  assign \mprj_pads.slow_sel[14]  = \mprj_io_slow_sel[14] ;
-  assign \mprj_pads.slow_sel[13]  = \mprj_io_slow_sel[13] ;
-  assign \mprj_pads.slow_sel[12]  = \mprj_io_slow_sel[12] ;
-  assign \mprj_pads.slow_sel[11]  = \mprj_io_slow_sel[11] ;
-  assign \mprj_pads.slow_sel[10]  = \mprj_io_slow_sel[10] ;
-  assign \mprj_pads.slow_sel[9]  = \mprj_io_slow_sel[9] ;
-  assign \mprj_pads.slow_sel[8]  = \mprj_io_slow_sel[8] ;
-  assign \mprj_pads.slow_sel[7]  = \mprj_io_slow_sel[7] ;
-  assign \mprj_pads.slow_sel[6]  = \mprj_io_slow_sel[6] ;
-  assign \mprj_pads.slow_sel[5]  = \mprj_io_slow_sel[5] ;
-  assign \mprj_pads.slow_sel[4]  = \mprj_io_slow_sel[4] ;
-  assign \mprj_pads.slow_sel[3]  = \mprj_io_slow_sel[3] ;
-  assign \mprj_pads.slow_sel[2]  = \mprj_io_slow_sel[2] ;
-  assign \mprj_pads.slow_sel[1]  = \mprj_io_slow_sel[1] ;
-  assign \mprj_pads.slow_sel[0]  = \mprj_io_slow_sel[0] ;
-  assign \mprj_pads.enh[37]  = \mprj_io_enh[37] ;
-  assign \mprj_pads.enh[36]  = \mprj_io_enh[36] ;
-  assign \mprj_pads.enh[35]  = \mprj_io_enh[35] ;
-  assign \mprj_pads.enh[34]  = \mprj_io_enh[34] ;
-  assign \mprj_pads.enh[33]  = \mprj_io_enh[33] ;
-  assign \mprj_pads.enh[32]  = \mprj_io_enh[32] ;
-  assign \mprj_pads.enh[31]  = \mprj_io_enh[31] ;
-  assign \mprj_pads.enh[30]  = \mprj_io_enh[30] ;
-  assign \mprj_pads.enh[29]  = \mprj_io_enh[29] ;
-  assign \mprj_pads.enh[28]  = \mprj_io_enh[28] ;
-  assign \mprj_pads.enh[27]  = \mprj_io_enh[27] ;
-  assign \mprj_pads.enh[26]  = \mprj_io_enh[26] ;
-  assign \mprj_pads.enh[25]  = \mprj_io_enh[25] ;
-  assign \mprj_pads.enh[24]  = \mprj_io_enh[24] ;
-  assign \mprj_pads.enh[23]  = \mprj_io_enh[23] ;
-  assign \mprj_pads.enh[22]  = \mprj_io_enh[22] ;
-  assign \mprj_pads.enh[21]  = \mprj_io_enh[21] ;
-  assign \mprj_pads.enh[20]  = \mprj_io_enh[20] ;
-  assign \mprj_pads.enh[19]  = \mprj_io_enh[19] ;
-  assign \mprj_pads.enh[18]  = \mprj_io_enh[18] ;
-  assign \mprj_pads.enh[17]  = \mprj_io_enh[17] ;
-  assign \mprj_pads.enh[16]  = \mprj_io_enh[16] ;
-  assign \mprj_pads.enh[15]  = \mprj_io_enh[15] ;
-  assign \mprj_pads.enh[14]  = \mprj_io_enh[14] ;
-  assign \mprj_pads.enh[13]  = \mprj_io_enh[13] ;
-  assign \mprj_pads.enh[12]  = \mprj_io_enh[12] ;
-  assign \mprj_pads.enh[11]  = \mprj_io_enh[11] ;
-  assign \mprj_pads.enh[10]  = \mprj_io_enh[10] ;
-  assign \mprj_pads.enh[9]  = \mprj_io_enh[9] ;
-  assign \mprj_pads.enh[8]  = \mprj_io_enh[8] ;
-  assign \mprj_pads.enh[7]  = \mprj_io_enh[7] ;
-  assign \mprj_pads.enh[6]  = \mprj_io_enh[6] ;
-  assign \mprj_pads.enh[5]  = \mprj_io_enh[5] ;
-  assign \mprj_pads.enh[4]  = \mprj_io_enh[4] ;
-  assign \mprj_pads.enh[3]  = \mprj_io_enh[3] ;
-  assign \mprj_pads.enh[2]  = \mprj_io_enh[2] ;
-  assign \mprj_pads.enh[1]  = \mprj_io_enh[1] ;
-  assign \mprj_pads.enh[0]  = \mprj_io_enh[0] ;
-  assign \mprj_pads.hldh_n[37]  = \mprj_io_hldh_n[37] ;
-  assign \mprj_pads.hldh_n[36]  = \mprj_io_hldh_n[36] ;
-  assign \mprj_pads.hldh_n[35]  = \mprj_io_hldh_n[35] ;
-  assign \mprj_pads.hldh_n[34]  = \mprj_io_hldh_n[34] ;
-  assign \mprj_pads.hldh_n[33]  = \mprj_io_hldh_n[33] ;
-  assign \mprj_pads.hldh_n[32]  = \mprj_io_hldh_n[32] ;
-  assign \mprj_pads.hldh_n[31]  = \mprj_io_hldh_n[31] ;
-  assign \mprj_pads.hldh_n[30]  = \mprj_io_hldh_n[30] ;
-  assign \mprj_pads.hldh_n[29]  = \mprj_io_hldh_n[29] ;
-  assign \mprj_pads.hldh_n[28]  = \mprj_io_hldh_n[28] ;
-  assign \mprj_pads.hldh_n[27]  = \mprj_io_hldh_n[27] ;
-  assign \mprj_pads.hldh_n[26]  = \mprj_io_hldh_n[26] ;
-  assign \mprj_pads.hldh_n[25]  = \mprj_io_hldh_n[25] ;
-  assign \mprj_pads.hldh_n[24]  = \mprj_io_hldh_n[24] ;
-  assign \mprj_pads.hldh_n[23]  = \mprj_io_hldh_n[23] ;
-  assign \mprj_pads.hldh_n[22]  = \mprj_io_hldh_n[22] ;
-  assign \mprj_pads.hldh_n[21]  = \mprj_io_hldh_n[21] ;
-  assign \mprj_pads.hldh_n[20]  = \mprj_io_hldh_n[20] ;
-  assign \mprj_pads.hldh_n[19]  = \mprj_io_hldh_n[19] ;
-  assign \mprj_pads.hldh_n[18]  = \mprj_io_hldh_n[18] ;
-  assign \mprj_pads.hldh_n[17]  = \mprj_io_hldh_n[17] ;
-  assign \mprj_pads.hldh_n[16]  = \mprj_io_hldh_n[16] ;
-  assign \mprj_pads.hldh_n[15]  = \mprj_io_hldh_n[15] ;
-  assign \mprj_pads.hldh_n[14]  = \mprj_io_hldh_n[14] ;
-  assign \mprj_pads.hldh_n[13]  = \mprj_io_hldh_n[13] ;
-  assign \mprj_pads.hldh_n[12]  = \mprj_io_hldh_n[12] ;
-  assign \mprj_pads.hldh_n[11]  = \mprj_io_hldh_n[11] ;
-  assign \mprj_pads.hldh_n[10]  = \mprj_io_hldh_n[10] ;
-  assign \mprj_pads.hldh_n[9]  = \mprj_io_hldh_n[9] ;
-  assign \mprj_pads.hldh_n[8]  = \mprj_io_hldh_n[8] ;
-  assign \mprj_pads.hldh_n[7]  = \mprj_io_hldh_n[7] ;
-  assign \mprj_pads.hldh_n[6]  = \mprj_io_hldh_n[6] ;
-  assign \mprj_pads.hldh_n[5]  = \mprj_io_hldh_n[5] ;
-  assign \mprj_pads.hldh_n[4]  = \mprj_io_hldh_n[4] ;
-  assign \mprj_pads.hldh_n[3]  = \mprj_io_hldh_n[3] ;
-  assign \mprj_pads.hldh_n[2]  = \mprj_io_hldh_n[2] ;
-  assign \mprj_pads.hldh_n[1]  = \mprj_io_hldh_n[1] ;
-  assign \mprj_pads.hldh_n[0]  = \mprj_io_hldh_n[0] ;
-  assign \mprj_pads.io[37]  = \mprj_io[37] ;
-  assign \mprj_pads.io[36]  = \mprj_io[36] ;
-  assign \mprj_pads.io[35]  = \mprj_io[35] ;
-  assign \mprj_pads.io[34]  = \mprj_io[34] ;
-  assign \mprj_pads.io[33]  = \mprj_io[33] ;
-  assign \mprj_pads.io[32]  = \mprj_io[32] ;
-  assign \mprj_pads.io[31]  = \mprj_io[31] ;
-  assign \mprj_pads.io[30]  = \mprj_io[30] ;
-  assign \mprj_pads.io[29]  = \mprj_io[29] ;
-  assign \mprj_pads.io[28]  = \mprj_io[28] ;
-  assign \mprj_pads.io[27]  = \mprj_io[27] ;
-  assign \mprj_pads.io[26]  = \mprj_io[26] ;
-  assign \mprj_pads.io[25]  = \mprj_io[25] ;
-  assign \mprj_pads.io[24]  = \mprj_io[24] ;
-  assign \mprj_pads.io[23]  = \mprj_io[23] ;
-  assign \mprj_pads.io[22]  = \mprj_io[22] ;
-  assign \mprj_pads.io[21]  = \mprj_io[21] ;
-  assign \mprj_pads.io[20]  = \mprj_io[20] ;
-  assign \mprj_pads.io[19]  = \mprj_io[19] ;
-  assign \mprj_pads.io[18]  = \mprj_io[18] ;
-  assign \mprj_pads.io[17]  = \mprj_io[17] ;
-  assign \mprj_pads.io[16]  = \mprj_io[16] ;
-  assign \mprj_pads.io[15]  = \mprj_io[15] ;
-  assign \mprj_pads.io[14]  = \mprj_io[14] ;
-  assign \mprj_pads.io[13]  = \mprj_io[13] ;
-  assign \mprj_pads.io[12]  = \mprj_io[12] ;
-  assign \mprj_pads.io[11]  = \mprj_io[11] ;
-  assign \mprj_pads.io[10]  = \mprj_io[10] ;
-  assign \mprj_pads.io[9]  = \mprj_io[9] ;
-  assign \mprj_pads.io[8]  = \mprj_io[8] ;
-  assign \mprj_pads.io[7]  = \mprj_io[7] ;
-  assign \mprj_pads.io[6]  = \mprj_io[6] ;
-  assign \mprj_pads.io[5]  = \mprj_io[5] ;
-  assign \mprj_pads.io[4]  = \mprj_io[4] ;
-  assign \mprj_pads.io[3]  = \mprj_io[3] ;
-  assign \mprj_pads.io[2]  = \mprj_io[2] ;
-  assign \mprj_pads.io[1]  = \mprj_io[1] ;
-  assign \mprj_pads.io[0]  = \mprj_io[0] ;
-  assign \mprj_pads.analog_io[30]  = \mprj_analog_io[30] ;
-  assign \mprj_pads.analog_io[29]  = \mprj_analog_io[29] ;
-  assign \mprj_pads.analog_io[28]  = \mprj_analog_io[28] ;
-  assign \mprj_pads.analog_io[27]  = \mprj_analog_io[27] ;
-  assign \mprj_pads.analog_io[26]  = \mprj_analog_io[26] ;
-  assign \mprj_pads.analog_io[25]  = \mprj_analog_io[25] ;
-  assign \mprj_pads.analog_io[24]  = \mprj_analog_io[24] ;
-  assign \mprj_pads.analog_io[23]  = \mprj_analog_io[23] ;
-  assign \mprj_pads.analog_io[22]  = \mprj_analog_io[22] ;
-  assign \mprj_pads.analog_io[21]  = \mprj_analog_io[21] ;
-  assign \mprj_pads.analog_io[20]  = \mprj_analog_io[20] ;
-  assign \mprj_pads.analog_io[19]  = \mprj_analog_io[19] ;
-  assign \mprj_pads.analog_io[18]  = \mprj_analog_io[18] ;
-  assign \mprj_pads.analog_io[17]  = \mprj_analog_io[17] ;
-  assign \mprj_pads.analog_io[16]  = \mprj_analog_io[16] ;
-  assign \mprj_pads.analog_io[15]  = \mprj_analog_io[15] ;
-  assign \mprj_pads.analog_io[14]  = \mprj_analog_io[14] ;
-  assign \mprj_pads.analog_io[13]  = \mprj_analog_io[13] ;
-  assign \mprj_pads.analog_io[12]  = \mprj_analog_io[12] ;
-  assign \mprj_pads.analog_io[11]  = \mprj_analog_io[11] ;
-  assign \mprj_pads.analog_io[10]  = \mprj_analog_io[10] ;
-  assign \mprj_pads.analog_io[9]  = \mprj_analog_io[9] ;
-  assign \mprj_pads.analog_io[8]  = \mprj_analog_io[8] ;
-  assign \mprj_pads.analog_io[7]  = \mprj_analog_io[7] ;
-  assign \mprj_pads.analog_io[6]  = \mprj_analog_io[6] ;
-  assign \mprj_pads.analog_io[5]  = \mprj_analog_io[5] ;
-  assign \mprj_pads.analog_io[4]  = \mprj_analog_io[4] ;
-  assign \mprj_pads.analog_io[3]  = \mprj_analog_io[3] ;
-  assign \mprj_pads.analog_io[2]  = \mprj_analog_io[2] ;
-  assign \mprj_pads.analog_io[1]  = \mprj_analog_io[1] ;
-  assign \mprj_pads.analog_io[0]  = \mprj_analog_io[0] ;
-  assign \flash_io1_mode[2]  = flash_io1_ieb_core;
-  assign \flash_io1_mode[1]  = flash_io1_ieb_core;
-  assign \flash_io1_mode[0]  = flash_io1_oeb_core;
-  assign \dm_all[2]  = gpio_mode1_core;
-  assign \dm_all[1]  = gpio_mode1_core;
-  assign \dm_all[0]  = gpio_mode0_core;
-  assign \mprj_pads.analog_sel[37]  = \mprj_io_analog_sel[37] ;
-  assign \mprj_pads.analog_sel[36]  = \mprj_io_analog_sel[36] ;
-  assign \mprj_pads.analog_sel[35]  = \mprj_io_analog_sel[35] ;
-  assign \mprj_pads.analog_sel[34]  = \mprj_io_analog_sel[34] ;
-  assign \mprj_pads.analog_sel[33]  = \mprj_io_analog_sel[33] ;
-  assign \mprj_pads.analog_sel[32]  = \mprj_io_analog_sel[32] ;
-  assign \mprj_pads.analog_sel[31]  = \mprj_io_analog_sel[31] ;
-  assign \mprj_pads.analog_sel[30]  = \mprj_io_analog_sel[30] ;
-  assign \mprj_pads.analog_sel[29]  = \mprj_io_analog_sel[29] ;
-  assign \mprj_pads.analog_sel[28]  = \mprj_io_analog_sel[28] ;
-  assign \mprj_pads.analog_sel[27]  = \mprj_io_analog_sel[27] ;
-  assign \mprj_pads.analog_sel[26]  = \mprj_io_analog_sel[26] ;
-  assign \mprj_pads.analog_sel[25]  = \mprj_io_analog_sel[25] ;
-  assign \mprj_pads.analog_sel[24]  = \mprj_io_analog_sel[24] ;
-  assign \mprj_pads.analog_sel[23]  = \mprj_io_analog_sel[23] ;
-  assign \mprj_pads.analog_sel[22]  = \mprj_io_analog_sel[22] ;
-  assign \mprj_pads.analog_sel[21]  = \mprj_io_analog_sel[21] ;
-  assign \mprj_pads.analog_sel[20]  = \mprj_io_analog_sel[20] ;
-  assign \mprj_pads.analog_sel[19]  = \mprj_io_analog_sel[19] ;
-  assign \mprj_pads.analog_sel[18]  = \mprj_io_analog_sel[18] ;
-  assign \mprj_pads.analog_sel[17]  = \mprj_io_analog_sel[17] ;
-  assign \mprj_pads.analog_sel[16]  = \mprj_io_analog_sel[16] ;
-  assign \mprj_pads.analog_sel[15]  = \mprj_io_analog_sel[15] ;
-  assign \mprj_pads.analog_sel[14]  = \mprj_io_analog_sel[14] ;
-  assign \mprj_pads.analog_sel[13]  = \mprj_io_analog_sel[13] ;
-  assign \mprj_pads.analog_sel[12]  = \mprj_io_analog_sel[12] ;
-  assign \mprj_pads.analog_sel[11]  = \mprj_io_analog_sel[11] ;
-  assign \mprj_pads.analog_sel[10]  = \mprj_io_analog_sel[10] ;
-  assign \mprj_pads.analog_sel[9]  = \mprj_io_analog_sel[9] ;
-  assign \mprj_pads.analog_sel[8]  = \mprj_io_analog_sel[8] ;
-  assign \mprj_pads.analog_sel[7]  = \mprj_io_analog_sel[7] ;
-  assign \mprj_pads.analog_sel[6]  = \mprj_io_analog_sel[6] ;
-  assign \mprj_pads.analog_sel[5]  = \mprj_io_analog_sel[5] ;
-  assign \mprj_pads.analog_sel[4]  = \mprj_io_analog_sel[4] ;
-  assign \mprj_pads.analog_sel[3]  = \mprj_io_analog_sel[3] ;
-  assign \mprj_pads.analog_sel[2]  = \mprj_io_analog_sel[2] ;
-  assign \mprj_pads.analog_sel[1]  = \mprj_io_analog_sel[1] ;
-  assign \mprj_pads.analog_sel[0]  = \mprj_io_analog_sel[0] ;
-  assign \mprj_pads.vtrip_sel[37]  = \mprj_io_vtrip_sel[37] ;
-  assign \mprj_pads.vtrip_sel[36]  = \mprj_io_vtrip_sel[36] ;
-  assign \mprj_pads.vtrip_sel[35]  = \mprj_io_vtrip_sel[35] ;
-  assign \mprj_pads.vtrip_sel[34]  = \mprj_io_vtrip_sel[34] ;
-  assign \mprj_pads.vtrip_sel[33]  = \mprj_io_vtrip_sel[33] ;
-  assign \mprj_pads.vtrip_sel[32]  = \mprj_io_vtrip_sel[32] ;
-  assign \mprj_pads.vtrip_sel[31]  = \mprj_io_vtrip_sel[31] ;
-  assign \mprj_pads.vtrip_sel[30]  = \mprj_io_vtrip_sel[30] ;
-  assign \mprj_pads.vtrip_sel[29]  = \mprj_io_vtrip_sel[29] ;
-  assign \mprj_pads.vtrip_sel[28]  = \mprj_io_vtrip_sel[28] ;
-  assign \mprj_pads.vtrip_sel[27]  = \mprj_io_vtrip_sel[27] ;
-  assign \mprj_pads.vtrip_sel[26]  = \mprj_io_vtrip_sel[26] ;
-  assign \mprj_pads.vtrip_sel[25]  = \mprj_io_vtrip_sel[25] ;
-  assign \mprj_pads.vtrip_sel[24]  = \mprj_io_vtrip_sel[24] ;
-  assign \mprj_pads.vtrip_sel[23]  = \mprj_io_vtrip_sel[23] ;
-  assign \mprj_pads.vtrip_sel[22]  = \mprj_io_vtrip_sel[22] ;
-  assign \mprj_pads.vtrip_sel[21]  = \mprj_io_vtrip_sel[21] ;
-  assign \mprj_pads.vtrip_sel[20]  = \mprj_io_vtrip_sel[20] ;
-  assign \mprj_pads.vtrip_sel[19]  = \mprj_io_vtrip_sel[19] ;
-  assign \mprj_pads.vtrip_sel[18]  = \mprj_io_vtrip_sel[18] ;
-  assign \mprj_pads.vtrip_sel[17]  = \mprj_io_vtrip_sel[17] ;
-  assign \mprj_pads.vtrip_sel[16]  = \mprj_io_vtrip_sel[16] ;
-  assign \mprj_pads.vtrip_sel[15]  = \mprj_io_vtrip_sel[15] ;
-  assign \mprj_pads.vtrip_sel[14]  = \mprj_io_vtrip_sel[14] ;
-  assign \mprj_pads.vtrip_sel[13]  = \mprj_io_vtrip_sel[13] ;
-  assign \mprj_pads.vtrip_sel[12]  = \mprj_io_vtrip_sel[12] ;
-  assign \mprj_pads.vtrip_sel[11]  = \mprj_io_vtrip_sel[11] ;
-  assign \mprj_pads.vtrip_sel[10]  = \mprj_io_vtrip_sel[10] ;
-  assign \mprj_pads.vtrip_sel[9]  = \mprj_io_vtrip_sel[9] ;
-  assign \mprj_pads.vtrip_sel[8]  = \mprj_io_vtrip_sel[8] ;
-  assign \mprj_pads.vtrip_sel[7]  = \mprj_io_vtrip_sel[7] ;
-  assign \mprj_pads.vtrip_sel[6]  = \mprj_io_vtrip_sel[6] ;
-  assign \mprj_pads.vtrip_sel[5]  = \mprj_io_vtrip_sel[5] ;
-  assign \mprj_pads.vtrip_sel[4]  = \mprj_io_vtrip_sel[4] ;
-  assign \mprj_pads.vtrip_sel[3]  = \mprj_io_vtrip_sel[3] ;
-  assign \mprj_pads.vtrip_sel[2]  = \mprj_io_vtrip_sel[2] ;
-  assign \mprj_pads.vtrip_sel[1]  = \mprj_io_vtrip_sel[1] ;
-  assign \mprj_pads.vtrip_sel[0]  = \mprj_io_vtrip_sel[0] ;
-  assign \mprj_pads.analog_pol[37]  = \mprj_io_analog_pol[37] ;
-  assign \mprj_pads.analog_pol[36]  = \mprj_io_analog_pol[36] ;
-  assign \mprj_pads.analog_pol[35]  = \mprj_io_analog_pol[35] ;
-  assign \mprj_pads.analog_pol[34]  = \mprj_io_analog_pol[34] ;
-  assign \mprj_pads.analog_pol[33]  = \mprj_io_analog_pol[33] ;
-  assign \mprj_pads.analog_pol[32]  = \mprj_io_analog_pol[32] ;
-  assign \mprj_pads.analog_pol[31]  = \mprj_io_analog_pol[31] ;
-  assign \mprj_pads.analog_pol[30]  = \mprj_io_analog_pol[30] ;
-  assign \mprj_pads.analog_pol[29]  = \mprj_io_analog_pol[29] ;
-  assign \mprj_pads.analog_pol[28]  = \mprj_io_analog_pol[28] ;
-  assign \mprj_pads.analog_pol[27]  = \mprj_io_analog_pol[27] ;
-  assign \mprj_pads.analog_pol[26]  = \mprj_io_analog_pol[26] ;
-  assign \mprj_pads.analog_pol[25]  = \mprj_io_analog_pol[25] ;
-  assign \mprj_pads.analog_pol[24]  = \mprj_io_analog_pol[24] ;
-  assign \mprj_pads.analog_pol[23]  = \mprj_io_analog_pol[23] ;
-  assign \mprj_pads.analog_pol[22]  = \mprj_io_analog_pol[22] ;
-  assign \mprj_pads.analog_pol[21]  = \mprj_io_analog_pol[21] ;
-  assign \mprj_pads.analog_pol[20]  = \mprj_io_analog_pol[20] ;
-  assign \mprj_pads.analog_pol[19]  = \mprj_io_analog_pol[19] ;
-  assign \mprj_pads.analog_pol[18]  = \mprj_io_analog_pol[18] ;
-  assign \mprj_pads.analog_pol[17]  = \mprj_io_analog_pol[17] ;
-  assign \mprj_pads.analog_pol[16]  = \mprj_io_analog_pol[16] ;
-  assign \mprj_pads.analog_pol[15]  = \mprj_io_analog_pol[15] ;
-  assign \mprj_pads.analog_pol[14]  = \mprj_io_analog_pol[14] ;
-  assign \mprj_pads.analog_pol[13]  = \mprj_io_analog_pol[13] ;
-  assign \mprj_pads.analog_pol[12]  = \mprj_io_analog_pol[12] ;
-  assign \mprj_pads.analog_pol[11]  = \mprj_io_analog_pol[11] ;
-  assign \mprj_pads.analog_pol[10]  = \mprj_io_analog_pol[10] ;
-  assign \mprj_pads.analog_pol[9]  = \mprj_io_analog_pol[9] ;
-  assign \mprj_pads.analog_pol[8]  = \mprj_io_analog_pol[8] ;
-  assign \mprj_pads.analog_pol[7]  = \mprj_io_analog_pol[7] ;
-  assign \mprj_pads.analog_pol[6]  = \mprj_io_analog_pol[6] ;
-  assign \mprj_pads.analog_pol[5]  = \mprj_io_analog_pol[5] ;
-  assign \mprj_pads.analog_pol[4]  = \mprj_io_analog_pol[4] ;
-  assign \mprj_pads.analog_pol[3]  = \mprj_io_analog_pol[3] ;
-  assign \mprj_pads.analog_pol[2]  = \mprj_io_analog_pol[2] ;
-  assign \mprj_pads.analog_pol[1]  = \mprj_io_analog_pol[1] ;
-  assign \mprj_pads.analog_pol[0]  = \mprj_io_analog_pol[0] ;
-  assign \mprj_pads.oeb[37]  = \mprj_io_oeb[37] ;
-  assign \mprj_pads.oeb[36]  = \mprj_io_oeb[36] ;
-  assign \mprj_pads.oeb[35]  = \mprj_io_oeb[35] ;
-  assign \mprj_pads.oeb[34]  = \mprj_io_oeb[34] ;
-  assign \mprj_pads.oeb[33]  = \mprj_io_oeb[33] ;
-  assign \mprj_pads.oeb[32]  = \mprj_io_oeb[32] ;
-  assign \mprj_pads.oeb[31]  = \mprj_io_oeb[31] ;
-  assign \mprj_pads.oeb[30]  = \mprj_io_oeb[30] ;
-  assign \mprj_pads.oeb[29]  = \mprj_io_oeb[29] ;
-  assign \mprj_pads.oeb[28]  = \mprj_io_oeb[28] ;
-  assign \mprj_pads.oeb[27]  = \mprj_io_oeb[27] ;
-  assign \mprj_pads.oeb[26]  = \mprj_io_oeb[26] ;
-  assign \mprj_pads.oeb[25]  = \mprj_io_oeb[25] ;
-  assign \mprj_pads.oeb[24]  = \mprj_io_oeb[24] ;
-  assign \mprj_pads.oeb[23]  = \mprj_io_oeb[23] ;
-  assign \mprj_pads.oeb[22]  = \mprj_io_oeb[22] ;
-  assign \mprj_pads.oeb[21]  = \mprj_io_oeb[21] ;
-  assign \mprj_pads.oeb[20]  = \mprj_io_oeb[20] ;
-  assign \mprj_pads.oeb[19]  = \mprj_io_oeb[19] ;
-  assign \mprj_pads.oeb[18]  = \mprj_io_oeb[18] ;
-  assign \mprj_pads.oeb[17]  = \mprj_io_oeb[17] ;
-  assign \mprj_pads.oeb[16]  = \mprj_io_oeb[16] ;
-  assign \mprj_pads.oeb[15]  = \mprj_io_oeb[15] ;
-  assign \mprj_pads.oeb[14]  = \mprj_io_oeb[14] ;
-  assign \mprj_pads.oeb[13]  = \mprj_io_oeb[13] ;
-  assign \mprj_pads.oeb[12]  = \mprj_io_oeb[12] ;
-  assign \mprj_pads.oeb[11]  = \mprj_io_oeb[11] ;
-  assign \mprj_pads.oeb[10]  = \mprj_io_oeb[10] ;
-  assign \mprj_pads.oeb[9]  = \mprj_io_oeb[9] ;
-  assign \mprj_pads.oeb[8]  = \mprj_io_oeb[8] ;
-  assign \mprj_pads.oeb[7]  = \mprj_io_oeb[7] ;
-  assign \mprj_pads.oeb[6]  = \mprj_io_oeb[6] ;
-  assign \mprj_pads.oeb[5]  = \mprj_io_oeb[5] ;
-  assign \mprj_pads.oeb[4]  = \mprj_io_oeb[4] ;
-  assign \mprj_pads.oeb[3]  = \mprj_io_oeb[3] ;
-  assign \mprj_pads.oeb[2]  = \mprj_io_oeb[2] ;
-  assign \mprj_pads.oeb[1]  = \mprj_io_oeb[1] ;
-  assign \mprj_pads.oeb[0]  = \mprj_io_oeb[0] ;
-  assign \mprj_pads.analog_en[37]  = \mprj_io_analog_en[37] ;
-  assign \mprj_pads.analog_en[36]  = \mprj_io_analog_en[36] ;
-  assign \mprj_pads.analog_en[35]  = \mprj_io_analog_en[35] ;
-  assign \mprj_pads.analog_en[34]  = \mprj_io_analog_en[34] ;
-  assign \mprj_pads.analog_en[33]  = \mprj_io_analog_en[33] ;
-  assign \mprj_pads.analog_en[32]  = \mprj_io_analog_en[32] ;
-  assign \mprj_pads.analog_en[31]  = \mprj_io_analog_en[31] ;
-  assign \mprj_pads.analog_en[30]  = \mprj_io_analog_en[30] ;
-  assign \mprj_pads.analog_en[29]  = \mprj_io_analog_en[29] ;
-  assign \mprj_pads.analog_en[28]  = \mprj_io_analog_en[28] ;
-  assign \mprj_pads.analog_en[27]  = \mprj_io_analog_en[27] ;
-  assign \mprj_pads.analog_en[26]  = \mprj_io_analog_en[26] ;
-  assign \mprj_pads.analog_en[25]  = \mprj_io_analog_en[25] ;
-  assign \mprj_pads.analog_en[24]  = \mprj_io_analog_en[24] ;
-  assign \mprj_pads.analog_en[23]  = \mprj_io_analog_en[23] ;
-  assign \mprj_pads.analog_en[22]  = \mprj_io_analog_en[22] ;
-  assign \mprj_pads.analog_en[21]  = \mprj_io_analog_en[21] ;
-  assign \mprj_pads.analog_en[20]  = \mprj_io_analog_en[20] ;
-  assign \mprj_pads.analog_en[19]  = \mprj_io_analog_en[19] ;
-  assign \mprj_pads.analog_en[18]  = \mprj_io_analog_en[18] ;
-  assign \mprj_pads.analog_en[17]  = \mprj_io_analog_en[17] ;
-  assign \mprj_pads.analog_en[16]  = \mprj_io_analog_en[16] ;
-  assign \mprj_pads.analog_en[15]  = \mprj_io_analog_en[15] ;
-  assign \mprj_pads.analog_en[14]  = \mprj_io_analog_en[14] ;
-  assign \mprj_pads.analog_en[13]  = \mprj_io_analog_en[13] ;
-  assign \mprj_pads.analog_en[12]  = \mprj_io_analog_en[12] ;
-  assign \mprj_pads.analog_en[11]  = \mprj_io_analog_en[11] ;
-  assign \mprj_pads.analog_en[10]  = \mprj_io_analog_en[10] ;
-  assign \mprj_pads.analog_en[9]  = \mprj_io_analog_en[9] ;
-  assign \mprj_pads.analog_en[8]  = \mprj_io_analog_en[8] ;
-  assign \mprj_pads.analog_en[7]  = \mprj_io_analog_en[7] ;
-  assign \mprj_pads.analog_en[6]  = \mprj_io_analog_en[6] ;
-  assign \mprj_pads.analog_en[5]  = \mprj_io_analog_en[5] ;
-  assign \mprj_pads.analog_en[4]  = \mprj_io_analog_en[4] ;
-  assign \mprj_pads.analog_en[3]  = \mprj_io_analog_en[3] ;
-  assign \mprj_pads.analog_en[2]  = \mprj_io_analog_en[2] ;
-  assign \mprj_pads.analog_en[1]  = \mprj_io_analog_en[1] ;
-  assign \mprj_pads.analog_en[0]  = \mprj_io_analog_en[0] ;
-  assign \mprj_pads.dm[113]  = \mprj_io_dm[113] ;
-  assign \mprj_pads.dm[112]  = \mprj_io_dm[112] ;
-  assign \mprj_pads.dm[111]  = \mprj_io_dm[111] ;
-  assign \mprj_pads.dm[110]  = \mprj_io_dm[110] ;
-  assign \mprj_pads.dm[109]  = \mprj_io_dm[109] ;
-  assign \mprj_pads.dm[108]  = \mprj_io_dm[108] ;
-  assign \mprj_pads.dm[107]  = \mprj_io_dm[107] ;
-  assign \mprj_pads.dm[106]  = \mprj_io_dm[106] ;
-  assign \mprj_pads.dm[105]  = \mprj_io_dm[105] ;
-  assign \mprj_pads.dm[104]  = \mprj_io_dm[104] ;
-  assign \mprj_pads.dm[103]  = \mprj_io_dm[103] ;
-  assign \mprj_pads.dm[102]  = \mprj_io_dm[102] ;
-  assign \mprj_pads.dm[101]  = \mprj_io_dm[101] ;
-  assign \mprj_pads.dm[100]  = \mprj_io_dm[100] ;
-  assign \mprj_pads.dm[99]  = \mprj_io_dm[99] ;
-  assign \mprj_pads.dm[98]  = \mprj_io_dm[98] ;
-  assign \mprj_pads.dm[97]  = \mprj_io_dm[97] ;
-  assign \mprj_pads.dm[96]  = \mprj_io_dm[96] ;
-  assign \mprj_pads.dm[95]  = \mprj_io_dm[95] ;
-  assign \mprj_pads.dm[94]  = \mprj_io_dm[94] ;
-  assign \mprj_pads.dm[93]  = \mprj_io_dm[93] ;
-  assign \mprj_pads.dm[92]  = \mprj_io_dm[92] ;
-  assign \mprj_pads.dm[91]  = \mprj_io_dm[91] ;
-  assign \mprj_pads.dm[90]  = \mprj_io_dm[90] ;
-  assign \mprj_pads.dm[89]  = \mprj_io_dm[89] ;
-  assign \mprj_pads.dm[88]  = \mprj_io_dm[88] ;
-  assign \mprj_pads.dm[87]  = \mprj_io_dm[87] ;
-  assign \mprj_pads.dm[86]  = \mprj_io_dm[86] ;
-  assign \mprj_pads.dm[85]  = \mprj_io_dm[85] ;
-  assign \mprj_pads.dm[84]  = \mprj_io_dm[84] ;
-  assign \mprj_pads.dm[83]  = \mprj_io_dm[83] ;
-  assign \mprj_pads.dm[82]  = \mprj_io_dm[82] ;
-  assign \mprj_pads.dm[81]  = \mprj_io_dm[81] ;
-  assign \mprj_pads.dm[80]  = \mprj_io_dm[80] ;
-  assign \mprj_pads.dm[79]  = \mprj_io_dm[79] ;
-  assign \mprj_pads.dm[78]  = \mprj_io_dm[78] ;
-  assign \mprj_pads.dm[77]  = \mprj_io_dm[77] ;
-  assign \mprj_pads.dm[76]  = \mprj_io_dm[76] ;
-  assign \mprj_pads.dm[75]  = \mprj_io_dm[75] ;
-  assign \mprj_pads.dm[74]  = \mprj_io_dm[74] ;
-  assign \mprj_pads.dm[73]  = \mprj_io_dm[73] ;
-  assign \mprj_pads.dm[72]  = \mprj_io_dm[72] ;
-  assign \mprj_pads.dm[71]  = \mprj_io_dm[71] ;
-  assign \mprj_pads.dm[70]  = \mprj_io_dm[70] ;
-  assign \mprj_pads.dm[69]  = \mprj_io_dm[69] ;
-  assign \mprj_pads.dm[68]  = \mprj_io_dm[68] ;
-  assign \mprj_pads.dm[67]  = \mprj_io_dm[67] ;
-  assign \mprj_pads.dm[66]  = \mprj_io_dm[66] ;
-  assign \mprj_pads.dm[65]  = \mprj_io_dm[65] ;
-  assign \mprj_pads.dm[64]  = \mprj_io_dm[64] ;
-  assign \mprj_pads.dm[63]  = \mprj_io_dm[63] ;
-  assign \mprj_pads.dm[62]  = \mprj_io_dm[62] ;
-  assign \mprj_pads.dm[61]  = \mprj_io_dm[61] ;
-  assign \mprj_pads.dm[60]  = \mprj_io_dm[60] ;
-  assign \mprj_pads.dm[59]  = \mprj_io_dm[59] ;
-  assign \mprj_pads.dm[58]  = \mprj_io_dm[58] ;
-  assign \mprj_pads.dm[57]  = \mprj_io_dm[57] ;
-  assign \mprj_pads.dm[56]  = \mprj_io_dm[56] ;
-  assign \mprj_pads.dm[55]  = \mprj_io_dm[55] ;
-  assign \mprj_pads.dm[54]  = \mprj_io_dm[54] ;
-  assign \mprj_pads.dm[53]  = \mprj_io_dm[53] ;
-  assign \mprj_pads.dm[52]  = \mprj_io_dm[52] ;
-  assign \mprj_pads.dm[51]  = \mprj_io_dm[51] ;
-  assign \mprj_pads.dm[50]  = \mprj_io_dm[50] ;
-  assign \mprj_pads.dm[49]  = \mprj_io_dm[49] ;
-  assign \mprj_pads.dm[48]  = \mprj_io_dm[48] ;
-  assign \mprj_pads.dm[47]  = \mprj_io_dm[47] ;
-  assign \mprj_pads.dm[46]  = \mprj_io_dm[46] ;
-  assign \mprj_pads.dm[45]  = \mprj_io_dm[45] ;
-  assign \mprj_pads.dm[44]  = \mprj_io_dm[44] ;
-  assign \mprj_pads.dm[43]  = \mprj_io_dm[43] ;
-  assign \mprj_pads.dm[42]  = \mprj_io_dm[42] ;
-  assign \mprj_pads.dm[41]  = \mprj_io_dm[41] ;
-  assign \mprj_pads.dm[40]  = \mprj_io_dm[40] ;
-  assign \mprj_pads.dm[39]  = \mprj_io_dm[39] ;
-  assign \mprj_pads.dm[38]  = \mprj_io_dm[38] ;
-  assign \mprj_pads.dm[37]  = \mprj_io_dm[37] ;
-  assign \mprj_pads.dm[36]  = \mprj_io_dm[36] ;
-  assign \mprj_pads.dm[35]  = \mprj_io_dm[35] ;
-  assign \mprj_pads.dm[34]  = \mprj_io_dm[34] ;
-  assign \mprj_pads.dm[33]  = \mprj_io_dm[33] ;
-  assign \mprj_pads.dm[32]  = \mprj_io_dm[32] ;
-  assign \mprj_pads.dm[31]  = \mprj_io_dm[31] ;
-  assign \mprj_pads.dm[30]  = \mprj_io_dm[30] ;
-  assign \mprj_pads.dm[29]  = \mprj_io_dm[29] ;
-  assign \mprj_pads.dm[28]  = \mprj_io_dm[28] ;
-  assign \mprj_pads.dm[27]  = \mprj_io_dm[27] ;
-  assign \mprj_pads.dm[26]  = \mprj_io_dm[26] ;
-  assign \mprj_pads.dm[25]  = \mprj_io_dm[25] ;
-  assign \mprj_pads.dm[24]  = \mprj_io_dm[24] ;
-  assign \mprj_pads.dm[23]  = \mprj_io_dm[23] ;
-  assign \mprj_pads.dm[22]  = \mprj_io_dm[22] ;
-  assign \mprj_pads.dm[21]  = \mprj_io_dm[21] ;
-  assign \mprj_pads.dm[20]  = \mprj_io_dm[20] ;
-  assign \mprj_pads.dm[19]  = \mprj_io_dm[19] ;
-  assign \mprj_pads.dm[18]  = \mprj_io_dm[18] ;
-  assign \mprj_pads.dm[17]  = \mprj_io_dm[17] ;
-  assign \mprj_pads.dm[16]  = \mprj_io_dm[16] ;
-  assign \mprj_pads.dm[15]  = \mprj_io_dm[15] ;
-  assign \mprj_pads.dm[14]  = \mprj_io_dm[14] ;
-  assign \mprj_pads.dm[13]  = \mprj_io_dm[13] ;
-  assign \mprj_pads.dm[12]  = \mprj_io_dm[12] ;
-  assign \mprj_pads.dm[11]  = \mprj_io_dm[11] ;
-  assign \mprj_pads.dm[10]  = \mprj_io_dm[10] ;
-  assign \mprj_pads.dm[9]  = \mprj_io_dm[9] ;
-  assign \mprj_pads.dm[8]  = \mprj_io_dm[8] ;
-  assign \mprj_pads.dm[7]  = \mprj_io_dm[7] ;
-  assign \mprj_pads.dm[6]  = \mprj_io_dm[6] ;
-  assign \mprj_pads.dm[5]  = \mprj_io_dm[5] ;
-  assign \mprj_pads.dm[4]  = \mprj_io_dm[4] ;
-  assign \mprj_pads.dm[3]  = \mprj_io_dm[3] ;
-  assign \mprj_pads.dm[2]  = \mprj_io_dm[2] ;
-  assign \mprj_pads.dm[1]  = \mprj_io_dm[1] ;
-  assign \mprj_pads.dm[0]  = \mprj_io_dm[0] ;
-  assign \mprj_pads.inp_dis[37]  = \mprj_io_inp_dis[37] ;
-  assign \mprj_pads.inp_dis[36]  = \mprj_io_inp_dis[36] ;
-  assign \mprj_pads.inp_dis[35]  = \mprj_io_inp_dis[35] ;
-  assign \mprj_pads.inp_dis[34]  = \mprj_io_inp_dis[34] ;
-  assign \mprj_pads.inp_dis[33]  = \mprj_io_inp_dis[33] ;
-  assign \mprj_pads.inp_dis[32]  = \mprj_io_inp_dis[32] ;
-  assign \mprj_pads.inp_dis[31]  = \mprj_io_inp_dis[31] ;
-  assign \mprj_pads.inp_dis[30]  = \mprj_io_inp_dis[30] ;
-  assign \mprj_pads.inp_dis[29]  = \mprj_io_inp_dis[29] ;
-  assign \mprj_pads.inp_dis[28]  = \mprj_io_inp_dis[28] ;
-  assign \mprj_pads.inp_dis[27]  = \mprj_io_inp_dis[27] ;
-  assign \mprj_pads.inp_dis[26]  = \mprj_io_inp_dis[26] ;
-  assign \mprj_pads.inp_dis[25]  = \mprj_io_inp_dis[25] ;
-  assign \mprj_pads.inp_dis[24]  = \mprj_io_inp_dis[24] ;
-  assign \mprj_pads.inp_dis[23]  = \mprj_io_inp_dis[23] ;
-  assign \mprj_pads.inp_dis[22]  = \mprj_io_inp_dis[22] ;
-  assign \mprj_pads.inp_dis[21]  = \mprj_io_inp_dis[21] ;
-  assign \mprj_pads.inp_dis[20]  = \mprj_io_inp_dis[20] ;
-  assign \mprj_pads.inp_dis[19]  = \mprj_io_inp_dis[19] ;
-  assign \mprj_pads.inp_dis[18]  = \mprj_io_inp_dis[18] ;
-  assign \mprj_pads.inp_dis[17]  = \mprj_io_inp_dis[17] ;
-  assign \mprj_pads.inp_dis[16]  = \mprj_io_inp_dis[16] ;
-  assign \mprj_pads.inp_dis[15]  = \mprj_io_inp_dis[15] ;
-  assign \mprj_pads.inp_dis[14]  = \mprj_io_inp_dis[14] ;
-  assign \mprj_pads.inp_dis[13]  = \mprj_io_inp_dis[13] ;
-  assign \mprj_pads.inp_dis[12]  = \mprj_io_inp_dis[12] ;
-  assign \mprj_pads.inp_dis[11]  = \mprj_io_inp_dis[11] ;
-  assign \mprj_pads.inp_dis[10]  = \mprj_io_inp_dis[10] ;
-  assign \mprj_pads.inp_dis[9]  = \mprj_io_inp_dis[9] ;
-  assign \mprj_pads.inp_dis[8]  = \mprj_io_inp_dis[8] ;
-  assign \mprj_pads.inp_dis[7]  = \mprj_io_inp_dis[7] ;
-  assign \mprj_pads.inp_dis[6]  = \mprj_io_inp_dis[6] ;
-  assign \mprj_pads.inp_dis[5]  = \mprj_io_inp_dis[5] ;
-  assign \mprj_pads.inp_dis[4]  = \mprj_io_inp_dis[4] ;
-  assign \mprj_pads.inp_dis[3]  = \mprj_io_inp_dis[3] ;
-  assign \mprj_pads.inp_dis[2]  = \mprj_io_inp_dis[2] ;
-  assign \mprj_pads.inp_dis[1]  = \mprj_io_inp_dis[1] ;
-  assign \mprj_pads.inp_dis[0]  = \mprj_io_inp_dis[0] ;
-  assign \mprj_pads.io_out[37]  = \mprj_io_out[37] ;
-  assign \mprj_pads.io_out[36]  = \mprj_io_out[36] ;
-  assign \mprj_pads.io_out[35]  = \mprj_io_out[35] ;
-  assign \mprj_pads.io_out[34]  = \mprj_io_out[34] ;
-  assign \mprj_pads.io_out[33]  = \mprj_io_out[33] ;
-  assign \mprj_pads.io_out[32]  = \mprj_io_out[32] ;
-  assign \mprj_pads.io_out[31]  = \mprj_io_out[31] ;
-  assign \mprj_pads.io_out[30]  = \mprj_io_out[30] ;
-  assign \mprj_pads.io_out[29]  = \mprj_io_out[29] ;
-  assign \mprj_pads.io_out[28]  = \mprj_io_out[28] ;
-  assign \mprj_pads.io_out[27]  = \mprj_io_out[27] ;
-  assign \mprj_pads.io_out[26]  = \mprj_io_out[26] ;
-  assign \mprj_pads.io_out[25]  = \mprj_io_out[25] ;
-  assign \mprj_pads.io_out[24]  = \mprj_io_out[24] ;
-  assign \mprj_pads.io_out[23]  = \mprj_io_out[23] ;
-  assign \mprj_pads.io_out[22]  = \mprj_io_out[22] ;
-  assign \mprj_pads.io_out[21]  = \mprj_io_out[21] ;
-  assign \mprj_pads.io_out[20]  = \mprj_io_out[20] ;
-  assign \mprj_pads.io_out[19]  = \mprj_io_out[19] ;
-  assign \mprj_pads.io_out[18]  = \mprj_io_out[18] ;
-  assign \mprj_pads.io_out[17]  = \mprj_io_out[17] ;
-  assign \mprj_pads.io_out[16]  = \mprj_io_out[16] ;
-  assign \mprj_pads.io_out[15]  = \mprj_io_out[15] ;
-  assign \mprj_pads.io_out[14]  = \mprj_io_out[14] ;
-  assign \mprj_pads.io_out[13]  = \mprj_io_out[13] ;
-  assign \mprj_pads.io_out[12]  = \mprj_io_out[12] ;
-  assign \mprj_pads.io_out[11]  = \mprj_io_out[11] ;
-  assign \mprj_pads.io_out[10]  = \mprj_io_out[10] ;
-  assign \mprj_pads.io_out[9]  = \mprj_io_out[9] ;
-  assign \mprj_pads.io_out[8]  = \mprj_io_out[8] ;
-  assign \mprj_pads.io_out[7]  = \mprj_io_out[7] ;
-  assign \mprj_pads.io_out[6]  = \mprj_io_out[6] ;
-  assign \mprj_pads.io_out[5]  = \mprj_io_out[5] ;
-  assign \mprj_pads.io_out[4]  = \mprj_io_out[4] ;
-  assign \mprj_pads.io_out[3]  = \mprj_io_out[3] ;
-  assign \mprj_pads.io_out[2]  = \mprj_io_out[2] ;
-  assign \mprj_pads.io_out[1]  = \mprj_io_out[1] ;
-  assign \mprj_pads.io_out[0]  = \mprj_io_out[0] ;
-  assign \mprj_pads.holdover[37]  = \mprj_io_holdover[37] ;
-  assign \mprj_pads.holdover[36]  = \mprj_io_holdover[36] ;
-  assign \mprj_pads.holdover[35]  = \mprj_io_holdover[35] ;
-  assign \mprj_pads.holdover[34]  = \mprj_io_holdover[34] ;
-  assign \mprj_pads.holdover[33]  = \mprj_io_holdover[33] ;
-  assign \mprj_pads.holdover[32]  = \mprj_io_holdover[32] ;
-  assign \mprj_pads.holdover[31]  = \mprj_io_holdover[31] ;
-  assign \mprj_pads.holdover[30]  = \mprj_io_holdover[30] ;
-  assign \mprj_pads.holdover[29]  = \mprj_io_holdover[29] ;
-  assign \mprj_pads.holdover[28]  = \mprj_io_holdover[28] ;
-  assign \mprj_pads.holdover[27]  = \mprj_io_holdover[27] ;
-  assign \mprj_pads.holdover[26]  = \mprj_io_holdover[26] ;
-  assign \mprj_pads.holdover[25]  = \mprj_io_holdover[25] ;
-  assign \mprj_pads.holdover[24]  = \mprj_io_holdover[24] ;
-  assign \mprj_pads.holdover[23]  = \mprj_io_holdover[23] ;
-  assign \mprj_pads.holdover[22]  = \mprj_io_holdover[22] ;
-  assign \mprj_pads.holdover[21]  = \mprj_io_holdover[21] ;
-  assign \mprj_pads.holdover[20]  = \mprj_io_holdover[20] ;
-  assign \mprj_pads.holdover[19]  = \mprj_io_holdover[19] ;
-  assign \mprj_pads.holdover[18]  = \mprj_io_holdover[18] ;
-  assign \mprj_pads.holdover[17]  = \mprj_io_holdover[17] ;
-  assign \mprj_pads.holdover[16]  = \mprj_io_holdover[16] ;
-  assign \mprj_pads.holdover[15]  = \mprj_io_holdover[15] ;
-  assign \mprj_pads.holdover[14]  = \mprj_io_holdover[14] ;
-  assign \mprj_pads.holdover[13]  = \mprj_io_holdover[13] ;
-  assign \mprj_pads.holdover[12]  = \mprj_io_holdover[12] ;
-  assign \mprj_pads.holdover[11]  = \mprj_io_holdover[11] ;
-  assign \mprj_pads.holdover[10]  = \mprj_io_holdover[10] ;
-  assign \mprj_pads.holdover[9]  = \mprj_io_holdover[9] ;
-  assign \mprj_pads.holdover[8]  = \mprj_io_holdover[8] ;
-  assign \mprj_pads.holdover[7]  = \mprj_io_holdover[7] ;
-  assign \mprj_pads.holdover[6]  = \mprj_io_holdover[6] ;
-  assign \mprj_pads.holdover[5]  = \mprj_io_holdover[5] ;
-  assign \mprj_pads.holdover[4]  = \mprj_io_holdover[4] ;
-  assign \mprj_pads.holdover[3]  = \mprj_io_holdover[3] ;
-  assign \mprj_pads.holdover[2]  = \mprj_io_holdover[2] ;
-  assign \mprj_pads.holdover[1]  = \mprj_io_holdover[1] ;
-  assign \mprj_pads.holdover[0]  = \mprj_io_holdover[0] ;
-  assign \mprj_pads.ib_mode_sel[37]  = \mprj_io_ib_mode_sel[37] ;
-  assign \mprj_pads.ib_mode_sel[36]  = \mprj_io_ib_mode_sel[36] ;
-  assign \mprj_pads.ib_mode_sel[35]  = \mprj_io_ib_mode_sel[35] ;
-  assign \mprj_pads.ib_mode_sel[34]  = \mprj_io_ib_mode_sel[34] ;
-  assign \mprj_pads.ib_mode_sel[33]  = \mprj_io_ib_mode_sel[33] ;
-  assign \mprj_pads.ib_mode_sel[32]  = \mprj_io_ib_mode_sel[32] ;
-  assign \mprj_pads.ib_mode_sel[31]  = \mprj_io_ib_mode_sel[31] ;
-  assign \mprj_pads.ib_mode_sel[30]  = \mprj_io_ib_mode_sel[30] ;
-  assign \mprj_pads.ib_mode_sel[29]  = \mprj_io_ib_mode_sel[29] ;
-  assign \mprj_pads.ib_mode_sel[28]  = \mprj_io_ib_mode_sel[28] ;
-  assign \mprj_pads.ib_mode_sel[27]  = \mprj_io_ib_mode_sel[27] ;
-  assign \mprj_pads.ib_mode_sel[26]  = \mprj_io_ib_mode_sel[26] ;
-  assign \mprj_pads.ib_mode_sel[25]  = \mprj_io_ib_mode_sel[25] ;
-  assign \mprj_pads.ib_mode_sel[24]  = \mprj_io_ib_mode_sel[24] ;
-  assign \mprj_pads.ib_mode_sel[23]  = \mprj_io_ib_mode_sel[23] ;
-  assign \mprj_pads.ib_mode_sel[22]  = \mprj_io_ib_mode_sel[22] ;
-  assign \mprj_pads.ib_mode_sel[21]  = \mprj_io_ib_mode_sel[21] ;
-  assign \mprj_pads.ib_mode_sel[20]  = \mprj_io_ib_mode_sel[20] ;
-  assign \mprj_pads.ib_mode_sel[19]  = \mprj_io_ib_mode_sel[19] ;
-  assign \mprj_pads.ib_mode_sel[18]  = \mprj_io_ib_mode_sel[18] ;
-  assign \mprj_pads.ib_mode_sel[17]  = \mprj_io_ib_mode_sel[17] ;
-  assign \mprj_pads.ib_mode_sel[16]  = \mprj_io_ib_mode_sel[16] ;
-  assign \mprj_pads.ib_mode_sel[15]  = \mprj_io_ib_mode_sel[15] ;
-  assign \mprj_pads.ib_mode_sel[14]  = \mprj_io_ib_mode_sel[14] ;
-  assign \mprj_pads.ib_mode_sel[13]  = \mprj_io_ib_mode_sel[13] ;
-  assign \mprj_pads.ib_mode_sel[12]  = \mprj_io_ib_mode_sel[12] ;
-  assign \mprj_pads.ib_mode_sel[11]  = \mprj_io_ib_mode_sel[11] ;
-  assign \mprj_pads.ib_mode_sel[10]  = \mprj_io_ib_mode_sel[10] ;
-  assign \mprj_pads.ib_mode_sel[9]  = \mprj_io_ib_mode_sel[9] ;
-  assign \mprj_pads.ib_mode_sel[8]  = \mprj_io_ib_mode_sel[8] ;
-  assign \mprj_pads.ib_mode_sel[7]  = \mprj_io_ib_mode_sel[7] ;
-  assign \mprj_pads.ib_mode_sel[6]  = \mprj_io_ib_mode_sel[6] ;
-  assign \mprj_pads.ib_mode_sel[5]  = \mprj_io_ib_mode_sel[5] ;
-  assign \mprj_pads.ib_mode_sel[4]  = \mprj_io_ib_mode_sel[4] ;
-  assign \mprj_pads.ib_mode_sel[3]  = \mprj_io_ib_mode_sel[3] ;
-  assign \mprj_pads.ib_mode_sel[2]  = \mprj_io_ib_mode_sel[2] ;
-  assign \mprj_pads.ib_mode_sel[1]  = \mprj_io_ib_mode_sel[1] ;
-  assign \mprj_pads.ib_mode_sel[0]  = \mprj_io_ib_mode_sel[0] ;
-  assign \mprj_pads.vddio  = vddio;
-  assign \mprj_pads.vssio  = vssio;
-  assign \mprj_pads.vccd  = vccd;
-  assign \mprj_pads.vssd  = vssd;
-  assign \mprj_pads.vdda1  = vdda1;
-  assign \mprj_pads.vdda2  = vdda2;
-  assign \mprj_pads.vssa1  = vssa1;
-  assign \mprj_pads.vssa2  = vssa2;
-  assign \mprj_pads.vccd1  = vccd1;
-  assign \mprj_pads.vccd2  = vccd2;
-  assign \mprj_pads.vssd1  = vssd1;
-  assign \mprj_pads.vssd2  = vssd2;
-  assign \mprj_pads.porb_h  = porb_h;
-  assign \mprj_pads.slow_sel[36]  = \mprj_io_slow_sel[36] ;
-  assign \mprj_pads.slow_sel[23]  = \mprj_io_slow_sel[23] ;
-  assign \mprj_pads.slow_sel[28]  = \mprj_io_slow_sel[28] ;
-  assign \mprj_pads.slow_sel[37]  = \mprj_io_slow_sel[37] ;
-  assign \flash_io0_mode[0]  = flash_io0_oeb_core;
-  assign \mprj_pads.slow_sel[24]  = \mprj_io_slow_sel[24] ;
-  assign \mprj_pads.slow_sel[21]  = \mprj_io_slow_sel[21] ;
-  assign \mprj_pads.slow_sel[31]  = \mprj_io_slow_sel[31] ;
-  assign \flash_io0_mode[1]  = flash_io0_ieb_core;
-  assign \mprj_pads.slow_sel[22]  = \mprj_io_slow_sel[22] ;
-  assign \mprj_pads.slow_sel[27]  = \mprj_io_slow_sel[27] ;
-  assign \mprj_pads.slow_sel[32]  = \mprj_io_slow_sel[32] ;
-  assign \mprj_pads.slow_sel[30]  = \mprj_io_slow_sel[30] ;
-  assign \mprj_pads.slow_sel[26]  = \mprj_io_slow_sel[26] ;
-  assign \mprj_pads.slow_sel[29]  = \mprj_io_slow_sel[29] ;
-  assign \mprj_pads.slow_sel[35]  = \mprj_io_slow_sel[35] ;
-  assign \mprj_pads.slow_sel[25]  = \mprj_io_slow_sel[25] ;
-  assign \mprj_pads.slow_sel[20]  = \mprj_io_slow_sel[20] ;
-  assign \mprj_pads.slow_sel[34]  = \mprj_io_slow_sel[34] ;
-  assign \flash_io0_mode[2]  = flash_io0_ieb_core;
-  assign \mprj_pads.slow_sel[33]  = \mprj_io_slow_sel[33] ;
-  assign vssio_q = \mprj_pads.vssio_q ;
-  assign vddio_q = \mprj_pads.vddio_q ;
-  assign analog_b = \mprj_pads.analog_b ;
-  assign analog_a = \mprj_pads.analog_a ;
-  assign { \mprj_io_in[37] , \mprj_io_in[36] , \mprj_io_in[35] , \mprj_io_in[34] , \mprj_io_in[33] , \mprj_io_in[32] , \mprj_io_in[31] , \mprj_io_in[30] , \mprj_io_in[29] , \mprj_io_in[28] , \mprj_io_in[27] , \mprj_io_in[26] , \mprj_io_in[25] , \mprj_io_in[24] , \mprj_io_in[23] , \mprj_io_in[22] , \mprj_io_in[21] , \mprj_io_in[20] , \mprj_io_in[19] , \mprj_io_in[18] , \mprj_io_in[17] , \mprj_io_in[16] , \mprj_io_in[15] , \mprj_io_in[14] , \mprj_io_in[13] , \mprj_io_in[12] , \mprj_io_in[11] , \mprj_io_in[10] , \mprj_io_in[9] , \mprj_io_in[8] , \mprj_io_in[7] , \mprj_io_in[6] , \mprj_io_in[5] , \mprj_io_in[4] , \mprj_io_in[3] , \mprj_io_in[2] , \mprj_io_in[1] , \mprj_io_in[0]  } =
-                  { \mprj_pads.io_in[37] , \mprj_pads.io_in[36] , \mprj_pads.io_in[35] , \mprj_pads.io_in[34] , \mprj_pads.io_in[33] , \mprj_pads.io_in[32] , \mprj_pads.io_in[31] , \mprj_pads.io_in[30] , \mprj_pads.io_in[29] , \mprj_pads.io_in[28] , \mprj_pads.io_in[27] , \mprj_pads.io_in[26] , \mprj_pads.io_in[25] , \mprj_pads.io_in[24] , \mprj_pads.io_in[23] , \mprj_pads.io_in[22] , \mprj_pads.io_in[21] , \mprj_pads.io_in[20] , \mprj_pads.io_in[19] , \mprj_pads.io_in[18] , \mprj_pads.io_in[17] , \mprj_pads.io_in[16] , \mprj_pads.io_in[15] , \mprj_pads.io_in[14] , \mprj_pads.io_in[13] , \mprj_pads.io_in[12] , \mprj_pads.io_in[11] , \mprj_pads.io_in[10] , \mprj_pads.io_in[9] , \mprj_pads.io_in[8] , \mprj_pads.io_in[7] , \mprj_pads.io_in[6] , \mprj_pads.io_in[5] , \mprj_pads.io_in[4] , \mprj_pads.io_in[3] , \mprj_pads.io_in[2] , \mprj_pads.io_in[1] , \mprj_pads.io_in[0]  };
-endmodule
diff --git a/verilog/dv/wb_utests/chip_io/chip_io_tb.v b/verilog/dv/wb_utests/chip_io/chip_io_tb.v
deleted file mode 100644
index 400c5ab..0000000
--- a/verilog/dv/wb_utests/chip_io/chip_io_tb.v
+++ /dev/null
@@ -1,377 +0,0 @@
-// 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
-
-`define UNIT_DELAY #1
-`define USE_POWER_PINS
-`define SIM_TIME 100_000
-
-`include "libs.ref/sky130_fd_io/verilog/sky130_fd_io.v"
-`include "libs.ref/sky130_fd_io/verilog/sky130_ef_io.v"
-`include "libs.ref/sky130_fd_io/verilog/sky130_ef_io__gpiov2_pad_wrapped.v"
-
-`include "defines.v"
-
-`ifdef GL
-    `include "gl/chip_io.v"
-`else
-    `ifdef SPLIT_BUS
-        `include "ports.v"
-        `include "chip_io_split.v"
-    `else
-        `include "pads.v"
-        `include "mprj_io.v"
-        `include "chip_io.v"
-    `endif
-`endif 
-
-module chip_io_tb;
-    
-    wire clock_core;
-    reg clock;
-
-    wire rstb_h;
-    reg RSTB;
-    
-    reg porb_h;
-    wire por_l;
-
-    wire gpio;
-    reg gpio_out_core;
-    reg gpio_inenb_core;
-    reg gpio_outenb_core;
-
-    wire flash_csb;
-    reg flash_csb_core;
-    reg flash_csb_ieb_core;        
-    reg flash_csb_oeb_core; 
-    
-    wire flash_clk;
-    reg flash_clk_core;
-    reg flash_clk_ieb_core;       
-    reg flash_clk_oeb_core; 
-
-    wire flash_io0;
-    wire flash_io0_di_core;
-    reg flash_io0_do_core;
-    reg flash_io0_ieb_core;
-    reg flash_io0_oeb_core;
-
-    wire flash_io1;
-    wire flash_io1_di_core;
-    reg flash_io1_do_core;
-    reg flash_io1_ieb_core;
-    reg flash_io1_oeb_core;
-    
-    wire gpio_in_core;
-    wire gpio_mode0_core;
-    wire gpio_mode1_core;
-
-    wire [`MPRJ_IO_PADS-1:0] mprj_io;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_oeb;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_vtrip_sel;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_slow_sel;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_holdover;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_analog_en;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol;
-    reg [`MPRJ_IO_PADS*3-1:0] mprj_io_dm;
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_out;
-    
-    wire [`MPRJ_IO_PADS-1:0] mprj_io_in;
-    wire [`MPRJ_IO_PADS-10:0] mprj_analog_io;
-
-    always #12.5 clock <= (clock === 1'b0);
-
-    initial begin
-        clock  = 0;
-        porb_h = 0;
-        flash_csb_core = 0;
-        flash_csb_ieb_core = 1;
-        flash_csb_oeb_core = 0;
-        flash_clk_ieb_core = 1;
-        flash_clk_oeb_core = 0;
-        mprj_io_ib_mode_sel = {38{1'b0}};
-        mprj_io_vtrip_sel = {38{1'b0}};
-        mprj_io_slow_sel  = {38{1'b0}};
-        mprj_io_holdover  = {38{1'b0}};
-        mprj_io_analog_en  = {38{1'b0}};
-        mprj_io_analog_sel = {38{1'b0}};
-        mprj_io_analog_pol = {38{1'b0}};
-    end
-
-    wire VDD3V3;
-	wire VDD1V8;
-	wire VSS;
-
-	assign VDD3V3 = power1;
-	assign VDD1V8 = power2;
-	assign VSS = 1'b0;
-	
-    reg power1, power2;
-
-    initial begin
-		RSTB   <= 1'b0;
-        porb_h <= 1'b0;
-        #500;
-        porb_h <= 1'b1;
-		#500;
-		RSTB <= 1'b1;	    // Release reset
-		#2000;
-	end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		power2 <= 1'b0;
-		#200;
-		power1 <= 1'b1;
-		#200;
-		power2 <= 1'b1;
-	end
-
-    initial begin
-        $dumpfile("chip_io.vcd");
-        $dumpvars(0, chip_io_tb);
-        #(`SIM_TIME);
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Management Protect Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    reg [2:0] dm_all;
-    reg gpio_bit;
-    
-    assign gpio = gpio_bit;
-    assign gpio_mode0_core = dm_all[0];
-    assign gpio_mode1_core = dm_all[1];
-
-    reg flash_io0_bit;
-    reg flash_io1_bit;
-
-    assign flash_io0 = flash_io0_bit;
-    assign flash_io1 = flash_io1_bit;
-
-    reg [`MPRJ_IO_PADS-1:0] mprj_io_bits;
-
-    assign mprj_io = mprj_io_bits;
-
-    initial begin
-        wait(RSTB == 1'b1);        // wait for reset 
-        #25;
-        // Clock & Reset Pads 
-        if (clock !== clock_core) begin
-            $display("Error: Clock Pad Test Failed."); $finish; 
-        end
-        if (RSTB !== rstb_h) begin
-            $display("Error: Reset Pad Test Failed."); $finish; 
-        end
-        
-        // Management GPIO Pad
-        gpio_bit = 1'b1;
-        gpio_out_core = 1'b0;  
-        gpio_inenb_core = 1'b0;
-        gpio_outenb_core = 1'b1;
-        dm_all = 3'b001;            // input-only
-        #25;
-        if (gpio_in_core !== gpio) begin
-            $display("Error: GPIO Pad Input Test Failed."); $finish;
-        end
-
-        gpio_bit = 1'bz;
-        gpio_out_core    = 1'b1;   
-        gpio_inenb_core  = 1'b1;
-        gpio_outenb_core = 1'b0;
-        dm_all = 3'b110;            // output-only
-        #25;
-        if (gpio_out_core !== gpio) begin
-            $display("Error: GPIO Pad Output Test Failed."); $finish;
-        end
-
-        // Flash Output Pads
-        flash_csb_core = 1'b1;        // CSB Pad
-        #25;
-        if (flash_csb !== flash_csb_core) begin
-            $display("Error: Flash CSB Pad Test Failed."); $finish;
-        end
-
-        flash_clk_core = 1'b1;         // CLK Pad
-        #25;
-        if (flash_clk !== flash_clk_core) begin
-            $display("Error: Flash CLK Pad Test Failed."); $finish;
-        end
-
-        // Flash Inout Pads
-        flash_io0_bit = 1'b1;            
-        flash_io0_ieb_core = 1'b0;     // Input
-        flash_io0_oeb_core = 1'b1;
-        #25;
-        if (flash_io0_di_core !== flash_io0_bit) begin
-            $display("Error: Flash io0 Pad Input Test Failed."); $finish;
-        end
-
-        flash_io0_bit = 1'bz;   
-        flash_io0_do_core = 1'b1;       
-        flash_io0_ieb_core = 1'b1;     
-        flash_io0_oeb_core = 1'b0;    // Output
-        #25
-        if (flash_io0 !== flash_io0_do_core) begin
-            $display("Error: Flash io0 Pad Output Test Failed."); $finish;
-        end
-
-        // User Project Pads - All Outputs
-        mprj_io_bits = {38{1'bz}};
-        mprj_io_out = {6'b10101, 32'hF0F0};
-        mprj_io_oeb = {38{1'b0}};
-        mprj_io_inp_dis = {38{1'b1}};
-        mprj_io_dm = {38*3{3'b110}};
-
-        #25;
-        if (mprj_io !== mprj_io_out) begin
-            $display("Error: User Project Pads Output Test Failed."); $finish;
-        end
-        
-        // User Project Pads - All Inputs
-        mprj_io_bits = {6'b01010, 32'hFF0F};
-        mprj_io_out  = {38{1'b0}};
-        mprj_io_oeb  = {38{1'b1}};
-        mprj_io_inp_dis = {38{1'b0}};
-        mprj_io_dm = {38*3{3'b001}};
-
-        #25;
-        if (mprj_io_in !== mprj_io_bits) begin
-            $display("Error: User Project Pads Input Test Failed."); $finish;
-        end
-        
-        // User Project Pads - All Bidirectional
-        mprj_io_bits = {6'b01010, 32'hF00F};  // drive input signal
-        mprj_io_out  = {38{1'bz}}; 
-        mprj_io_oeb  = {38{1'b1}};
-        mprj_io_inp_dis = {38{1'b0}};
-        mprj_io_dm = {38{3'b110}};
-
-        #25;
-        if (mprj_io_in !== mprj_io_bits) begin
-            $display("Error: User Project Pads Bidirectional Test Failed."); $finish;
-        end
-        
-        mprj_io_bits = {38{1'bz}};  
-        mprj_io_out  = {6'b01110, 32'h0FF0};  // drive output signal
-        mprj_io_oeb  = {38{1'b0}};
-        mprj_io_inp_dis = {38{1'b0}};
-        mprj_io_dm = {38{3'b110}};
-
-        #25;
-        if (mprj_io !== mprj_io_out) begin
-            $display("Error: User Project Pads Output Test Failed."); $finish;
-        end
-        $display("Success");
-        $display("Monitor: Chip IO Test Passed.");
-        #2000;
-        $finish;
-    end
-
-    assign por_l = ~porb_h;
-
-    chip_io uut (
-        // Package Pins
-        .vddio	  (VDD3V3),
-		.vssio	  (VSS),
-		.vdda	  (VDD3V3),
-		.vssa	  (VSS),
-		.vccd	  (VDD1V8),
-		.vssd	  (VSS),
-		.vdda1    (VDD3V3),
-		.vdda2    (VDD3V3),
-		.vssa1	  (VSS),
-		.vssa2	  (VSS),
-		.vccd1	  (VDD1V8),
-		.vccd2	  (VDD1V8),
-		.vssd1	  (VSS),
-		.vssd2	  (VSS),
-
-        .gpio(gpio),
-        .clock(clock),
-        .resetb(RSTB),
-        .flash_csb(flash_csb),
-        .flash_clk(flash_clk),
-        .flash_io0(flash_io0),
-        .flash_io1(flash_io1),
-        // SoC Core Interface
-        .porb_h(porb_h),
-        .por(por_l),
-        .resetb_core_h(rstb_h),
-        .clock_core(clock_core),
-        .gpio_out_core(gpio_out_core),
-        .gpio_in_core(gpio_in_core),
-        .gpio_mode0_core(gpio_mode0_core),
-        .gpio_mode1_core(gpio_mode1_core),
-        .gpio_outenb_core(gpio_outenb_core),
-        .gpio_inenb_core(gpio_inenb_core),
-        .flash_csb_core(flash_csb_core),
-        .flash_clk_core(flash_clk_core),
-        .flash_csb_oeb_core(flash_csb_oeb_core),
-        .flash_clk_oeb_core(flash_clk_oeb_core),
-        .flash_io0_oeb_core(flash_io0_oeb_core),
-        .flash_io1_oeb_core(flash_io1_oeb_core),
-        .flash_csb_ieb_core(flash_csb_ieb_core),
-        .flash_clk_ieb_core(flash_clk_ieb_core),
-        .flash_io0_ieb_core(flash_io0_ieb_core),
-        .flash_io1_ieb_core(flash_io1_ieb_core),
-        .flash_io0_do_core(flash_io0_do_core),
-        .flash_io1_do_core(flash_io1_do_core),
-        .flash_io0_di_core(flash_io0_di_core),
-        .flash_io1_di_core(flash_io1_di_core),        
- `ifdef SPLIT_BUS
-        `MPRJ_IO,
-        `MPRJ_IO_IN,
-        `MPRJ_IO_OUT,
-        `MPRJ_IO_OEB,
-        `MPRJ_IO_INP_DIS,
-        `MPRJ_IO_IB_MODE_SEL,
-        `MPRJ_IO_VTRIP_SEL,
-        `MPRJ_IO_SLOW_SEL,
-        `MPRJ_IO_HOLDOVER,
-        `MPRJ_IO_ANALOG_EN,
-        `MPRJ_IO_ANALOG_SEL,
-        `MPRJ_IO_ANALOG_POL,
-        `MPRJ_IO_DM,
-        `MPRJ_IO_ANALOG
- `else
-        .mprj_io(mprj_io),
-        .mprj_io_in(mprj_io_in),
-        .mprj_io_out(mprj_io_out),
-        .mprj_io_oeb(mprj_io_oeb),
-        .mprj_io_inp_dis(mprj_io_inp_dis),
-        .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel),
-        .mprj_io_vtrip_sel(mprj_io_vtrip_sel),
-        .mprj_io_slow_sel(mprj_io_slow_sel),
-        .mprj_io_holdover(mprj_io_holdover),
-        .mprj_io_analog_en(mprj_io_analog_en),
-        .mprj_io_analog_sel(mprj_io_analog_sel),
-        .mprj_io_analog_pol(mprj_io_analog_pol),
-        .mprj_io_dm(mprj_io_dm),
-        .mprj_analog_io(mprj_analog_io)
-`endif
-    );
-
-endmodule
diff --git a/verilog/dv/wb_utests/chip_io/ports.v b/verilog/dv/wb_utests/chip_io/ports.v
deleted file mode 100644
index 6516802..0000000
--- a/verilog/dv/wb_utests/chip_io/ports.v
+++ /dev/null
@@ -1,727 +0,0 @@
-// 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
-
-`define MPRJ_IO \
-.\mprj_io[0] (mprj_io[0]),\
-.\mprj_io[1] (mprj_io[1]),\
-.\mprj_io[2] (mprj_io[2]),\
-.\mprj_io[3] (mprj_io[3]),\
-.\mprj_io[4] (mprj_io[4]),\
-.\mprj_io[5] (mprj_io[5]),\
-.\mprj_io[6] (mprj_io[6]),\
-.\mprj_io[7] (mprj_io[7]),\   
-.\mprj_io[8] (mprj_io[8]),\  
-.\mprj_io[9] (mprj_io[9]),\  
-.\mprj_io[10] (mprj_io[10]),\  
-.\mprj_io[11] (mprj_io[11]),\  
-.\mprj_io[12] (mprj_io[12]),\  
-.\mprj_io[13] (mprj_io[13]),\  
-.\mprj_io[14] (mprj_io[14]),\  
-.\mprj_io[15] (mprj_io[15]),\  
-.\mprj_io[16] (mprj_io[16]),\  
-.\mprj_io[17] (mprj_io[17]),\  
-.\mprj_io[18] (mprj_io[18]),\  
-.\mprj_io[19] (mprj_io[19]),\  
-.\mprj_io[20] (mprj_io[20]),\  
-.\mprj_io[21] (mprj_io[21]),\  
-.\mprj_io[22] (mprj_io[22]),\  
-.\mprj_io[23] (mprj_io[23]),\  
-.\mprj_io[24] (mprj_io[24]),\  
-.\mprj_io[25] (mprj_io[25]),\  
-.\mprj_io[26] (mprj_io[26]),\  
-.\mprj_io[27] (mprj_io[27]),\  
-.\mprj_io[28] (mprj_io[28]),\  
-.\mprj_io[29] (mprj_io[29]),\  
-.\mprj_io[30] (mprj_io[30]),\  
-.\mprj_io[31] (mprj_io[31]),\  
-.\mprj_io[32] (mprj_io[32]),\  
-.\mprj_io[33] (mprj_io[33]),\  
-.\mprj_io[34] (mprj_io[34]),\  
-.\mprj_io[35] (mprj_io[35]),\  
-.\mprj_io[36] (mprj_io[36]),\  
-.\mprj_io[37] (mprj_io[37])
-
-`define MPRJ_IO_IN \
-.\mprj_io_in[0] (mprj_io_in[0]),\
-.\mprj_io_in[1] (mprj_io_in[1]),\
-.\mprj_io_in[2] (mprj_io_in[2]),\
-.\mprj_io_in[3] (mprj_io_in[3]),\
-.\mprj_io_in[4] (mprj_io_in[4]),\
-.\mprj_io_in[5] (mprj_io_in[5]),\
-.\mprj_io_in[6] (mprj_io_in[6]),\
-.\mprj_io_in[7] (mprj_io_in[7]),\
-.\mprj_io_in[8] (mprj_io_in[8]),\
-.\mprj_io_in[9] (mprj_io_in[9]),\
-.\mprj_io_in[10] (mprj_io_in[10]),\
-.\mprj_io_in[11] (mprj_io_in[11]),\
-.\mprj_io_in[12] (mprj_io_in[12]),\
-.\mprj_io_in[13] (mprj_io_in[13]),\
-.\mprj_io_in[14] (mprj_io_in[14]),\
-.\mprj_io_in[15] (mprj_io_in[15]),\
-.\mprj_io_in[16] (mprj_io_in[16]),\
-.\mprj_io_in[17] (mprj_io_in[17]),\
-.\mprj_io_in[18] (mprj_io_in[18]),\
-.\mprj_io_in[19] (mprj_io_in[19]),\
-.\mprj_io_in[20] (mprj_io_in[20]),\
-.\mprj_io_in[21] (mprj_io_in[21]),\
-.\mprj_io_in[22] (mprj_io_in[22]),\
-.\mprj_io_in[23] (mprj_io_in[23]),\
-.\mprj_io_in[24] (mprj_io_in[24]),\
-.\mprj_io_in[25] (mprj_io_in[25]),\
-.\mprj_io_in[26] (mprj_io_in[26]),\
-.\mprj_io_in[27] (mprj_io_in[27]),\
-.\mprj_io_in[28] (mprj_io_in[28]),\
-.\mprj_io_in[29] (mprj_io_in[29]),\
-.\mprj_io_in[30] (mprj_io_in[30]),\
-.\mprj_io_in[31] (mprj_io_in[31]),\
-.\mprj_io_in[32] (mprj_io_in[32]),\
-.\mprj_io_in[33] (mprj_io_in[33]),\
-.\mprj_io_in[34] (mprj_io_in[34]),\
-.\mprj_io_in[35] (mprj_io_in[35]),\
-.\mprj_io_in[36] (mprj_io_in[36]),\
-.\mprj_io_in[37] (mprj_io_in[37])
-
-
-`define MPRJ_IO_OUT \
-.\mprj_io_out[0] (mprj_io_out[0]),\
-.\mprj_io_out[1] (mprj_io_out[1]),\
-.\mprj_io_out[2] (mprj_io_out[2]),\
-.\mprj_io_out[3] (mprj_io_out[3]),\
-.\mprj_io_out[4] (mprj_io_out[4]),\
-.\mprj_io_out[5] (mprj_io_out[5]),\
-.\mprj_io_out[6] (mprj_io_out[6]),\
-.\mprj_io_out[7] (mprj_io_out[7]),\
-.\mprj_io_out[8] (mprj_io_out[8]),\
-.\mprj_io_out[9] (mprj_io_out[9]),\
-.\mprj_io_out[10] (mprj_io_out[10]),\
-.\mprj_io_out[11] (mprj_io_out[11]),\
-.\mprj_io_out[12] (mprj_io_out[12]),\
-.\mprj_io_out[13] (mprj_io_out[13]),\
-.\mprj_io_out[14] (mprj_io_out[14]),\
-.\mprj_io_out[15] (mprj_io_out[15]),\
-.\mprj_io_out[16] (mprj_io_out[16]),\
-.\mprj_io_out[17] (mprj_io_out[17]),\
-.\mprj_io_out[18] (mprj_io_out[18]),\
-.\mprj_io_out[19] (mprj_io_out[19]),\
-.\mprj_io_out[20] (mprj_io_out[20]),\
-.\mprj_io_out[21] (mprj_io_out[21]),\
-.\mprj_io_out[22] (mprj_io_out[22]),\
-.\mprj_io_out[23] (mprj_io_out[23]),\
-.\mprj_io_out[24] (mprj_io_out[24]),\
-.\mprj_io_out[25] (mprj_io_out[25]),\
-.\mprj_io_out[26] (mprj_io_out[26]),\
-.\mprj_io_out[27] (mprj_io_out[27]),\
-.\mprj_io_out[28] (mprj_io_out[28]),\
-.\mprj_io_out[29] (mprj_io_out[29]),\
-.\mprj_io_out[30] (mprj_io_out[30]),\
-.\mprj_io_out[31] (mprj_io_out[31]),\
-.\mprj_io_out[32] (mprj_io_out[32]),\
-.\mprj_io_out[33] (mprj_io_out[33]),\
-.\mprj_io_out[34] (mprj_io_out[34]),\
-.\mprj_io_out[35] (mprj_io_out[35]),\
-.\mprj_io_out[36] (mprj_io_out[36]),\
-.\mprj_io_out[37] (mprj_io_out[37])
-
-`define MPRJ_IO_OEB \
-.\mprj_io_oeb[0] (mprj_io_oeb[0]),\
-.\mprj_io_oeb[1] (mprj_io_oeb[1]),\
-.\mprj_io_oeb[2] (mprj_io_oeb[2]),\
-.\mprj_io_oeb[3] (mprj_io_oeb[3]),\
-.\mprj_io_oeb[4] (mprj_io_oeb[4]),\
-.\mprj_io_oeb[5] (mprj_io_oeb[5]),\
-.\mprj_io_oeb[6] (mprj_io_oeb[6]),\
-.\mprj_io_oeb[7] (mprj_io_oeb[7]),\
-.\mprj_io_oeb[8] (mprj_io_oeb[8]),\
-.\mprj_io_oeb[9] (mprj_io_oeb[9]),\
-.\mprj_io_oeb[10] (mprj_io_oeb[10]),\
-.\mprj_io_oeb[11] (mprj_io_oeb[11]),\
-.\mprj_io_oeb[12] (mprj_io_oeb[12]),\
-.\mprj_io_oeb[13] (mprj_io_oeb[13]),\
-.\mprj_io_oeb[14] (mprj_io_oeb[14]),\
-.\mprj_io_oeb[15] (mprj_io_oeb[15]),\
-.\mprj_io_oeb[16] (mprj_io_oeb[16]),\
-.\mprj_io_oeb[17] (mprj_io_oeb[17]),\
-.\mprj_io_oeb[18] (mprj_io_oeb[18]),\
-.\mprj_io_oeb[19] (mprj_io_oeb[19]),\
-.\mprj_io_oeb[20] (mprj_io_oeb[20]),\
-.\mprj_io_oeb[21] (mprj_io_oeb[21]),\
-.\mprj_io_oeb[22] (mprj_io_oeb[22]),\
-.\mprj_io_oeb[23] (mprj_io_oeb[23]),\
-.\mprj_io_oeb[24] (mprj_io_oeb[24]),\
-.\mprj_io_oeb[25] (mprj_io_oeb[25]),\
-.\mprj_io_oeb[26] (mprj_io_oeb[26]),\
-.\mprj_io_oeb[27] (mprj_io_oeb[27]),\
-.\mprj_io_oeb[28] (mprj_io_oeb[28]),\
-.\mprj_io_oeb[29] (mprj_io_oeb[29]),\
-.\mprj_io_oeb[30] (mprj_io_oeb[30]),\
-.\mprj_io_oeb[31] (mprj_io_oeb[31]),\
-.\mprj_io_oeb[32] (mprj_io_oeb[32]),\
-.\mprj_io_oeb[33] (mprj_io_oeb[33]),\
-.\mprj_io_oeb[34] (mprj_io_oeb[34]),\
-.\mprj_io_oeb[35] (mprj_io_oeb[35]),\
-.\mprj_io_oeb[36] (mprj_io_oeb[36]),\
-.\mprj_io_oeb[37] (mprj_io_oeb[37])
-
-`define MPRJ_IO_HLDH_N \
-.\mprj_io_hldh_n[0] (mprj_io_hldh_n[0]),\
-.\mprj_io_hldh_n[1] (mprj_io_hldh_n[1]),\
-.\mprj_io_hldh_n[2] (mprj_io_hldh_n[2]),\
-.\mprj_io_hldh_n[3] (mprj_io_hldh_n[3]),\
-.\mprj_io_hldh_n[4] (mprj_io_hldh_n[4]),\
-.\mprj_io_hldh_n[5] (mprj_io_hldh_n[5]),\
-.\mprj_io_hldh_n[6] (mprj_io_hldh_n[6]),\
-.\mprj_io_hldh_n[7] (mprj_io_hldh_n[7]),\
-.\mprj_io_hldh_n[8] (mprj_io_hldh_n[8]),\
-.\mprj_io_hldh_n[9] (mprj_io_hldh_n[9]),\
-.\mprj_io_hldh_n[10] (mprj_io_hldh_n[10]),\
-.\mprj_io_hldh_n[11] (mprj_io_hldh_n[11]),\
-.\mprj_io_hldh_n[12] (mprj_io_hldh_n[12]),\
-.\mprj_io_hldh_n[13] (mprj_io_hldh_n[13]),\
-.\mprj_io_hldh_n[14] (mprj_io_hldh_n[14]),\
-.\mprj_io_hldh_n[15] (mprj_io_hldh_n[15]),\
-.\mprj_io_hldh_n[16] (mprj_io_hldh_n[16]),\
-.\mprj_io_hldh_n[17] (mprj_io_hldh_n[17]),\
-.\mprj_io_hldh_n[18] (mprj_io_hldh_n[18]),\
-.\mprj_io_hldh_n[19] (mprj_io_hldh_n[19]),\
-.\mprj_io_hldh_n[20] (mprj_io_hldh_n[20]),\
-.\mprj_io_hldh_n[21] (mprj_io_hldh_n[21]),\
-.\mprj_io_hldh_n[22] (mprj_io_hldh_n[22]),\
-.\mprj_io_hldh_n[23] (mprj_io_hldh_n[23]),\
-.\mprj_io_hldh_n[24] (mprj_io_hldh_n[24]),\
-.\mprj_io_hldh_n[25] (mprj_io_hldh_n[25]),\
-.\mprj_io_hldh_n[26] (mprj_io_hldh_n[26]),\
-.\mprj_io_hldh_n[27] (mprj_io_hldh_n[27]),\
-.\mprj_io_hldh_n[28] (mprj_io_hldh_n[28]),\
-.\mprj_io_hldh_n[29] (mprj_io_hldh_n[29]),\
-.\mprj_io_hldh_n[30] (mprj_io_hldh_n[30]),\
-.\mprj_io_hldh_n[31] (mprj_io_hldh_n[31]),\
-.\mprj_io_hldh_n[32] (mprj_io_hldh_n[32]),\
-.\mprj_io_hldh_n[33] (mprj_io_hldh_n[33]),\
-.\mprj_io_hldh_n[34] (mprj_io_hldh_n[34]),\
-.\mprj_io_hldh_n[35] (mprj_io_hldh_n[35]),\
-.\mprj_io_hldh_n[36] (mprj_io_hldh_n[36]),\
-.\mprj_io_hldh_n[37] (mprj_io_hldh_n[37])
-
-`define MPRJ_IO_ENH \
-.\mprj_io_enh[0] (mprj_io_enh[0]),\
-.\mprj_io_enh[1] (mprj_io_enh[1]),\
-.\mprj_io_enh[2] (mprj_io_enh[2]),\
-.\mprj_io_enh[3] (mprj_io_enh[3]),\
-.\mprj_io_enh[4] (mprj_io_enh[4]),\
-.\mprj_io_enh[5] (mprj_io_enh[5]),\
-.\mprj_io_enh[6] (mprj_io_enh[6]),\
-.\mprj_io_enh[7] (mprj_io_enh[7]),\
-.\mprj_io_enh[8] (mprj_io_enh[8]),\
-.\mprj_io_enh[9] (mprj_io_enh[9]),\
-.\mprj_io_enh[10] (mprj_io_enh[10]),\
-.\mprj_io_enh[11] (mprj_io_enh[11]),\
-.\mprj_io_enh[12] (mprj_io_enh[12]),\
-.\mprj_io_enh[13] (mprj_io_enh[13]),\
-.\mprj_io_enh[14] (mprj_io_enh[14]),\
-.\mprj_io_enh[15] (mprj_io_enh[15]),\
-.\mprj_io_enh[16] (mprj_io_enh[16]),\
-.\mprj_io_enh[17] (mprj_io_enh[17]),\
-.\mprj_io_enh[18] (mprj_io_enh[18]),\
-.\mprj_io_enh[19] (mprj_io_enh[19]),\
-.\mprj_io_enh[20] (mprj_io_enh[20]),\
-.\mprj_io_enh[21] (mprj_io_enh[21]),\
-.\mprj_io_enh[22] (mprj_io_enh[22]),\
-.\mprj_io_enh[23] (mprj_io_enh[23]),\
-.\mprj_io_enh[24] (mprj_io_enh[24]),\
-.\mprj_io_enh[25] (mprj_io_enh[25]),\
-.\mprj_io_enh[26] (mprj_io_enh[26]),\
-.\mprj_io_enh[27] (mprj_io_enh[27]),\
-.\mprj_io_enh[28] (mprj_io_enh[28]),\
-.\mprj_io_enh[29] (mprj_io_enh[29]),\
-.\mprj_io_enh[30] (mprj_io_enh[30]),\
-.\mprj_io_enh[31] (mprj_io_enh[31]),\
-.\mprj_io_enh[32] (mprj_io_enh[32]),\
-.\mprj_io_enh[33] (mprj_io_enh[33]),\
-.\mprj_io_enh[34] (mprj_io_enh[34]),\
-.\mprj_io_enh[35] (mprj_io_enh[35]),\
-.\mprj_io_enh[36] (mprj_io_enh[36]),\
-.\mprj_io_enh[37] (mprj_io_enh[37])
-
-`define MPRJ_IO_INP_DIS \
-.\mprj_io_inp_dis[0] (mprj_io_inp_dis[0]),\
-.\mprj_io_inp_dis[1] (mprj_io_inp_dis[1]),\
-.\mprj_io_inp_dis[2] (mprj_io_inp_dis[2]),\
-.\mprj_io_inp_dis[3] (mprj_io_inp_dis[3]),\
-.\mprj_io_inp_dis[4] (mprj_io_inp_dis[4]),\
-.\mprj_io_inp_dis[5] (mprj_io_inp_dis[5]),\
-.\mprj_io_inp_dis[6] (mprj_io_inp_dis[6]),\
-.\mprj_io_inp_dis[7] (mprj_io_inp_dis[7]),\
-.\mprj_io_inp_dis[8] (mprj_io_inp_dis[8]),\
-.\mprj_io_inp_dis[9] (mprj_io_inp_dis[9]),\
-.\mprj_io_inp_dis[10] (mprj_io_inp_dis[10]),\
-.\mprj_io_inp_dis[11] (mprj_io_inp_dis[11]),\
-.\mprj_io_inp_dis[12] (mprj_io_inp_dis[12]),\
-.\mprj_io_inp_dis[13] (mprj_io_inp_dis[13]),\
-.\mprj_io_inp_dis[14] (mprj_io_inp_dis[14]),\
-.\mprj_io_inp_dis[15] (mprj_io_inp_dis[15]),\
-.\mprj_io_inp_dis[16] (mprj_io_inp_dis[16]),\
-.\mprj_io_inp_dis[17] (mprj_io_inp_dis[17]),\
-.\mprj_io_inp_dis[18] (mprj_io_inp_dis[18]),\
-.\mprj_io_inp_dis[19] (mprj_io_inp_dis[19]),\
-.\mprj_io_inp_dis[20] (mprj_io_inp_dis[20]),\
-.\mprj_io_inp_dis[21] (mprj_io_inp_dis[21]),\
-.\mprj_io_inp_dis[22] (mprj_io_inp_dis[22]),\
-.\mprj_io_inp_dis[23] (mprj_io_inp_dis[23]),\
-.\mprj_io_inp_dis[24] (mprj_io_inp_dis[24]),\
-.\mprj_io_inp_dis[25] (mprj_io_inp_dis[25]),\
-.\mprj_io_inp_dis[26] (mprj_io_inp_dis[26]),\
-.\mprj_io_inp_dis[27] (mprj_io_inp_dis[27]),\
-.\mprj_io_inp_dis[28] (mprj_io_inp_dis[28]),\
-.\mprj_io_inp_dis[29] (mprj_io_inp_dis[29]),\
-.\mprj_io_inp_dis[30] (mprj_io_inp_dis[30]),\
-.\mprj_io_inp_dis[31] (mprj_io_inp_dis[31]),\
-.\mprj_io_inp_dis[32] (mprj_io_inp_dis[32]),\
-.\mprj_io_inp_dis[33] (mprj_io_inp_dis[33]),\
-.\mprj_io_inp_dis[34] (mprj_io_inp_dis[34]),\
-.\mprj_io_inp_dis[35] (mprj_io_inp_dis[35]),\
-.\mprj_io_inp_dis[36] (mprj_io_inp_dis[36]),\
-.\mprj_io_inp_dis[37] (mprj_io_inp_dis[37])
-
-`define MPRJ_IO_IB_MODE_SEL \
-.\mprj_io_ib_mode_sel[0] (mprj_io_ib_mode_sel[0]),\
-.\mprj_io_ib_mode_sel[1] (mprj_io_ib_mode_sel[1]),\
-.\mprj_io_ib_mode_sel[2] (mprj_io_ib_mode_sel[2]),\
-.\mprj_io_ib_mode_sel[3] (mprj_io_ib_mode_sel[3]),\
-.\mprj_io_ib_mode_sel[4] (mprj_io_ib_mode_sel[4]),\
-.\mprj_io_ib_mode_sel[5] (mprj_io_ib_mode_sel[5]),\
-.\mprj_io_ib_mode_sel[6] (mprj_io_ib_mode_sel[6]),\
-.\mprj_io_ib_mode_sel[7] (mprj_io_ib_mode_sel[7]),\
-.\mprj_io_ib_mode_sel[8] (mprj_io_ib_mode_sel[8]),\
-.\mprj_io_ib_mode_sel[9] (mprj_io_ib_mode_sel[9]),\
-.\mprj_io_ib_mode_sel[10] (mprj_io_ib_mode_sel[10]),\
-.\mprj_io_ib_mode_sel[11] (mprj_io_ib_mode_sel[11]),\
-.\mprj_io_ib_mode_sel[12] (mprj_io_ib_mode_sel[12]),\
-.\mprj_io_ib_mode_sel[13] (mprj_io_ib_mode_sel[13]),\
-.\mprj_io_ib_mode_sel[14] (mprj_io_ib_mode_sel[14]),\
-.\mprj_io_ib_mode_sel[15] (mprj_io_ib_mode_sel[15]),\
-.\mprj_io_ib_mode_sel[16] (mprj_io_ib_mode_sel[16]),\
-.\mprj_io_ib_mode_sel[17] (mprj_io_ib_mode_sel[17]),\
-.\mprj_io_ib_mode_sel[18] (mprj_io_ib_mode_sel[18]),\
-.\mprj_io_ib_mode_sel[19] (mprj_io_ib_mode_sel[19]),\
-.\mprj_io_ib_mode_sel[20] (mprj_io_ib_mode_sel[20]),\
-.\mprj_io_ib_mode_sel[21] (mprj_io_ib_mode_sel[21]),\
-.\mprj_io_ib_mode_sel[22] (mprj_io_ib_mode_sel[22]),\
-.\mprj_io_ib_mode_sel[23] (mprj_io_ib_mode_sel[23]),\
-.\mprj_io_ib_mode_sel[24] (mprj_io_ib_mode_sel[24]),\
-.\mprj_io_ib_mode_sel[25] (mprj_io_ib_mode_sel[25]),\
-.\mprj_io_ib_mode_sel[26] (mprj_io_ib_mode_sel[26]),\
-.\mprj_io_ib_mode_sel[27] (mprj_io_ib_mode_sel[27]),\
-.\mprj_io_ib_mode_sel[28] (mprj_io_ib_mode_sel[28]),\
-.\mprj_io_ib_mode_sel[29] (mprj_io_ib_mode_sel[29]),\
-.\mprj_io_ib_mode_sel[30] (mprj_io_ib_mode_sel[30]),\
-.\mprj_io_ib_mode_sel[31] (mprj_io_ib_mode_sel[31]),\
-.\mprj_io_ib_mode_sel[32] (mprj_io_ib_mode_sel[32]),\
-.\mprj_io_ib_mode_sel[33] (mprj_io_ib_mode_sel[33]),\
-.\mprj_io_ib_mode_sel[34] (mprj_io_ib_mode_sel[34]),\
-.\mprj_io_ib_mode_sel[35] (mprj_io_ib_mode_sel[35]),\
-.\mprj_io_ib_mode_sel[36] (mprj_io_ib_mode_sel[36]),\
-.\mprj_io_ib_mode_sel[37] (mprj_io_ib_mode_sel[37])
-
-`define MPRJ_IO_VTRIP_SEL \
-.\mprj_io_vtrip_sel[0] (mprj_io_vtrip_sel[0]),\
-.\mprj_io_vtrip_sel[1] (mprj_io_vtrip_sel[1]),\
-.\mprj_io_vtrip_sel[2] (mprj_io_vtrip_sel[2]),\
-.\mprj_io_vtrip_sel[3] (mprj_io_vtrip_sel[3]),\
-.\mprj_io_vtrip_sel[4] (mprj_io_vtrip_sel[4]),\
-.\mprj_io_vtrip_sel[5] (mprj_io_vtrip_sel[5]),\
-.\mprj_io_vtrip_sel[6] (mprj_io_vtrip_sel[6]),\
-.\mprj_io_vtrip_sel[7] (mprj_io_vtrip_sel[7]),\
-.\mprj_io_vtrip_sel[8] (mprj_io_vtrip_sel[8]),\
-.\mprj_io_vtrip_sel[9] (mprj_io_vtrip_sel[9]),\
-.\mprj_io_vtrip_sel[10] (mprj_io_vtrip_sel[10]),\
-.\mprj_io_vtrip_sel[11] (mprj_io_vtrip_sel[11]),\
-.\mprj_io_vtrip_sel[12] (mprj_io_vtrip_sel[12]),\
-.\mprj_io_vtrip_sel[13] (mprj_io_vtrip_sel[13]),\
-.\mprj_io_vtrip_sel[14] (mprj_io_vtrip_sel[14]),\
-.\mprj_io_vtrip_sel[15] (mprj_io_vtrip_sel[15]),\
-.\mprj_io_vtrip_sel[16] (mprj_io_vtrip_sel[16]),\
-.\mprj_io_vtrip_sel[17] (mprj_io_vtrip_sel[17]),\
-.\mprj_io_vtrip_sel[18] (mprj_io_vtrip_sel[18]),\
-.\mprj_io_vtrip_sel[19] (mprj_io_vtrip_sel[19]),\
-.\mprj_io_vtrip_sel[20] (mprj_io_vtrip_sel[20]),\
-.\mprj_io_vtrip_sel[21] (mprj_io_vtrip_sel[21]),\
-.\mprj_io_vtrip_sel[22] (mprj_io_vtrip_sel[22]),\
-.\mprj_io_vtrip_sel[23] (mprj_io_vtrip_sel[23]),\
-.\mprj_io_vtrip_sel[24] (mprj_io_vtrip_sel[24]),\
-.\mprj_io_vtrip_sel[25] (mprj_io_vtrip_sel[25]),\
-.\mprj_io_vtrip_sel[26] (mprj_io_vtrip_sel[26]),\
-.\mprj_io_vtrip_sel[27] (mprj_io_vtrip_sel[27]),\
-.\mprj_io_vtrip_sel[28] (mprj_io_vtrip_sel[28]),\
-.\mprj_io_vtrip_sel[29] (mprj_io_vtrip_sel[29]),\
-.\mprj_io_vtrip_sel[30] (mprj_io_vtrip_sel[30]),\
-.\mprj_io_vtrip_sel[31] (mprj_io_vtrip_sel[31]),\
-.\mprj_io_vtrip_sel[32] (mprj_io_vtrip_sel[32]),\
-.\mprj_io_vtrip_sel[33] (mprj_io_vtrip_sel[33]),\
-.\mprj_io_vtrip_sel[34] (mprj_io_vtrip_sel[34]),\
-.\mprj_io_vtrip_sel[35] (mprj_io_vtrip_sel[35]),\
-.\mprj_io_vtrip_sel[36] (mprj_io_vtrip_sel[36]),\
-.\mprj_io_vtrip_sel[37] (mprj_io_vtrip_sel[37])
-
-
-`define MPRJ_IO_SLOW_SEL \
-.\mprj_io_slow_sel[0] (mprj_io_slow_sel[0]),\
-.\mprj_io_slow_sel[1] (mprj_io_slow_sel[1]),\
-.\mprj_io_slow_sel[2] (mprj_io_slow_sel[2]),\
-.\mprj_io_slow_sel[3] (mprj_io_slow_sel[3]),\
-.\mprj_io_slow_sel[4] (mprj_io_slow_sel[4]),\
-.\mprj_io_slow_sel[5] (mprj_io_slow_sel[5]),\
-.\mprj_io_slow_sel[6] (mprj_io_slow_sel[6]),\
-.\mprj_io_slow_sel[7] (mprj_io_slow_sel[7]),\
-.\mprj_io_slow_sel[8] (mprj_io_slow_sel[8]),\
-.\mprj_io_slow_sel[9] (mprj_io_slow_sel[9]),\
-.\mprj_io_slow_sel[10] (mprj_io_slow_sel[10]),\
-.\mprj_io_slow_sel[11] (mprj_io_slow_sel[11]),\
-.\mprj_io_slow_sel[12] (mprj_io_slow_sel[12]),\
-.\mprj_io_slow_sel[13] (mprj_io_slow_sel[13]),\
-.\mprj_io_slow_sel[14] (mprj_io_slow_sel[14]),\
-.\mprj_io_slow_sel[15] (mprj_io_slow_sel[15]),\
-.\mprj_io_slow_sel[16] (mprj_io_slow_sel[16]),\
-.\mprj_io_slow_sel[17] (mprj_io_slow_sel[17]),\
-.\mprj_io_slow_sel[18] (mprj_io_slow_sel[18]),\
-.\mprj_io_slow_sel[19] (mprj_io_slow_sel[19]),\
-.\mprj_io_slow_sel[20] (mprj_io_slow_sel[20]),\
-.\mprj_io_slow_sel[21] (mprj_io_slow_sel[21]),\
-.\mprj_io_slow_sel[22] (mprj_io_slow_sel[22]),\
-.\mprj_io_slow_sel[23] (mprj_io_slow_sel[23]),\
-.\mprj_io_slow_sel[24] (mprj_io_slow_sel[24]),\
-.\mprj_io_slow_sel[25] (mprj_io_slow_sel[25]),\
-.\mprj_io_slow_sel[26] (mprj_io_slow_sel[26]),\
-.\mprj_io_slow_sel[27] (mprj_io_slow_sel[27]),\
-.\mprj_io_slow_sel[28] (mprj_io_slow_sel[28]),\
-.\mprj_io_slow_sel[29] (mprj_io_slow_sel[29]),\
-.\mprj_io_slow_sel[30] (mprj_io_slow_sel[30]),\
-.\mprj_io_slow_sel[31] (mprj_io_slow_sel[31]),\
-.\mprj_io_slow_sel[32] (mprj_io_slow_sel[32]),\
-.\mprj_io_slow_sel[33] (mprj_io_slow_sel[33]),\
-.\mprj_io_slow_sel[34] (mprj_io_slow_sel[34]),\
-.\mprj_io_slow_sel[35] (mprj_io_slow_sel[35]),\
-.\mprj_io_slow_sel[36] (mprj_io_slow_sel[36]),\
-.\mprj_io_slow_sel[37] (mprj_io_slow_sel[37])
-
-
-`define MPRJ_IO_HOLDOVER \
-.\mprj_io_holdover[0] (mprj_io_holdover[0]),\
-.\mprj_io_holdover[1] (mprj_io_holdover[1]),\
-.\mprj_io_holdover[2] (mprj_io_holdover[2]),\
-.\mprj_io_holdover[3] (mprj_io_holdover[3]),\
-.\mprj_io_holdover[4] (mprj_io_holdover[4]),\
-.\mprj_io_holdover[5] (mprj_io_holdover[5]),\
-.\mprj_io_holdover[6] (mprj_io_holdover[6]),\
-.\mprj_io_holdover[7] (mprj_io_holdover[7]),\
-.\mprj_io_holdover[8] (mprj_io_holdover[8]),\
-.\mprj_io_holdover[9] (mprj_io_holdover[9]),\
-.\mprj_io_holdover[10] (mprj_io_holdover[10]),\
-.\mprj_io_holdover[11] (mprj_io_holdover[11]),\
-.\mprj_io_holdover[12] (mprj_io_holdover[12]),\
-.\mprj_io_holdover[13] (mprj_io_holdover[13]),\
-.\mprj_io_holdover[14] (mprj_io_holdover[14]),\
-.\mprj_io_holdover[15] (mprj_io_holdover[15]),\
-.\mprj_io_holdover[16] (mprj_io_holdover[16]),\
-.\mprj_io_holdover[17] (mprj_io_holdover[17]),\
-.\mprj_io_holdover[18] (mprj_io_holdover[18]),\
-.\mprj_io_holdover[19] (mprj_io_holdover[19]),\
-.\mprj_io_holdover[20] (mprj_io_holdover[20]),\
-.\mprj_io_holdover[21] (mprj_io_holdover[21]),\
-.\mprj_io_holdover[22] (mprj_io_holdover[22]),\
-.\mprj_io_holdover[23] (mprj_io_holdover[23]),\
-.\mprj_io_holdover[24] (mprj_io_holdover[24]),\
-.\mprj_io_holdover[25] (mprj_io_holdover[25]),\
-.\mprj_io_holdover[26] (mprj_io_holdover[26]),\
-.\mprj_io_holdover[27] (mprj_io_holdover[27]),\
-.\mprj_io_holdover[28] (mprj_io_holdover[28]),\
-.\mprj_io_holdover[29] (mprj_io_holdover[29]),\
-.\mprj_io_holdover[30] (mprj_io_holdover[30]),\
-.\mprj_io_holdover[31] (mprj_io_holdover[31]),\
-.\mprj_io_holdover[32] (mprj_io_holdover[32]),\
-.\mprj_io_holdover[33] (mprj_io_holdover[33]),\
-.\mprj_io_holdover[34] (mprj_io_holdover[34]),\
-.\mprj_io_holdover[35] (mprj_io_holdover[35]),\
-.\mprj_io_holdover[36] (mprj_io_holdover[36]),\
-.\mprj_io_holdover[37] (mprj_io_holdover[37])
-
-`define MPRJ_IO_ANALOG_EN \
-.\mprj_io_analog_en[0] (mprj_io_analog_en[0]),\
-.\mprj_io_analog_en[1] (mprj_io_analog_en[1]),\
-.\mprj_io_analog_en[2] (mprj_io_analog_en[2]),\
-.\mprj_io_analog_en[3] (mprj_io_analog_en[3]),\
-.\mprj_io_analog_en[4] (mprj_io_analog_en[4]),\
-.\mprj_io_analog_en[5] (mprj_io_analog_en[5]),\
-.\mprj_io_analog_en[6] (mprj_io_analog_en[6]),\
-.\mprj_io_analog_en[7] (mprj_io_analog_en[7]),\
-.\mprj_io_analog_en[8] (mprj_io_analog_en[8]),\
-.\mprj_io_analog_en[9] (mprj_io_analog_en[9]),\
-.\mprj_io_analog_en[10] (mprj_io_analog_en[10]),\
-.\mprj_io_analog_en[11] (mprj_io_analog_en[11]),\
-.\mprj_io_analog_en[12] (mprj_io_analog_en[12]),\
-.\mprj_io_analog_en[13] (mprj_io_analog_en[13]),\
-.\mprj_io_analog_en[14] (mprj_io_analog_en[14]),\
-.\mprj_io_analog_en[15] (mprj_io_analog_en[15]),\
-.\mprj_io_analog_en[16] (mprj_io_analog_en[16]),\
-.\mprj_io_analog_en[17] (mprj_io_analog_en[17]),\
-.\mprj_io_analog_en[18] (mprj_io_analog_en[18]),\
-.\mprj_io_analog_en[19] (mprj_io_analog_en[19]),\
-.\mprj_io_analog_en[20] (mprj_io_analog_en[20]),\
-.\mprj_io_analog_en[21] (mprj_io_analog_en[21]),\
-.\mprj_io_analog_en[22] (mprj_io_analog_en[22]),\
-.\mprj_io_analog_en[23] (mprj_io_analog_en[23]),\
-.\mprj_io_analog_en[24] (mprj_io_analog_en[24]),\
-.\mprj_io_analog_en[25] (mprj_io_analog_en[25]),\
-.\mprj_io_analog_en[26] (mprj_io_analog_en[26]),\
-.\mprj_io_analog_en[27] (mprj_io_analog_en[27]),\
-.\mprj_io_analog_en[28] (mprj_io_analog_en[28]),\
-.\mprj_io_analog_en[29] (mprj_io_analog_en[29]),\
-.\mprj_io_analog_en[30] (mprj_io_analog_en[30]),\
-.\mprj_io_analog_en[31] (mprj_io_analog_en[31]),\
-.\mprj_io_analog_en[32] (mprj_io_analog_en[32]),\
-.\mprj_io_analog_en[33] (mprj_io_analog_en[33]),\
-.\mprj_io_analog_en[34] (mprj_io_analog_en[34]),\
-.\mprj_io_analog_en[35] (mprj_io_analog_en[35]),\
-.\mprj_io_analog_en[36] (mprj_io_analog_en[36]),\
-.\mprj_io_analog_en[37] (mprj_io_analog_en[37])
-
-`define MPRJ_IO_ANALOG_SEL \
-.\mprj_io_analog_sel[0] (mprj_io_analog_sel[0]),\
-.\mprj_io_analog_sel[1] (mprj_io_analog_sel[1]),\
-.\mprj_io_analog_sel[2] (mprj_io_analog_sel[2]),\
-.\mprj_io_analog_sel[3] (mprj_io_analog_sel[3]),\
-.\mprj_io_analog_sel[4] (mprj_io_analog_sel[4]),\
-.\mprj_io_analog_sel[5] (mprj_io_analog_sel[5]),\
-.\mprj_io_analog_sel[6] (mprj_io_analog_sel[6]),\
-.\mprj_io_analog_sel[7] (mprj_io_analog_sel[7]),\
-.\mprj_io_analog_sel[8] (mprj_io_analog_sel[8]),\
-.\mprj_io_analog_sel[9] (mprj_io_analog_sel[9]),\
-.\mprj_io_analog_sel[10] (mprj_io_analog_sel[10]),\
-.\mprj_io_analog_sel[11] (mprj_io_analog_sel[11]),\
-.\mprj_io_analog_sel[12] (mprj_io_analog_sel[12]),\
-.\mprj_io_analog_sel[13] (mprj_io_analog_sel[13]),\
-.\mprj_io_analog_sel[14] (mprj_io_analog_sel[14]),\
-.\mprj_io_analog_sel[15] (mprj_io_analog_sel[15]),\
-.\mprj_io_analog_sel[16] (mprj_io_analog_sel[16]),\
-.\mprj_io_analog_sel[17] (mprj_io_analog_sel[17]),\
-.\mprj_io_analog_sel[18] (mprj_io_analog_sel[18]),\
-.\mprj_io_analog_sel[19] (mprj_io_analog_sel[19]),\
-.\mprj_io_analog_sel[20] (mprj_io_analog_sel[20]),\
-.\mprj_io_analog_sel[21] (mprj_io_analog_sel[21]),\
-.\mprj_io_analog_sel[22] (mprj_io_analog_sel[22]),\
-.\mprj_io_analog_sel[23] (mprj_io_analog_sel[23]),\
-.\mprj_io_analog_sel[24] (mprj_io_analog_sel[24]),\
-.\mprj_io_analog_sel[25] (mprj_io_analog_sel[25]),\
-.\mprj_io_analog_sel[26] (mprj_io_analog_sel[26]),\
-.\mprj_io_analog_sel[27] (mprj_io_analog_sel[27]),\
-.\mprj_io_analog_sel[28] (mprj_io_analog_sel[28]),\
-.\mprj_io_analog_sel[29] (mprj_io_analog_sel[29]),\
-.\mprj_io_analog_sel[30] (mprj_io_analog_sel[30]),\
-.\mprj_io_analog_sel[31] (mprj_io_analog_sel[31]),\
-.\mprj_io_analog_sel[32] (mprj_io_analog_sel[32]),\
-.\mprj_io_analog_sel[33] (mprj_io_analog_sel[33]),\
-.\mprj_io_analog_sel[34] (mprj_io_analog_sel[34]),\
-.\mprj_io_analog_sel[35] (mprj_io_analog_sel[35]),\
-.\mprj_io_analog_sel[36] (mprj_io_analog_sel[36]),\
-.\mprj_io_analog_sel[37] (mprj_io_analog_sel[37])
-
-
-`define MPRJ_IO_ANALOG_POL \
-.\mprj_io_analog_pol[0] (mprj_io_analog_pol[0]),\
-.\mprj_io_analog_pol[1] (mprj_io_analog_pol[1]),\
-.\mprj_io_analog_pol[2] (mprj_io_analog_pol[2]),\
-.\mprj_io_analog_pol[3] (mprj_io_analog_pol[3]),\
-.\mprj_io_analog_pol[4] (mprj_io_analog_pol[4]),\
-.\mprj_io_analog_pol[5] (mprj_io_analog_pol[5]),\
-.\mprj_io_analog_pol[6] (mprj_io_analog_pol[6]),\
-.\mprj_io_analog_pol[7] (mprj_io_analog_pol[7]),\
-.\mprj_io_analog_pol[8] (mprj_io_analog_pol[8]),\
-.\mprj_io_analog_pol[9] (mprj_io_analog_pol[9]),\
-.\mprj_io_analog_pol[10] (mprj_io_analog_pol[10]),\
-.\mprj_io_analog_pol[11] (mprj_io_analog_pol[11]),\
-.\mprj_io_analog_pol[12] (mprj_io_analog_pol[12]),\
-.\mprj_io_analog_pol[13] (mprj_io_analog_pol[13]),\
-.\mprj_io_analog_pol[14] (mprj_io_analog_pol[14]),\
-.\mprj_io_analog_pol[15] (mprj_io_analog_pol[15]),\
-.\mprj_io_analog_pol[16] (mprj_io_analog_pol[16]),\
-.\mprj_io_analog_pol[17] (mprj_io_analog_pol[17]),\
-.\mprj_io_analog_pol[18] (mprj_io_analog_pol[18]),\
-.\mprj_io_analog_pol[19] (mprj_io_analog_pol[19]),\
-.\mprj_io_analog_pol[20] (mprj_io_analog_pol[20]),\
-.\mprj_io_analog_pol[21] (mprj_io_analog_pol[21]),\
-.\mprj_io_analog_pol[22] (mprj_io_analog_pol[22]),\
-.\mprj_io_analog_pol[23] (mprj_io_analog_pol[23]),\
-.\mprj_io_analog_pol[24] (mprj_io_analog_pol[24]),\
-.\mprj_io_analog_pol[25] (mprj_io_analog_pol[25]),\
-.\mprj_io_analog_pol[26] (mprj_io_analog_pol[26]),\
-.\mprj_io_analog_pol[27] (mprj_io_analog_pol[27]),\
-.\mprj_io_analog_pol[28] (mprj_io_analog_pol[28]),\
-.\mprj_io_analog_pol[29] (mprj_io_analog_pol[29]),\
-.\mprj_io_analog_pol[30] (mprj_io_analog_pol[30]),\
-.\mprj_io_analog_pol[31] (mprj_io_analog_pol[31]),\
-.\mprj_io_analog_pol[32] (mprj_io_analog_pol[32]),\
-.\mprj_io_analog_pol[33] (mprj_io_analog_pol[33]),\
-.\mprj_io_analog_pol[34] (mprj_io_analog_pol[34]),\
-.\mprj_io_analog_pol[35] (mprj_io_analog_pol[35]),\
-.\mprj_io_analog_pol[36] (mprj_io_analog_pol[36]),\
-.\mprj_io_analog_pol[37] (mprj_io_analog_pol[37])
-
-`define MPRJ_IO_DM \
-.\mprj_io_dm[0] (mprj_io_dm[0]),\
-.\mprj_io_dm[1] (mprj_io_dm[1]),\
-.\mprj_io_dm[2] (mprj_io_dm[2]),\
-.\mprj_io_dm[3] (mprj_io_dm[3]),\
-.\mprj_io_dm[4] (mprj_io_dm[4]),\
-.\mprj_io_dm[5] (mprj_io_dm[5]),\
-.\mprj_io_dm[6] (mprj_io_dm[6]),\
-.\mprj_io_dm[7] (mprj_io_dm[7]),\
-.\mprj_io_dm[8] (mprj_io_dm[8]),\
-.\mprj_io_dm[9] (mprj_io_dm[9]),\
-.\mprj_io_dm[10] (mprj_io_dm[10]),\
-.\mprj_io_dm[11] (mprj_io_dm[11]),\
-.\mprj_io_dm[12] (mprj_io_dm[12]),\
-.\mprj_io_dm[13] (mprj_io_dm[13]),\
-.\mprj_io_dm[14] (mprj_io_dm[14]),\
-.\mprj_io_dm[15] (mprj_io_dm[15]),\
-.\mprj_io_dm[16] (mprj_io_dm[16]),\
-.\mprj_io_dm[17] (mprj_io_dm[17]),\
-.\mprj_io_dm[18] (mprj_io_dm[18]),\
-.\mprj_io_dm[19] (mprj_io_dm[19]),\
-.\mprj_io_dm[20] (mprj_io_dm[20]),\
-.\mprj_io_dm[21] (mprj_io_dm[21]),\
-.\mprj_io_dm[22] (mprj_io_dm[22]),\
-.\mprj_io_dm[23] (mprj_io_dm[23]),\
-.\mprj_io_dm[24] (mprj_io_dm[24]),\
-.\mprj_io_dm[25] (mprj_io_dm[25]),\
-.\mprj_io_dm[26] (mprj_io_dm[26]),\
-.\mprj_io_dm[27] (mprj_io_dm[27]),\
-.\mprj_io_dm[28] (mprj_io_dm[28]),\
-.\mprj_io_dm[29] (mprj_io_dm[29]),\
-.\mprj_io_dm[30] (mprj_io_dm[30]),\
-.\mprj_io_dm[31] (mprj_io_dm[31]),\
-.\mprj_io_dm[32] (mprj_io_dm[32]),\
-.\mprj_io_dm[33] (mprj_io_dm[33]),\
-.\mprj_io_dm[34] (mprj_io_dm[34]),\
-.\mprj_io_dm[35] (mprj_io_dm[35]),\
-.\mprj_io_dm[36] (mprj_io_dm[36]),\
-.\mprj_io_dm[37] (mprj_io_dm[37]),\
-.\mprj_io_dm[38] (mprj_io_dm[38]),\
-.\mprj_io_dm[39] (mprj_io_dm[39]),\
-.\mprj_io_dm[40] (mprj_io_dm[40]),\
-.\mprj_io_dm[41] (mprj_io_dm[41]),\
-.\mprj_io_dm[42] (mprj_io_dm[42]),\
-.\mprj_io_dm[43] (mprj_io_dm[43]),\
-.\mprj_io_dm[44] (mprj_io_dm[44]),\
-.\mprj_io_dm[45] (mprj_io_dm[45]),\
-.\mprj_io_dm[46] (mprj_io_dm[46]),\
-.\mprj_io_dm[47] (mprj_io_dm[47]),\
-.\mprj_io_dm[48] (mprj_io_dm[48]),\
-.\mprj_io_dm[49] (mprj_io_dm[49]),\
-.\mprj_io_dm[50] (mprj_io_dm[50]),\
-.\mprj_io_dm[51] (mprj_io_dm[51]),\
-.\mprj_io_dm[52] (mprj_io_dm[52]),\
-.\mprj_io_dm[53] (mprj_io_dm[53]),\
-.\mprj_io_dm[54] (mprj_io_dm[54]),\
-.\mprj_io_dm[55] (mprj_io_dm[55]),\
-.\mprj_io_dm[56] (mprj_io_dm[56]),\
-.\mprj_io_dm[57] (mprj_io_dm[57]),\
-.\mprj_io_dm[58] (mprj_io_dm[58]),\
-.\mprj_io_dm[59] (mprj_io_dm[59]),\
-.\mprj_io_dm[60] (mprj_io_dm[60]),\
-.\mprj_io_dm[61] (mprj_io_dm[61]),\
-.\mprj_io_dm[62] (mprj_io_dm[62]),\
-.\mprj_io_dm[63] (mprj_io_dm[63]),\
-.\mprj_io_dm[64] (mprj_io_dm[64]),\
-.\mprj_io_dm[65] (mprj_io_dm[65]),\
-.\mprj_io_dm[66] (mprj_io_dm[66]),\
-.\mprj_io_dm[67] (mprj_io_dm[67]),\
-.\mprj_io_dm[68] (mprj_io_dm[68]),\
-.\mprj_io_dm[69] (mprj_io_dm[69]),\
-.\mprj_io_dm[70] (mprj_io_dm[70]),\
-.\mprj_io_dm[71] (mprj_io_dm[71]),\
-.\mprj_io_dm[72] (mprj_io_dm[72]),\
-.\mprj_io_dm[73] (mprj_io_dm[73]),\
-.\mprj_io_dm[74] (mprj_io_dm[74]),\
-.\mprj_io_dm[75] (mprj_io_dm[75]),\
-.\mprj_io_dm[76] (mprj_io_dm[76]),\
-.\mprj_io_dm[77] (mprj_io_dm[77]),\
-.\mprj_io_dm[78] (mprj_io_dm[78]),\
-.\mprj_io_dm[79] (mprj_io_dm[79]),\
-.\mprj_io_dm[80] (mprj_io_dm[80]),\
-.\mprj_io_dm[81] (mprj_io_dm[81]),\
-.\mprj_io_dm[82] (mprj_io_dm[82]),\
-.\mprj_io_dm[83] (mprj_io_dm[83]),\
-.\mprj_io_dm[84] (mprj_io_dm[84]),\
-.\mprj_io_dm[85] (mprj_io_dm[85]),\
-.\mprj_io_dm[86] (mprj_io_dm[86]),\
-.\mprj_io_dm[87] (mprj_io_dm[87]),\
-.\mprj_io_dm[88] (mprj_io_dm[88]),\
-.\mprj_io_dm[89] (mprj_io_dm[89]),\
-.\mprj_io_dm[90] (mprj_io_dm[90]),\
-.\mprj_io_dm[91] (mprj_io_dm[91]),\
-.\mprj_io_dm[92] (mprj_io_dm[92]),\
-.\mprj_io_dm[93] (mprj_io_dm[93]),\
-.\mprj_io_dm[94] (mprj_io_dm[94]),\
-.\mprj_io_dm[95] (mprj_io_dm[95]),\
-.\mprj_io_dm[96] (mprj_io_dm[96]),\
-.\mprj_io_dm[97] (mprj_io_dm[97]),\
-.\mprj_io_dm[98] (mprj_io_dm[98]),\
-.\mprj_io_dm[99] (mprj_io_dm[99]),\
-.\mprj_io_dm[100] (mprj_io_dm[100]),\
-.\mprj_io_dm[101] (mprj_io_dm[101]),\
-.\mprj_io_dm[102] (mprj_io_dm[102]),\
-.\mprj_io_dm[103] (mprj_io_dm[103]),\
-.\mprj_io_dm[104] (mprj_io_dm[104]),\
-.\mprj_io_dm[105] (mprj_io_dm[105]),\
-.\mprj_io_dm[106] (mprj_io_dm[106]),\
-.\mprj_io_dm[107] (mprj_io_dm[107]),\
-.\mprj_io_dm[108] (mprj_io_dm[108]),\
-.\mprj_io_dm[109] (mprj_io_dm[109]),\
-.\mprj_io_dm[110] (mprj_io_dm[110]),\
-.\mprj_io_dm[111] (mprj_io_dm[111]),\
-.\mprj_io_dm[112] (mprj_io_dm[112]),\
-.\mprj_io_dm[113] (mprj_io_dm[113])
-
-`define MPRJ_IO_ANALOG \
-.\mprj_analog_io[0] (mprj_analog_io[0]),\
-.\mprj_analog_io[1] (mprj_analog_io[1]),\
-.\mprj_analog_io[2] (mprj_analog_io[2]),\
-.\mprj_analog_io[3] (mprj_analog_io[3]),\
-.\mprj_analog_io[4] (mprj_analog_io[4]),\
-.\mprj_analog_io[5] (mprj_analog_io[5]),\
-.\mprj_analog_io[6] (mprj_analog_io[6]),\
-.\mprj_analog_io[7] (mprj_analog_io[7]),\
-.\mprj_analog_io[8] (mprj_analog_io[8]),\
-.\mprj_analog_io[9] (mprj_analog_io[9]),\
-.\mprj_analog_io[10] (mprj_analog_io[10]),\
-.\mprj_analog_io[11] (mprj_analog_io[11]),\
-.\mprj_analog_io[12] (mprj_analog_io[12]),\
-.\mprj_analog_io[13] (mprj_analog_io[13]),\
-.\mprj_analog_io[14] (mprj_analog_io[14]),\
-.\mprj_analog_io[15] (mprj_analog_io[15]),\
-.\mprj_analog_io[16] (mprj_analog_io[16]),\
-.\mprj_analog_io[17] (mprj_analog_io[17]),\
-.\mprj_analog_io[18] (mprj_analog_io[18]),\
-.\mprj_analog_io[19] (mprj_analog_io[19]),\
-.\mprj_analog_io[20] (mprj_analog_io[20]),\
-.\mprj_analog_io[21] (mprj_analog_io[21]),\
-.\mprj_analog_io[22] (mprj_analog_io[22]),\
-.\mprj_analog_io[23] (mprj_analog_io[23]),\
-.\mprj_analog_io[24] (mprj_analog_io[24]),\
-.\mprj_analog_io[25] (mprj_analog_io[25]),\
-.\mprj_analog_io[26] (mprj_analog_io[26]),\
-.\mprj_analog_io[27] (mprj_analog_io[27]),\
-.\mprj_analog_io[28] (mprj_analog_io[28]),\
-.\mprj_analog_io[29] (mprj_analog_io[29]),\
-.\mprj_analog_io[30] (mprj_analog_io[30])
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/gpio_wb/Makefile b/verilog/dv/wb_utests/gpio_wb/Makefile
deleted file mode 100644
index a42f609..0000000
--- a/verilog/dv/wb_utests/gpio_wb/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = gpio_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog -I .. -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd
-
-.PHONY: clean all
diff --git a/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v b/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v
deleted file mode 100644
index ea6c772..0000000
--- a/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v
+++ /dev/null
@@ -1,199 +0,0 @@
-// 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
-
-`include "gpio_wb.v"
-
-module gpio_wb_tb;
-
-    reg wb_clk_i;
-    reg wb_rst_i;
-
-    reg wb_stb_i;
-    reg wb_cyc_i;
-    reg wb_we_i;
-    reg [3:0] wb_sel_i;
-
-    reg [31:0] wb_dat_i;
-    reg [31:0] wb_adr_i;
-    reg gpio_in_pad;
-
-    wire wb_ack_o;
-    wire [31:0] wb_dat_o;
-
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_cyc_i = 0;  
-        wb_sel_i = 0;  
-        wb_we_i  = 0;  
-        wb_dat_i = 0; 
-        wb_adr_i = 0;  
-        gpio_in_pad = 0;
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    initial begin
-        $dumpfile("gpio_wb_tb.vcd");
-        $dumpvars(0, gpio_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test GPIO Wishbone Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-    
-    // GPIO Internal Register Addresses
-    wire [31:0] gpio_adr     = uut.BASE_ADR | uut.GPIO_DATA;
-    wire [31:0] gpio_oeb_adr = uut.BASE_ADR | uut.GPIO_ENA;
-    wire [31:0] gpio_pu_adr  = uut.BASE_ADR | uut.GPIO_PU;
-    wire [31:0] gpio_pd_adr  = uut.BASE_ADR | uut.GPIO_PD;
-
-    reg gpio_data;
-    reg gpio_pu; 
-    reg gpio_pd; 
-    reg gpio_oeb;  
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0; 
-        #2;
-
-        // Write to gpio_data reg
-        gpio_in_pad = 1'b1;
-        gpio_data = 1'b1;
-        write(gpio_adr, gpio_data);
-       
-        #2;
-        // Read from gpio_data reg
-        read(gpio_adr);
-        if (wb_dat_o !== {30'd0, gpio_data, gpio_in_pad}) begin
-            $display("Monitor: Error reading from gpio reg");
-            $finish;
-        end
-        
-        #2;
-        // Write to pull-up reg
-        gpio_pu = 1'b1;
-        write(gpio_pu_adr, gpio_pu);
-        
-        #2;
-        // Read from pull-up reg
-        read(gpio_pu_adr);
-        if (wb_dat_o !== {31'd0, gpio_pu}) begin
-            $display("Monitor: Error reading from gpio pull-up reg");
-            $finish;
-        end
-
-        #2;
-        // Write to pull-down reg
-        gpio_pd = 1'b1;
-        write(gpio_pd_adr, gpio_pd);
-        
-        #2;
-        // Read from pull-down reg
-        read(gpio_pd_adr);
-        if (wb_dat_o !== {31'd0, gpio_pd}) begin
-            $display("Monitor: Error reading from gpio pull-down reg");
-            $finish;
-        end
-
-        #2;
-        // Write to gpio enable reg
-        gpio_oeb = 1'b1;
-        write(gpio_oeb_adr, gpio_oeb);
-        
-        #2;
-        // Read from gpio enable reg
-        read(gpio_oeb_adr);
-        if (wb_dat_o !== {31'd0, gpio_oeb}) begin
-            $display("Monitor: Error reading from gpio output enable reg");
-            $finish;
-        end
-        
-        #6;
-        $display("Monitor: GPIO WB Success!");
-        $display("Monitor: GPIO WB Passed!");
-        $finish;
-    end
-    
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Read Cycle Ended.");
-        end
-    endtask
-    
-    gpio_wb uut(
-        .wb_clk_i(wb_clk_i),
-	.wb_rst_i(wb_rst_i),
-        .wb_stb_i(wb_stb_i),
-	.wb_cyc_i(wb_cyc_i),
-	.wb_sel_i(wb_sel_i),
-	.wb_we_i(wb_we_i),
-	.wb_dat_i(wb_dat_i),
-	.wb_adr_i(wb_adr_i), 
-        .wb_ack_o(wb_ack_o),
-	.wb_dat_o(wb_dat_o),
-        .gpio_in_pad(gpio_in_pad)
-    );
-    
-endmodule
diff --git a/verilog/dv/wb_utests/intercon_wb/Makefile b/verilog/dv/wb_utests/intercon_wb/Makefile
deleted file mode 100644
index 294cf17..0000000
--- a/verilog/dv/wb_utests/intercon_wb/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = intercon_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog -I .. -I ../../ -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
diff --git a/verilog/dv/wb_utests/intercon_wb/intercon_wb_tb.v b/verilog/dv/wb_utests/intercon_wb/intercon_wb_tb.v
deleted file mode 100644
index 4f6fd38..0000000
--- a/verilog/dv/wb_utests/intercon_wb/intercon_wb_tb.v
+++ /dev/null
@@ -1,204 +0,0 @@
-// 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
-
-`include "wb_intercon.v"
-`include "dummy_slave.v"
-
-`define AW 32
-`define DW 32
-`define NS 6
-
-`define SLAVE_ADR { \
-    {8'h28, {24{1'b0}} }, \   
-    {8'h23, {24{1'b0}} }, \     
-    {8'h21, {24{1'b0}} }, \    
-    {8'h20, {24{1'b0}} }, \    
-    {8'h10, {24{1'b0}} }, \    
-    {8'h00, {24{1'b0}} }  \
-}\
-
-`define ADR_MASK { \
-    {8'hFF, {24{1'b0}} }, \
-    {8'hFF, {24{1'b0}} }, \
-    {8'hFF, {24{1'b0}} }, \
-    {8'hFF, {24{1'b0}} }, \
-    {8'hFF, {24{1'b0}} }, \
-    {8'hFF, {24{1'b0}} }  \
-}\
-
-module intercon_wb_tb;
-
-    localparam SEL = `DW / 8;
-
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    // Master Interface
-    reg wbm_stb_i;
-    reg wbm_cyc_i;
-    reg wbm_we_i;
-    reg [SEL-1:0] wbm_sel_i;
-    reg [`AW-1:0] wbm_adr_i;
-    reg [`DW-1:0] wbm_dat_i;
-
-    wire [`DW-1:0] wbm_dat_o;
-    wire wbm_ack_o;
-
-    // Wishbone Slave Interface
-    wire [`NS-1:0] wbs_stb_i;
-    wire [`NS-1:0] wbs_ack_o;
-    wire [(`NS*`DW)-1:0] wbs_adr_i;
-    wire [(`NS*`AW)-1:0] wbs_dat_i;
-    wire [(`NS*`DW)-1:0] wbs_dat_o;
-
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wbm_adr_i = 0;  
-        wbm_dat_i = 0;  
-        wbm_sel_i = 0;   
-        wbm_we_i  = 0;    
-        wbm_cyc_i = 0;   
-        wbm_stb_i = 0;  
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    initial begin
-        $dumpfile("intercon_wb_tb.vcd");
-        $dumpvars(0, intercon_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Wishbone Interconnect Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    reg [`AW*`NS-1: 0] addr = `SLAVE_ADR;
-    reg [`DW:0] slave_data;
-    reg [`AW:0] slave_addr;
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0; 
-        #2;
-
-        // W/R from all slaves
-        for (i=0; i<`NS; i=i+1) begin
-            slave_addr = addr[i*`AW +: `AW];
-            slave_data = $urandom_range(0, 2**32);
-            write(slave_addr, slave_data);
-            #2;
-            read(slave_addr);
-            if (wbm_dat_o !== slave_data) begin
-                $display("%c[1;31m",27);
-                $display ("Monitor: Reading from slave %0d failed", i);
-                $display("Monitor: Test Wishbone Interconnect failed");
-                $display("%c[0m",27);
-                $finish;
-            end
-        end
-        $display("Monitor: Test Wishbone Interconnect Success!");
-        $display("Monitor: Test Wishbone Interconnect Passed!");
-        $finish;
-    end
-    
-    task write;
-        input [`AW-1:0] addr;
-        input [`AW-1:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wbm_stb_i = 1;
-                wbm_cyc_i = 1;
-                wbm_sel_i = {SEL{1'b1}}; 
-                wbm_we_i = 1;    
-                wbm_adr_i = addr;
-                wbm_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wbm_ack_o == 1);
-            wait(wbm_ack_o == 0);
-            wbm_cyc_i = 0;
-            wbm_stb_i = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [`AW-1:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wbm_stb_i = 1;
-                wbm_cyc_i = 1;
-                wbm_adr_i = addr;
-                wbm_we_i =  0;     
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wbm_ack_o == 1);
-            wait(wbm_ack_o == 0);
-            wbm_cyc_i = 0;
-            wbm_stb_i = 0;
-            $display("Read Cycle Ended.");
-        
-        end
-    endtask
-
-    wb_intercon #(
-        .AW(`AW),
-        .DW(`DW),
-        .NS(`NS),
-        .ADR_MASK(`ADR_MASK),
-        .SLAVE_ADR(`SLAVE_ADR)
-    ) uut(
-        // Master Interface
-        .wbm_adr_i(wbm_adr_i),
-        .wbm_stb_i(wbm_stb_i),
-        .wbm_dat_o(wbm_dat_o),
-        .wbm_ack_o(wbm_ack_o), 
-    
-        // Slave Interface
-        .wbs_stb_o(wbs_stb_i),
-        .wbs_dat_i(wbs_dat_o), 
-        .wbs_ack_i(wbs_ack_o)
-    );
-    
-    // Instantiate five dummy slaves for testing
-    dummy_slave dummy_slaves [`NS-1:0](
-        .wb_clk_i({`NS{wb_clk_i}}),
-        .wb_rst_i({`NS{wb_rst_i}}),
-        .wb_stb_i(wbs_stb_i),
-        .wb_cyc_i(wbm_cyc_i),
-        .wb_we_i(wbm_we_i),
-        .wb_sel_i(wbm_sel_i),
-        .wb_adr_i(wbm_adr_i),
-        .wb_dat_i(wbm_dat_i),
-        .wb_dat_o(wbs_dat_o),
-        .wb_ack_o(wbs_ack_o)
-    );
-
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/la_wb/Makefile b/verilog/dv/wb_utests/la_wb/Makefile
deleted file mode 100644
index 1b76d6b..0000000
--- a/verilog/dv/wb_utests/la_wb/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = la_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog -I .. -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd
-
-.PHONY: clean all
diff --git a/verilog/dv/wb_utests/la_wb/la_wb_tb.v b/verilog/dv/wb_utests/la_wb/la_wb_tb.v
deleted file mode 100644
index a1c10ab..0000000
--- a/verilog/dv/wb_utests/la_wb/la_wb_tb.v
+++ /dev/null
@@ -1,271 +0,0 @@
-// 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
-
-`include "la_wb.v"
-
-module la_wb_tb;
-
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    reg wb_stb_i;
-    reg wb_cyc_i;
-	reg wb_we_i;
-	reg [3:0] wb_sel_i;
-
-	reg [31:0] wb_dat_i;
-	reg [31:0] wb_adr_i;
-
-	wire wb_ack_o;
-	wire [31:0] wb_dat_o;
-    wire [127:0] la_data; 
-
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_cyc_i = 0;  
-        wb_sel_i = 0;  
-        wb_we_i  = 0;  
-        wb_dat_i = 0; 
-        wb_adr_i = 0;  
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-    
-    initial begin
-        $dumpfile("la_wb_tb.vcd");
-        $dumpvars(0, la_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Wishbone LA Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-    
-    // LA Wishbone Internal Register Addresses
-    wire [31:0] la_data_adr_0   = uut.BASE_ADR | uut.LA_DATA_0;
-    wire [31:0] la_data_adr_1   = uut.BASE_ADR | uut.LA_DATA_1;
-    wire [31:0] la_data_adr_2   = uut.BASE_ADR | uut.LA_DATA_2;
-    wire [31:0] la_data_adr_3   = uut.BASE_ADR | uut.LA_DATA_3;
-    
-    wire [31:0] la_iena_adr_0 = uut.BASE_ADR | uut.LA_IENA_0;
-    wire [31:0] la_iena_adr_1 = uut.BASE_ADR | uut.LA_IENA_1;
-    wire [31:0] la_iena_adr_2 = uut.BASE_ADR | uut.LA_IENA_2;
-    wire [31:0] la_iena_adr_3 = uut.BASE_ADR | uut.LA_IENA_3;
-
-    wire [31:0] la_oenb_adr_0 = uut.BASE_ADR | uut.LA_OENB_0;
-    wire [31:0] la_oenb_adr_1 = uut.BASE_ADR | uut.LA_OENB_1;
-    wire [31:0] la_oenb_adr_2 = uut.BASE_ADR | uut.LA_OENB_2;
-    wire [31:0] la_oenb_adr_3 = uut.BASE_ADR | uut.LA_OENB_3;
-
-    reg [31:0] la_data_0;
-    reg [31:0] la_data_1; 
-    reg [31:0] la_data_2;
-    reg [31:0] la_data_3; 
-
-    reg [31:0] la_iena_0;
-    reg [31:0] la_iena_1; 
-    reg [31:0] la_iena_2;
-    reg [31:0] la_iena_3; 
-
-    reg [31:0] la_oenb_0;
-    reg [31:0] la_oenb_1; 
-    reg [31:0] la_oenb_2;
-    reg [31:0] la_oenb_3; 
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0; 
-        #2;
-
-        // Write to la input enable registers
-        la_iena_0 = 32'hF0F0_F0F0;
-        la_iena_1 = 32'hA0A0_A0A0;
-        la_iena_2 = 32'hB0B0_B0B0;
-        la_iena_3 = 32'hC0C0_C0C0;
-
-        write(la_iena_adr_0, la_iena_0);
-        write(la_iena_adr_1, la_iena_1);
-        write(la_iena_adr_2, la_iena_2);
-        write(la_iena_adr_3, la_iena_3);
-
-        #2;
-        // Read from la input enable registers
-        read(la_iena_adr_0);
-        if (wb_dat_o !== la_iena_0) begin
-            $display("Monitor: Error reading from la_iena_0 reg");
-            $finish;
-        end
-        
-        read(la_iena_adr_1);
-        if (wb_dat_o !== la_iena_1) begin
-            $display("Monitor: Error reading from la_iena_1 reg");
-            $finish;
-        end
-        
-        read(la_iena_adr_2);
-        if (wb_dat_o !== la_iena_2) begin
-            $display("Monitor: Error reading from la_iena_2 reg");
-            $finish;
-        end
-
-        read(la_iena_adr_3);
-        if (wb_dat_o !== la_iena_3) begin
-            $display("Monitor: Error reading from la_iena_3 reg");
-            $finish;
-        end
-
-        // Write to la output enable registers
-        la_oenb_0 = 32'hC00C_0CC0;
-        la_oenb_1 = 32'hD00D_0DD0;
-        la_oenb_2 = 32'h0FF0_0FF0;
-        la_oenb_3 = 32'hA00A_A00A;
-
-        write(la_oenb_adr_0, la_oenb_0);
-        write(la_oenb_adr_1, la_oenb_1);
-        write(la_oenb_adr_2, la_oenb_2);
-        write(la_oenb_adr_3, la_oenb_3);
-
-        #2;
-        // Read from la output enable registers
-        read(la_oenb_adr_0);
-        if (wb_dat_o !== la_oenb_0) begin
-            $display("Monitor: Error reading from la_oenb_0 reg");
-            $finish;
-        end
-        
-        read(la_oenb_adr_1);
-        if (wb_dat_o !== la_oenb_1) begin
-            $display("Monitor: Error reading from la_oenb_1 reg");
-            $finish;
-        end
-        
-        read(la_oenb_adr_2);
-        if (wb_dat_o !== la_oenb_2) begin
-            $display("Monitor: Error reading from la_oenb_2 reg");
-            $finish;
-        end
-
-        read(la_oenb_adr_3);
-        if (wb_dat_o !== la_oenb_3) begin
-            $display("Monitor: Error reading from la_oenb_3 reg");
-            $finish;
-        end
-
-        // Write to la data registers
-        la_data_0 = $urandom_range(0, 2**30);
-        la_data_1 = $urandom_range(0, 2**30);
-        la_data_2 = $urandom_range(0, 2**30);
-        la_data_3 = $urandom_range(0, 2**30);
-
-        write(la_data_adr_0, la_data_0);
-        write(la_data_adr_1, la_data_1);
-        write(la_data_adr_2, la_data_2);
-        write(la_data_adr_3, la_data_3);
-
-        // #2;
-        // Read from la data registers
-        #25;  
-        if (la_data[31:0] !== la_data_0) begin
-            $display("Monitor: Error reading from la data_0 reg");
-            $finish;
-        end
-        
-        if (la_data[63:32] !== la_data_1) begin
-            $display("Monitor: Error reading from la data_1 reg");
-            $finish;
-        end
-        
-        if (la_data[95:64] !== la_data_2) begin
-            $display("Monitor: Error reading from la data_2 reg");
-            $finish;
-        end
-
-        if (la_data[127:96] !== la_data_3) begin
-            $display("Monitor: Error reading from la data_3 reg");
-            $finish;
-        end
-        #6;
-        $display("Monitor: Test LA Wishbone Success!");
-        $display("Monitor: Test LA Wishbone Passed!");
-        $finish;
-    end
-    
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Read Cycle Ended.");
-        end
-    endtask
-
-    la_wb uut(
-        .wb_clk_i(wb_clk_i),
-	    .wb_rst_i(wb_rst_i),
-        .wb_stb_i(wb_stb_i),
-	    .wb_cyc_i(wb_cyc_i),
-	    .wb_sel_i(wb_sel_i),
-	    .wb_we_i(wb_we_i),
-	    .wb_dat_i(wb_dat_i),
-	    .wb_adr_i(wb_adr_i), 
-        .wb_ack_o(wb_ack_o),
-	    .wb_dat_o(wb_dat_o),
-        .la_data(la_data)
-    );
-
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/mem_wb/Makefile b/verilog/dv/wb_utests/mem_wb/Makefile
deleted file mode 100644
index dc0ed9e..0000000
--- a/verilog/dv/wb_utests/mem_wb/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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
-
-PDK_PATH?=$(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../
-RTL_PATH = $(VERILOG_PATH)/rtl
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = mem_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp -DFUNCTIONAL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-else
-	iverilog -Ttyp -DFUNCTIONAL -DGL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-endif
-
-%.vcd: %.vvp check-env
-	vvp $<
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/mem_wb/mem_wb_tb.v b/verilog/dv/wb_utests/mem_wb/mem_wb_tb.v
deleted file mode 100644
index 28f3e0c..0000000
--- a/verilog/dv/wb_utests/mem_wb/mem_wb_tb.v
+++ /dev/null
@@ -1,190 +0,0 @@
-// 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
-
-`define UNIT_DELAY #1
-`define USE_POWER_PINS
-
-`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
-`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
-
-`include "defines.v"
-
-`ifdef GL
-    // Assume default net type to be wire because GL netlists don't have the wire definitions
-    `default_nettype wire
-    `include "gl/DFFRAM.v"
-`else 
-    `include "DFFRAMBB.v"
-    `include "DFFRAM.v"
-`endif
-
-`include "mem_wb.v"
-
-module mem_wb_tb;
-
-    reg wb_clk_i;
-    reg wb_rst_i;
-
-    reg [31:0] wb_adr_i;
-    reg [31:0] wb_dat_i;
-    reg [3:0]  wb_sel_i;
-    reg wb_we_i;
-    reg wb_cyc_i;
-    reg wb_stb_i;
-
-    wire wb_ack_o;
-    wire [31:0] wb_dat_o;
-    reg power1;
-
-    initial begin
-        wb_clk_i = 0;
-        wb_rst_i = 0;
-
-        wb_stb_i = 0;  // master select-signal for the slave
-        wb_we_i  = 0;  // R = 0 , W = 1
-        wb_cyc_i = 0;  // master is transferring
-        wb_adr_i = 0;  // input addr 32-bits
-        wb_dat_i = 0;  // input data 32-bits
-        wb_sel_i = 0;  // where data is available on data_i 4-bits
-    end
-
-	initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		#1;
-		power1 <= 1'b1;
-	end
-
-    wire VPWR;
-	wire VGND;
-	assign VGND = 1'b0;
-	assign VPWR = power1;
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    initial begin
-        $dumpfile("mem_wb_tb.vcd");
-        $dumpvars(0, mem_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Wishbone Memory Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    reg [31:0] ref_data [255: 0];
-    reg [31: 0] read_data;
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0;
-        #2;
-
-        // Randomly Write to memory array
-        for ( i = 0; i < 1; i = i + 1) begin
-            ref_data[i] = $urandom_range(0, 2**30);
-            write(i, ref_data[i]);
-            #2;
-        end
-
-        #6;
-        for ( i = 0; i < 1; i = i + 1) begin
-            read(i);
-            if (wb_dat_o !== ref_data[i]) begin
-                $display("%c[1;31m",27);
-                $display("Expected %0b, but Got %0b ", ref_data[i], wb_dat_o);
-                $display("Monitor: Wishbone Memory Failed");
-                $display("%c[0m",27);
-                $finish;
-            end
-            #2;
-        end
-        #6;
-        $display("Success!");
-        $display ("Monitor: Test Wishbone Memory Passed");
-        $finish;
-    end
-
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF;
-                wb_we_i = 1;
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-
-    task read;
-        input [32:0] addr;
-        begin
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Read Cycle Ended.");
-        end
-    endtask
-
-    mem_wb uut(
-        `ifdef USE_POWER_PINS
-            .VPWR(VPWR),
-            .VGND(VGND),
-        `endif
-        .wb_clk_i(wb_clk_i),
-        .wb_rst_i(wb_rst_i),
-
-        .wb_adr_i(wb_adr_i),
-        .wb_dat_i(wb_dat_i),
-        .wb_sel_i(wb_sel_i),
-        .wb_we_i(wb_we_i),
-        .wb_cyc_i(wb_cyc_i),
-        .wb_stb_i(wb_stb_i),
-
-        .wb_ack_o(wb_ack_o),
-        .wb_dat_o(wb_dat_o)
-    );
-
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/mgmt_protect/Makefile b/verilog/dv/wb_utests/mgmt_protect/Makefile
deleted file mode 100644
index 7dd7866..0000000
--- a/verilog/dv/wb_utests/mgmt_protect/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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
-
-PDK_PATH?=$(PDK_ROOT)/sky130A 
-VERILOG_PATH = ../../../
-RTL_PATH = $(VERILOG_PATH)/rtl
-
-SIM ?= RTL
-
-.SUFFIXES:
-
-PATTERN = mgmt_protect
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp -DFUNCTIONAL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-else
-	iverilog -Ttyp -DFUNCTIONAL -DGL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-endif
-
-%.vcd: %.vvp check-env
-	vvp $<
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-
-clean:
-	rm -f *.vvp *.vcd
-
-.PHONY: clean all
diff --git a/verilog/dv/wb_utests/mgmt_protect/mgmt_protect_tb.v b/verilog/dv/wb_utests/mgmt_protect/mgmt_protect_tb.v
deleted file mode 100644
index accae33..0000000
--- a/verilog/dv/wb_utests/mgmt_protect/mgmt_protect_tb.v
+++ /dev/null
@@ -1,263 +0,0 @@
-// 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
-
-`define UNIT_DELAY #1
-`define USE_POWER_PINS
-`define SIM_TIME 100_000
-
-`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
-`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
-
-`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
-`include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
-
-`include "defines.v"
-
-`ifdef GL
-    // Assume default net type to be wire because GL netlists don't have the wire definitions
-    `default_nettype wire
-    `include "gl/mprj_logic_high.v"
-    `include "gl/mprj2_logic_high.v"
-    `include "gl/mgmt_protect.v"
-    `include "gl/mgmt_protect_hv.v"
-`else
-    `include "mprj_logic_high.v"
-    `include "mprj2_logic_high.v"
-    `include "mgmt_protect.v"
-    `include "mgmt_protect_hv.v"
-`endif 
-
-module mgmt_protect_tb;
-
-    reg caravel_clk;
-    reg caravel_clk2;
-    reg caravel_rstn;
-
-    reg mprj_cyc_o_core;
-    reg mprj_stb_o_core;
-    reg mprj_we_o_core;
-    reg [31:0] mprj_adr_o_core;
-    reg [31:0] mprj_dat_o_core;
-    reg [3:0]  mprj_sel_o_core;
-
-    wire [127:0] la_data_in_mprj;
-    reg  [127:0] la_data_out_mprj;
-    reg  [127:0] la_oenb_mprj;
-    reg  [127:0] la_iena_mprj;
-
-    reg  [127:0] la_data_out_core;
-    wire [127:0] la_data_in_core;
-    wire [127:0] la_oenb_core;
-
-    wire 	  user_clock;
-    wire 	  user_clock2;
-    wire 	  user_reset;
-    wire 	  mprj_cyc_o_user;
-    wire 	  mprj_stb_o_user;
-    wire 	  mprj_we_o_user;
-    wire [3:0]  mprj_sel_o_user;
-    wire [31:0] mprj_adr_o_user;
-    wire [31:0] mprj_dat_o_user;
-    wire	  user1_vcc_powergood;
-    wire	  user2_vcc_powergood;
-    wire	  user1_vdd_powergood;
-    wire	  user2_vdd_powergood;
-
-    always #12.5 caravel_clk  <= (caravel_clk === 1'b0);
-	always #12.5 caravel_clk2 <= (caravel_clk2 === 1'b0);
-
-    initial begin
-        caravel_clk  = 0;
-        caravel_clk2 = 0;
-        caravel_rstn = 0;
-
-        mprj_cyc_o_core = 0;
-        mprj_stb_o_core = 0;
-        mprj_we_o_core  = 0;
-        mprj_adr_o_core = 0;
-        mprj_dat_o_core = 0;
-        mprj_sel_o_core = 0;
-
-        la_data_out_mprj = 0;
-        la_oenb_mprj      = 0;
-        la_data_out_core = 0;
-    end
-
-    reg USER_VDD3V3;
-    reg USER_VDD1V8;
-    reg VDD3V3;
-    reg VDD1V8;
-    
-    wire VCCD;      // Management/Common 1.8V power
-    wire VSSD;      // Common digital ground
-  
-    wire VCCD1;     // User area 1 1.8V power
-	wire VSSD1;     // User area 1 digital ground
-	wire VCCD2;     // User area 2 1.8V power
-	wire VSSD2;     // User area 2 digital ground
-
-	wire VDDA1;     // User area 1 3.3V power
-	wire VSSA1;     // User area 1 analog ground
-    wire VDDA2; 	// User area 2 3.3V power
-	wire VSSA2;     // User area 2 analog ground
-
-    assign VCCD = VDD1V8;
-	assign VSSD  = 1'b0;
-
-    assign VCCD1 = USER_VDD1V8;
-	assign VSSD1 = 1'b0;
-    
-    assign VCCD2 = USER_VDD1V8;
-	assign VSSD2 = 1'b0;
-
-    assign VDDA1 = USER_VDD3V3;
-	assign VSSA1 = 1'b0;
-
-    assign VDDA2 = USER_VDD3V3;
-	assign VSSA2 = 1'b0;
-
-	initial begin	// Power-up sequence
-        VDD1V8      <= 1'b0;
-		USER_VDD3V3 <= 1'b0;
-		USER_VDD1V8 <= 1'b0;
-		#200;
-		VDD1V8 <= 1'b1;
-		#200;
-        USER_VDD3V3 <= 1'b1;
-		#200;
-    	USER_VDD1V8 <= 1'b1;
-	end
-
-    initial begin
-        $dumpfile("mgmt_protect.vcd");
-        $dumpvars(0, mgmt_protect_tb);
-        #(`SIM_TIME);
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Management Protect Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    initial begin
-        caravel_rstn = 1'b1;
-        mprj_cyc_o_core = 1'b1;
-        mprj_stb_o_core = 1'b1;
-        mprj_we_o_core = 1'b1;
-        mprj_sel_o_core = 4'b1010;
-        mprj_adr_o_core = 32'hF0F0;
-        mprj_dat_o_core = 32'h0F0F;
-        la_data_out_mprj = 128'hFFFF_FFFF_FFFF_FFFF;
-        la_oenb_mprj = 128'h0000_0000_0000_0000;
-        la_data_out_core = 128'h0F0F_FFFF_F0F0_FFFF;
-        la_iena_mprj  = 128'hFFFF_FFFF_FFFF_FFFF;
-
-        wait(user1_vdd_powergood === 1'b1);
-        wait(user2_vdd_powergood === 1'b1);
-        wait(user1_vcc_powergood === 1'b1);
-        wait(user2_vcc_powergood === 1'b1);
-        #25;
-        if (user_reset !== ~caravel_rstn) begin 
-            $display("Monitor: Error on user_reset. "); $finish; 
-        end
-        if (mprj_cyc_o_user !== mprj_cyc_o_core) begin 
-            $display("Monitor: Error on mprj_cyc_o_user. "); $finish; 
-        end
-        if (mprj_stb_o_user !== mprj_stb_o_core) begin 
-            $display("Monitor: Error on mprj_stb_o_user. "); $finish; 
-        end
-        if (mprj_we_o_user !== mprj_we_o_core) begin 
-            $display("Monitor: Error on mprj_we_o_user. "); $finish;
-        end
-        if (mprj_sel_o_user !== mprj_sel_o_core) begin 
-            $display("Monitor: Error on mprj_sel_o_user. "); $finish; 
-        end
-        if (mprj_adr_o_user !== mprj_adr_o_core) begin 
-            $display("Monitor: Error on mprj_adr_o_user. "); $finish;
-        end
-        if (la_data_in_core !== la_data_out_mprj) begin 
-            $display("%0h", la_data_in_core);
-            $display("Monitor: Error on la_data_in_core. "); $finish;
-        end
-        if (la_oenb_core !== la_oenb_mprj) begin 
-            $display("Monitor: Error on la_oenb_core. "); $finish;
-        end
-        if (la_data_in_mprj !== la_data_out_core) begin 
-            $display("%0h , %0h", la_data_in_mprj, la_data_out_core);
-            $display("Monitor: Error on la_data_in_mprj. "); $finish;
-        end
-        $display ("Success!");
-        $display ("Monitor: Test Management Protect Passed");
-        $finish;
-    end
-
-    mgmt_protect uut (
-	`ifdef USE_POWER_PINS
-		.vccd(VCCD),
-		.vssd(VSSD),
-		.vccd1(VCCD1),
-		.vssd1(VSSD1),
-        .vccd2(VCCD2),
-		.vssd2(VSSD2),
-		.vdda1(VDDA1),
-		.vssa1(VSSA1),
-		.vdda2(VDDA2),
-		.vssa2(VSSA2),
-    `endif
-
-		.caravel_clk (caravel_clk),
-		.caravel_clk2(caravel_clk2),
-		.caravel_rstn(caravel_rstn),
-
-		.mprj_cyc_o_core(mprj_cyc_o_core),
-		.mprj_stb_o_core(mprj_stb_o_core),
-		.mprj_we_o_core (mprj_we_o_core),
-		.mprj_sel_o_core(mprj_sel_o_core),
-		.mprj_adr_o_core(mprj_adr_o_core),
-		.mprj_dat_o_core(mprj_dat_o_core),
-
-		.la_data_out_core(la_data_out_core),
-		.la_data_in_core (la_data_in_core),
-		.la_oenb_core(la_oenb_core),
-
-        .la_data_in_mprj(la_data_in_mprj),
-    	.la_data_out_mprj(la_data_out_mprj),
-    	.la_oenb_mprj(la_oenb_mprj),
-        .la_iena_mprj(la_iena_mprj),
-
-		.user_clock (user_clock),
-		.user_clock2(user_clock2),
-		.user_reset (user_reset),
-
-		.mprj_cyc_o_user(mprj_cyc_o_user),
-		.mprj_stb_o_user(mprj_stb_o_user),
-		.mprj_we_o_user (mprj_we_o_user),
-		.mprj_sel_o_user(mprj_sel_o_user),
-		.mprj_adr_o_user(mprj_adr_o_user),
-		.mprj_dat_o_user(mprj_dat_o_user),
-
-		.user1_vcc_powergood(user1_vcc_powergood),
-		.user2_vcc_powergood(user2_vcc_powergood),
-		.user1_vdd_powergood(user1_vdd_powergood),
-		.user2_vdd_powergood(user2_vdd_powergood)
-	);
-
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/mprj_ctrl/Makefile b/verilog/dv/wb_utests/mprj_ctrl/Makefile
deleted file mode 100644
index f354018..0000000
--- a/verilog/dv/wb_utests/mprj_ctrl/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = mprj_ctrl
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog  -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/mprj_ctrl/mprj_ctrl_tb.v b/verilog/dv/wb_utests/mprj_ctrl/mprj_ctrl_tb.v
deleted file mode 100644
index fd9e5a2..0000000
--- a/verilog/dv/wb_utests/mprj_ctrl/mprj_ctrl_tb.v
+++ /dev/null
@@ -1,159 +0,0 @@
-// 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
-
-`include "defines.v"
-`include "mprj_ctrl.v"
-
-module mprj_ctrl_tb;
-
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    reg wb_stb_i;
-    reg wb_cyc_i;
-	reg wb_we_i;
-	reg [3:0] wb_sel_i;
-	reg [31:0] wb_dat_i;
-	reg [31:0] wb_adr_i;
-
-	wire wb_ack_o;
-	wire [31:0] wb_dat_o;
-
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_cyc_i = 0;  
-        wb_sel_i = 0;  
-        wb_we_i  = 0;  
-        wb_dat_i = 0; 
-        wb_adr_i = 0; 
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    // Mega Project Control Registers 
-    wire [31:0] mprj_ctrl = uut.BASE_ADR | uut.IOCONFIG;
-    wire [31:0] pwr_ctrl  = uut.BASE_ADR | uut.PWRDATA;
-
-    initial begin
-        $dumpfile("mprj_ctrl_tb.vcd");
-        $dumpvars(0, mprj_ctrl_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Mega-Project Control Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    reg [31:0] data;
-
-    initial begin   
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0;
-        #2;
-
-        for (i=0; i<`MPRJ_IO_PADS; i=i+1) begin
-            data = $urandom_range(0, 2**(7));
-            write(mprj_ctrl+i*4, data);
-            #2;
-            read(mprj_ctrl+i*4);
-            if (wb_dat_o !== data) begin
-                $display("Monitor: R/W from IO-CTRL Failed.");
-                $finish;
-            end
-        end
-
-        data = $urandom_range(0, 2**(`MPRJ_PWR_PADS-2));
-        write(pwr_ctrl, data);
-        #2;
-        read(pwr_ctrl);
-        if (wb_dat_o !== data) begin
-            $display("Monitor: R/W from POWER-CTRL Failed.");
-            $finish;
-        end
-    
-        
-        $display("Success!");
-        $display ("Monitor: Test Mega-Project Control Passed");
-        $finish;
-    end
-
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Read Cycle Ended.");
-        end
-    endtask
-
-    mprj_ctrl_wb uut(
-        .wb_clk_i(wb_clk_i),
-	    .wb_rst_i(wb_rst_i),
-        .wb_stb_i(wb_stb_i),
-	    .wb_cyc_i(wb_cyc_i),
-	    .wb_sel_i(wb_sel_i),
-	    .wb_we_i(wb_we_i),
-	    .wb_dat_i(wb_dat_i),
-	    .wb_adr_i(wb_adr_i), 
-        .wb_ack_o(wb_ack_o),
-	    .wb_dat_o(wb_dat_o)
-    );
-
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/spi_sysctrl_wb/Makefile b/verilog/dv/wb_utests/spi_sysctrl_wb/Makefile
deleted file mode 100644
index 8bf03c7..0000000
--- a/verilog/dv/wb_utests/spi_sysctrl_wb/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = spi_sysctrl_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog  -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
-
diff --git a/verilog/dv/wb_utests/spi_sysctrl_wb/spi_sysctrl_wb_tb.v b/verilog/dv/wb_utests/spi_sysctrl_wb/spi_sysctrl_wb_tb.v
deleted file mode 100644
index 99cb008..0000000
--- a/verilog/dv/wb_utests/spi_sysctrl_wb/spi_sysctrl_wb_tb.v
+++ /dev/null
@@ -1,157 +0,0 @@
-// 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
-
-`include "simple_spi_master.v"
-
-module spi_sysctrl_wb_tb;
-
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    reg wb_stb_i;
-    reg wb_cyc_i;
-	reg wb_we_i;
-	reg [3:0] wb_sel_i;
-	reg [31:0] wb_dat_i;
-	reg [31:0] wb_adr_i;
-
-	wire wb_ack_o;
-	wire [31:0] wb_dat_o;
-
-    reg [31:0] spi_cfg_data;
-    reg [31:0] spi_data;
-
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_cyc_i = 0;  
-        wb_sel_i = 0;  
-        wb_we_i  = 0;  
-        wb_dat_i = 0; 
-        wb_adr_i = 0; 
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    // SPI Control Register Addresses
-    wire [31:0] spi_cfg  = uut.BASE_ADR | uut.CONFIG; 
-    wire [31:0] spi_data_adr = uut.BASE_ADR | uut.DATA;
-
-    initial begin
-        $dumpfile("spi_sysctrl_wb_tb.vcd");
-        $dumpvars(0, spi_sysctrl_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test SPI System Control Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    initial begin   
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0;
-        #10;
-
-        // Write to SPI_CFG
-        spi_cfg_data = {16'd0, 1'b1, 1'b0, 1'b1, 1'b0, 1'b0,
-            1'b0, 1'b0, 1'b0, 8'd2};
-        write(spi_cfg, spi_cfg_data);
-
-        #2;
-        // Read from SPI_CFG
-        read(spi_cfg);
-        if (wb_dat_o !== spi_cfg_data) begin
-            $display("Error reading spi_cfg reg");
-            $finish;
-        end
-
-        // Read default value of SPI_DATA
-        spi_data = 32'h00FF;
-        read(spi_data_adr);
-        if (wb_dat_o !== spi_data) begin
-            $display("Error reading data register reg");
-            $finish;
-        end
-        $display("Success!");
-        $display ("Monitor: Test SPI-SYSCTRL WB Passed");
-        $finish;
-    end
-
-    task read;
-        input [32:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Monitor: Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            #2;
-            wb_adr_i = 0;
-            $display("Monitor: Read Cycle Ended.");
-        end
-    endtask
-
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            #2;
-            wb_adr_i = 0;
-            wait(wb_ack_o == 0);
-            $display("Write Cycle Ended.");
-        end
-    endtask
-
-    simple_spi_master_wb uut(
-        .wb_clk_i(wb_clk_i),
-	    .wb_rst_i(wb_rst_i),
-
-        .wb_stb_i(wb_stb_i),
-	    .wb_cyc_i(wb_cyc_i),
-	    .wb_sel_i(wb_sel_i),
-	    .wb_we_i(wb_we_i),
-	    .wb_dat_i(wb_dat_i),
-	    .wb_adr_i(wb_adr_i), 
-        .wb_ack_o(wb_ack_o),
-	    .wb_dat_o(wb_dat_o)
-    );
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/spimemio_wb/Makefile b/verilog/dv/wb_utests/spimemio_wb/Makefile
deleted file mode 100644
index d145f04..0000000
--- a/verilog/dv/wb_utests/spimemio_wb/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = spimemio_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog -I ../ -I ../../  -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
-
diff --git a/verilog/dv/wb_utests/spimemio_wb/flash.hex b/verilog/dv/wb_utests/spimemio_wb/flash.hex
deleted file mode 100644
index 23bd76d..0000000
--- a/verilog/dv/wb_utests/spimemio_wb/flash.hex
+++ /dev/null
@@ -1,6 +0,0 @@
-@10000000
-a1
-b1
-c1
-d1
-f1
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/spimemio_wb/spimemio_wb_tb.v b/verilog/dv/wb_utests/spimemio_wb/spimemio_wb_tb.v
deleted file mode 100644
index c474fd0..0000000
--- a/verilog/dv/wb_utests/spimemio_wb/spimemio_wb_tb.v
+++ /dev/null
@@ -1,234 +0,0 @@
-// 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
-
-`define FLASH_BASE  32'h 1000_000
-
-`include "spimemio.v"
-// `include "spiflash.v"
-
-module spimemio_wb_tb;
-
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    reg wb_flash_stb_i;
-	reg wb_cfg_stb_i;
-	reg wb_cyc_i;
-	reg wb_we_i;
-	reg [3:0]  wb_sel_i;
-	reg [31:0] wb_adr_i;
-	reg [31:0] wb_dat_i;
-
-	wire wb_flash_ack_o;
-    wire wb_cfg_ack_o;
-	wire [31:0] wb_flash_dat_o;
-	wire [31:0] wb_cfg_dat_o;
-
-    wire flash_csb;
-    wire flash_clk;
-
-    wire flash_io0_oeb;
-    wire flash_io1_oeb;
-    wire flash_io2_oeb;
-    wire flash_io3_oeb;
-
-    wire flash_io0_di = 1'b 1;
-    wire flash_io1_di = 1'b 1;
-    wire flash_io2_di = 1'b 1;
-    wire flash_io3_di = 1'b 1;
-
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_flash_stb_i = 0;  
-        wb_cfg_stb_i = 0; 
-        wb_cyc_i = 0;   
-        wb_we_i  = 0;
-        wb_sel_i = 0;    
-        wb_adr_i = 0;  
-        wb_dat_i = 0;  
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    spimemio_wb uut(
-        .wb_clk_i(wb_clk_i),
-	    .wb_rst_i(wb_rst_i),
-        
-        .wb_flash_stb_i(wb_flash_stb_i),
-	    .wb_cfg_stb_i(wb_cfg_stb_i),
-	    .wb_cyc_i(wb_cyc_i),
-    	.wb_we_i(wb_we_i),
-	    .wb_sel_i(wb_sel_i),
-	    .wb_adr_i(wb_adr_i), 
-	    .wb_dat_i(wb_dat_i),
-	    .wb_flash_ack_o(wb_flash_ack_o),
-        .wb_cfg_ack_o(wb_cfg_ack_o),
-	    .wb_flash_dat_o(wb_flash_dat_o),
-	    .wb_cfg_dat_o(wb_cfg_dat_o),
-
-        .flash_clk(flash_clk),
-        .flash_csb(flash_csb),
-
-        .flash_io0_oeb(flash_io0_oeb),
-        .flash_io1_oeb(flash_io1_oeb),
-        .flash_io2_oeb(flash_io2_oeb),
-        .flash_io3_oeb(flash_io3_oeb),
-
-        .flash_io0_di(flash_io0_di),
-        .flash_io1_di(flash_io1_di),
-	    .flash_io2_di(flash_io2_di),
-	    .flash_io3_di(flash_io3_di)       
-    );
-
-    initial begin
-        $dumpfile("spimemio_wb_tb.vcd");
-        $dumpvars(0, spimemio_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test spimmemio Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-        
-    wire [31:0] cfgreg_data;
-    assign cfgreg_data = {
-        1'b 1,
-        8'b 0,
-        3'b 111,
-        4'b 1010,
-        4'b 0,             // make sure is it tied to zero in the module itself
-        {~flash_io3_oeb, ~flash_io2_oeb, ~flash_io1_oeb, ~flash_io0_oeb},
-        2'b 0,
-        flash_csb,
-        flash_clk,
-        {flash_io3_di, flash_io2_di, flash_io1_di, flash_io0_di}
-    };
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0; 
-        #2;
-
-        // Read from flash
-        for (i = `FLASH_BASE; i < `FLASH_BASE + 100 ; i = i + 4) begin
-            read(i, 1, 0);
-            if (wb_flash_dat_o !== 32'hFFFF_FFFF) begin
-                $display("%c[1;31m",27);
-                $display("Expected %0b, but Got %0b ",  32'hFFFF_FFFF, wb_flash_dat_o);
-                $display("Monitor: Wishbone spimemio Failed");
-            	$display("%c[0m",27);
-                $finish;
-            end
-            #2;
-        end 
-
-        #6;
-        // Write to Configuration register
-        write(cfgreg_data, 0);
-        #2;
-        read(0, 0, 1);
-        if (wb_cfg_dat_o !== cfgreg_data) begin
-            $display("%c[1;31m",27);
-            $display("Expected %0b, but Got %0b ",  cfgreg_data, wb_cfg_dat_o);
-            $display("Monitor: Wishbone spimemio Failed");
-            $display("%c[0m",27);
-            $finish;
-        end
-        
-        $display("Success!");
-        $display("Monitor: Wishbone spimemio Passed");
-        $finish;
-    end
-    
-    task write;
-        input [32:0] data;
-        input [31:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_cfg_stb_i = 1'b 1;
-                wb_flash_stb_i = 1'b 0;
-                wb_cyc_i = 1'b 1;
-                wb_sel_i = 4'b 1111; // complete word
-                wb_we_i = 1'b 1;     // write enable
-                wb_adr_i = addr;
-                wb_dat_i = data;
-            end
-
-            wait_ack();
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        input flash_stb;
-        input cfg_stb;
-        begin 
-            wb_flash_stb_i = flash_stb;
-            wb_cfg_stb_i = cfg_stb;
-
-            wb_cyc_i = 1'b 1;
-            wb_adr_i = addr;
-            wb_dat_i = 24;
-            wb_sel_i = 4'b 1111; // complete word
-            wb_we_i = 1'b 0;     // read
-            $display("Initiated Read transaction...");
-            wait_ack();
-        end
-    endtask
-
-    task wait_ack;
-        // Wait for an ACK
-        if (wb_cfg_stb_i == 1) begin
-            @(posedge wb_cfg_ack_o) begin
-                #2;  // To end the transaction on the falling edge of ack 
-                wb_cyc_i = 1'b 0;
-                wb_cfg_stb_i = 1'b 0;
-                $display("Monitor: Received an ACK from slave");
-            end
-        end
-        else begin
-            @(posedge wb_flash_ack_o) begin
-                #2;  // To end the transaction on the falling edge of ack 
-                wb_cyc_i = 1'b 0;
-                wb_flash_stb_i = 1'b 0;
-                $display("Monitor: Received an ACK from slave");
-            end
-        end
-    endtask
-
-    // spiflash #(
-	// 	.FILENAME("flash.hex")
-	// ) spiflash (
-	// 	.csb(flash_csb),
-	// 	.clk(flash_clk),
-	// 	.io0(flash_io0),
-	// 	.io1(flash_io1),
-	// 	.io2(flash_io2),
-	// 	.io3(flash_io3)
-	// );
-    
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/storage_wb/Makefile b/verilog/dv/wb_utests/storage_wb/Makefile
deleted file mode 100644
index 6b04de9..0000000
--- a/verilog/dv/wb_utests/storage_wb/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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
-
-PDK_PATH?=$(PDK_ROOT)/sky130A
-VERILOG_PATH = ../../../
-RTL_PATH = $(VERILOG_PATH)/rtl
-
-SIM?=RTL
-
-.SUFFIXES:
-
-PATTERN = storage_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-ifeq ($(SIM),RTL)
-	iverilog -Ttyp -DFUNCTIONAL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-else
-	iverilog -Ttyp -DFUNCTIONAL -DGL -I $(PDK_PATH) -I $(VERILOG_PATH) -I .. -I $(RTL_PATH) \
-	$< -o $@
-endif
-
-%.vcd: %.vvp check-env
-	vvp $<
-
-check-env:
-ifndef PDK_ROOT
-	$(error PDK_ROOT is undefined, please export it before running make)
-endif
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/storage_wb/storage_wb_tb.v b/verilog/dv/wb_utests/storage_wb/storage_wb_tb.v
deleted file mode 100644
index 71a84df..0000000
--- a/verilog/dv/wb_utests/storage_wb/storage_wb_tb.v
+++ /dev/null
@@ -1,257 +0,0 @@
-// 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
-// `define DBG
-
-`define STORAGE_BASE_ADR  32'h0100_0000
-
-`define UNIT_DELAY #1
-`define USE_POWER_PINS 
-
-`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
-`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
-
-`include "defines.v"
-`include "sram_1rw1r_32_256_8_sky130.v"
-
-`ifdef GL
-    `include "gl/storage.v"
-`else
-    `include "storage.v"
-`endif
-
-`include "storage_bridge_wb.v"
-
-module storage_tb;
-
-    localparam [(`RAM_BLOCKS*24)-1:0] STORAGE_RW_ADR = {
-        {24'h 10_0000},
-        {24'h 00_0000}
-    };
-
-    localparam [23:0] STORAGE_RO_ADR = {
-        {24'h 20_0000}
-    };
-
-    reg wb_clk_i;
-    reg wb_rst_i;
-
-    reg [31:0] wb_adr_i;
-    reg [31:0] wb_dat_i;
-    reg [3:0]  wb_sel_i;
-    reg wb_we_i;
-    reg wb_cyc_i;
-    reg  [1:0] wb_stb_i;
-    wire [1:0] wb_ack_o;
-    wire [31:0] wb_rw_dat_o;
-
-    // MGMT_AREA RO WB Interface  
-    wire [31:0] wb_ro_dat_o;
-
-    wire [`RAM_BLOCKS-1:0] mgmt_ena;
-    wire [(`RAM_BLOCKS*4)-1:0] mgmt_wen_mask;
-    wire [`RAM_BLOCKS-1:0] mgmt_wen;
-    wire [31:0] mgmt_wdata;
-    wire [7:0] mgmt_addr;
-    wire [(`RAM_BLOCKS*32)-1:0] mgmt_rdata;
-    wire ro_ena;
-    wire [7:0] ro_addr;
-    wire [31:0] ro_rdata;
-    reg power1;
-
-    initial begin
-        wb_clk_i = 0;
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_cyc_i = 0;  
-        wb_sel_i = 0;  
-        wb_we_i  = 0;  
-        wb_dat_i = 0; 
-        wb_adr_i = 0; 
-    end
-
-    initial begin		// Power-up sequence
-		power1 <= 1'b0;
-		#1;
-		power1 <= 1'b1;
-	end
-
-    wire VPWR;
-	wire VGND;
-	assign VGND = 1'b0;
-	assign VPWR = power1;
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    initial begin
-        $dumpfile("storage.vcd");
-        $dumpvars(0, storage_tb);
-        repeat (100) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test Storage Area Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    reg [31:0] ref_data [255: 0];
-    reg [(24*`RAM_BLOCKS)-1:0] storage_rw_adr = STORAGE_RW_ADR;
-    reg [23:0] storage_ro_adr = STORAGE_RO_ADR;
-    reg [31:0] block_adr;
-
-    integer i,j;
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0;
-        #2;
-
-        // Test MGMT R/W port and user RO port
-        for (i = 0; i<`RAM_BLOCKS; i = i +1) begin
-            for ( j = 0; j < 100; j = j + 1) begin 
-                if (i == 0) begin
-                    ref_data[j] = $urandom_range(0, 2**30);
-                end
-                block_adr = (storage_rw_adr[24*i+:24] + (j << 2))  | `STORAGE_BASE_ADR;
-                write(block_adr, ref_data[j]);
-                #2;
-            end
-        end
-        
-        for (i = 0; i<`RAM_BLOCKS; i = i +1) begin
-            for ( j = 0; j < 100; j = j + 1) begin 
-                block_adr = (storage_rw_adr[24*i+:24] + (j << 2))  | `STORAGE_BASE_ADR;
-                read(block_adr, 0);
-                if (wb_rw_dat_o !== ref_data[j]) begin
-                    $display("Got %0h, Expected %0h from addr %0h: ",wb_rw_dat_o,ref_data[j], block_adr);
-                    $display("Monitor: MGMT R/W Operation Failed");
-                    $finish;
-                end
-                
-                if (i == 0) begin
-                    block_adr = (storage_ro_adr + (j << 2))  | `STORAGE_BASE_ADR;
-                    read(block_adr, 1);
-                    if (wb_ro_dat_o !== ref_data[j]) begin
-                        $display("Monitor: MGMT RO Operation Failed");
-                        $finish;
-                    end
-                end
-                #2;
-            end
-        end
-
-        $display("Success");
-        $display ("Monitor: Test Storage Area Passed");
-        $finish;
-    end
-    
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i[0] = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o[0] == 1);
-            wait(wb_ack_o[0] == 0);
-            wb_cyc_i = 0;
-            wb_stb_i[0] = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        input integer interface;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i[interface] = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o[interface] == 1);
-            wait(wb_ack_o[interface] == 0);
-            wb_cyc_i = 0;
-            wb_stb_i[interface] = 0;
-            $display("Read Cycle Ended.");
-        end
-    endtask
-
-    storage_bridge_wb #(
-        .RW_BLOCKS_ADR(STORAGE_RW_ADR),
-        .RO_BLOCKS_ADR(STORAGE_RO_ADR)
-    ) wb_bridge (
-        .wb_clk_i(wb_clk_i),
-        .wb_rst_i(wb_rst_i),
-
-        .wb_adr_i(wb_adr_i),
-        .wb_dat_i(wb_dat_i),
-        .wb_sel_i(wb_sel_i),
-        .wb_we_i(wb_we_i),
-        .wb_cyc_i(wb_cyc_i),
-        .wb_stb_i(wb_stb_i),
-        .wb_ack_o(wb_ack_o),
-        .wb_rw_dat_o(wb_rw_dat_o),
-
-    // MGMT_AREA RO WB Interface  
-        .wb_ro_dat_o(wb_ro_dat_o),
-
-    // MGMT Area native memory interface
-        .mgmt_ena(mgmt_ena), 
-        .mgmt_wen_mask(mgmt_wen_mask),
-        .mgmt_wen(mgmt_wen),
-        .mgmt_addr(mgmt_addr),
-        .mgmt_wdata(mgmt_wdata),
-        .mgmt_rdata(mgmt_rdata),
-    // MGMT_AREA RO Interface
-        .mgmt_ena_ro(ro_ena),
-        .mgmt_addr_ro(ro_addr),
-        .mgmt_rdata_ro(ro_rdata)
-    );
-
-    storage uut (
-        `ifdef USE_POWER_PINS
-            .VPWR(VPWR),
-            .VGND(VGND),
-        `endif
-        // Management R/W WB interface
-        .mgmt_clk(wb_clk_i),
-        .mgmt_ena(mgmt_ena),
-        .mgmt_wen(mgmt_wen),
-        .mgmt_wen_mask(mgmt_wen_mask),
-        .mgmt_addr(mgmt_addr),
-        .mgmt_wdata(mgmt_wdata),
-        .mgmt_rdata(mgmt_rdata),
-        // Management RO interface  
-        .mgmt_ena_ro(ro_ena),
-        .mgmt_addr_ro(ro_addr),
-        .mgmt_rdata_ro(ro_rdata)
-    );
-
-endmodule
\ No newline at end of file
diff --git a/verilog/dv/wb_utests/sysctrl_wb/Makefile b/verilog/dv/wb_utests/sysctrl_wb/Makefile
deleted file mode 100644
index 89aa77b..0000000
--- a/verilog/dv/wb_utests/sysctrl_wb/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = sysctrl_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog  -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
-
diff --git a/verilog/dv/wb_utests/sysctrl_wb/sysctrl_wb_tb.v b/verilog/dv/wb_utests/sysctrl_wb/sysctrl_wb_tb.v
deleted file mode 100644
index 77140c7..0000000
--- a/verilog/dv/wb_utests/sysctrl_wb/sysctrl_wb_tb.v
+++ /dev/null
@@ -1,170 +0,0 @@
-// 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
-
-`include "sysctrl.v"
-
-module sysctrl_wb_tb;
-
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    reg wb_stb_i;
-    reg wb_cyc_i;
-	reg wb_we_i;
-	reg [3:0] wb_sel_i;
-	reg [31:0] wb_dat_i;
-	reg [31:0] wb_adr_i;
-
-	wire wb_ack_o;
-	wire [31:0] wb_dat_o;
-    
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_cyc_i = 0;  
-        wb_sel_i = 0;  
-        wb_we_i  = 0;  
-        wb_dat_i = 0; 
-        wb_adr_i = 0; 
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-    
-    initial begin
-        $dumpfile("sysctrl_wb_tb.vcd");
-        $dumpvars(0, sysctrl_wb_tb);
-        repeat (50) begin
-            repeat (1000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display ("Monitor: Timeout, Test System Control Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-    
-    // System Control Default Register Addresses 
-    wire [31:0] clk_out_adr  = uut.BASE_ADR | uut.CLK_OUT;  
-    wire [31:0] trap_out_adr  = uut.BASE_ADR | uut.TRAP_OUT;
-    wire [31:0] irq_src_adr  = uut.BASE_ADR | uut.IRQ_SRC;
-
-    reg clk1_output_dest;
-    reg clk2_output_dest;
-    reg trap_output_dest;
-    reg irq_7_inputsrc;
-    reg irq_8_inputsrc;
-   
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0;
-        #2;
-        
-        clk1_output_dest   = 1'b1;
-        clk2_output_dest   = 1'b1;
-        trap_output_dest  = 1'b1;
-        irq_7_inputsrc    = 1'b1;
-        irq_8_inputsrc    = 1'b1;
-
-        // Write to System Control Registers
-        write(clk_out_adr, clk1_output_dest);
-        write(trap_out_adr, trap_output_dest);
-        write(irq_src_adr,  irq_7_inputsrc);
-        #2;
-        read(clk_out_adr);
-        if (wb_dat_o !== clk1_output_dest) begin
-            $display("Error reading CLK1 output destination register.");
-            $finish;
-        end
-
-        read(trap_out_adr);
-        if (wb_dat_o !== trap_output_dest) begin
-            $display("Error reading trap output destination register.");
-            $finish;
-        end
-
-        read(irq_src_adr);
-        if (wb_dat_o !== irq_7_inputsrc) begin
-            $display("Error reading IRQ7 input source register.");
-            $finish;
-        end
-
-        $display("Success!");
-        $display ("Monitor: Test System Control Passed!");
-        $finish;
-    end
-    
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Monitor: Write Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Monitor: Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Monitor: Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Monitor: Read Cycle Ended.");
-        end
-    endtask
-
-    sysctrl_wb uut(
-        .wb_clk_i(wb_clk_i),
-	    .wb_rst_i(wb_rst_i),
-        .wb_stb_i(wb_stb_i),
-	    .wb_cyc_i(wb_cyc_i),
-	    .wb_sel_i(wb_sel_i),
-	    .wb_we_i(wb_we_i),
-	    .wb_dat_i(wb_dat_i),
-	    .wb_adr_i(wb_adr_i), 
-        .wb_ack_o(wb_ack_o),
-	    .wb_dat_o(wb_dat_o)
-    );
-    
-endmodule
diff --git a/verilog/dv/wb_utests/uart_wb/Makefile b/verilog/dv/wb_utests/uart_wb/Makefile
deleted file mode 100644
index d1c587f..0000000
--- a/verilog/dv/wb_utests/uart_wb/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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
-
-.SUFFIXES:
-
-PATTERN = uart_wb
-
-all:  ${PATTERN:=.vcd}
-
-%.vvp: %_tb.v
-	iverilog -I .. -I ../../ -I ../../../rtl \
-	$< -o $@
-
-%.vcd: %.vvp
-	vvp $<
-
-clean:
-	rm -f *.vvp *.vcd *.log
-
-.PHONY: clean all
diff --git a/verilog/dv/wb_utests/uart_wb/uart_wb_tb.v b/verilog/dv/wb_utests/uart_wb/uart_wb_tb.v
deleted file mode 100644
index da48151..0000000
--- a/verilog/dv/wb_utests/uart_wb/uart_wb_tb.v
+++ /dev/null
@@ -1,169 +0,0 @@
-// 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
-
-`include "simpleuart.v"
-
-module uart_wb_tb;
-    
-    reg wb_clk_i;
-	reg wb_rst_i;
-
-    reg wb_stb_i;
-	reg wb_cyc_i;
-	reg wb_we_i;
-	reg [3:0] wb_sel_i;
-	reg [31:0] wb_adr_i;
-	reg [31:0] wb_dat_i;
-
-	wire wb_ack_o;
-	wire [31:0] wb_dat_o;
-
-    wire tbuart_rx;
-	wire ser_rx;
-  
-    initial begin
-        wb_clk_i = 0; 
-        wb_rst_i = 0;
-        wb_stb_i = 0; 
-        wb_we_i  = 0;  
-        wb_cyc_i = 0;  
-        wb_adr_i = 0; 
-        wb_dat_i = 0; 
-        wb_sel_i = 0;  
-    end
-
-    always #1 wb_clk_i = ~wb_clk_i;
-
-    initial begin
-        $dumpfile("uart_wb_tb.vcd");
-        $dumpvars(0, uart_wb_tb);
-        repeat (500) begin
-            repeat (10000) @(posedge wb_clk_i);
-        end
-        $display("%c[1;31m",27);
-        $display("Monitor: Timeout, Test UART Failed");
-        $display("%c[0m",27);
-        $finish;
-    end
-
-    integer i;
-
-    wire [31:0] div_reg_addr = uut.BASE_ADR | uut.CLK_DIV;
-    wire [31:0] div_reg_data = 32'h FFFF_FFFF;
-    
-    wire [31:0] dat_reg_addr = uut.BASE_ADR | uut.DATA;
-    wire [31:0] dat_reg_data = 32'h FFFF_FFFF;
-
-    initial begin
-        // Reset Operation
-        wb_rst_i = 1;
-        #2;
-        wb_rst_i = 0; 
-        #2;
-
-        // Write to div register
-        write(div_reg_addr, div_reg_data);
-        #2;
-        read(div_reg_addr);
-        if (wb_dat_o !== div_reg_data) begin
-            $display("%c[1;31m",27);
-            $display("Expected %0b, but Got %0b ", div_reg_data, wb_dat_o);
-            $display("Monitor: Wishbone UART Failed");
-            $display("%c[0m",27);
-            $finish;
-        end
-        #6;
-
-        // Write Operation: writes to data register
-        write(dat_reg_addr, dat_reg_data);
-        #2;
-        read(dat_reg_addr);
-        if (wb_dat_o !== dat_reg_data) begin
-            $display("%c[1;31m",27);
-            $display("Expected %0b, but Got %0b ", dat_reg_data, wb_dat_o);
-            $display("Monitor: Wishbone UART Failed");
-            $display("%c[0m",27);
-            $finish;
-        end
-        $display("Success!");
-        $display("Monitor: Wishbone UART Passed");
-        $finish;
-    end
-    
-    task write;
-        input [32:0] addr;
-        input [32:0] data;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_sel_i = 4'hF; 
-                wb_we_i = 1;     
-                wb_adr_i = addr;
-                wb_dat_i = data;
-                $display("Write Cycle Started.");
-            end
-            #2;
-            wb_we_i = 0;     
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            #2;
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Write Cycle Ended.");
-        end
-    endtask
-    
-    task read;
-        input [32:0] addr;
-        begin 
-            @(posedge wb_clk_i) begin
-                wb_stb_i = 1;
-                wb_cyc_i = 1;
-                wb_we_i = 0;
-                wb_adr_i = addr;
-                $display("Read Cycle Started.");
-            end
-            // Wait for an ACK
-            wait(wb_ack_o == 1);
-            #2;
-            // wait(wb_ack_o == 0);
-            wb_cyc_i = 0;
-            wb_stb_i = 0;
-            $display("Read Cycle Ended.");
-        end
-    endtask
-    
-    simpleuart_wb uut (
-		.wb_clk_i(wb_clk_i),
-		.wb_rst_i(wb_rst_i),
-    	.wb_stb_i(wb_stb_i),
-    	.wb_cyc_i(wb_cyc_i),
-    	.wb_sel_i(wb_sel_i),
-    	.wb_we_i(wb_we_i),
-        .wb_adr_i(wb_adr_i),      
-	    .wb_dat_i(wb_dat_i),
-	    .wb_ack_o(wb_ack_o),
-	    .wb_dat_o(wb_dat_o),
-        .ser_tx(tbuart_rx),
-		.ser_rx(ser_rx)
-	);
-
-endmodule
