diff --git a/verilog/rtl/caravel.v b/verilog/rtl/caravel.v
index 16d7d7d..beced01 100644
--- a/verilog/rtl/caravel.v
+++ b/verilog/rtl/caravel.v
@@ -38,13 +38,15 @@
 `include "/home/tim/projects/efabless/tech/SW/sky130A/libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
 
 `include "mgmt_soc.v"
-`include "striVe_spi.v"
+`include "caravel_spi.v"
 `include "digital_pll.v"
-`include "striVe_clkrst.v"
+`include "caravel_clkrst.v"
 `include "mprj_counter.v"
 `include "mgmt_core.v"
 `include "mprj_io.v"
 `include "chip_io.v"
+`include "user_id_programming.v"
+`include "gpio_control_block.v"
 
 `ifdef USE_OPENRAM
     `include "sram_1rw1r_32_8192_8_sky130.v"
@@ -54,38 +56,79 @@
     inout vdd3v3,
     inout vdd1v8,
     inout vss,
-    inout [1:0] gpio,		// Local digital only for management area
+    inout gpio,			// Used for external LDO control
     inout [`MPRJ_IO_PADS-1:0] mprj_io,
     input clock,	    	// CMOS core clock input, not a crystal
-    input RSTB,
-    input ser_rx,
-    output ser_tx,
-    input irq,
-    output SDO,
-    input SDI,
-    input CSB,
-    input SCK,
+    input resetb,
+
+    // Note that only two pins are available on the flash so dual and
+    // quad flash modes are not available.
+
     output flash_csb,
     output flash_clk,
     output flash_io0,
-    output flash_io1,
-    output flash_io2,
-    output flash_io3  
+    output flash_io1
 );
 
-    wire [1:0] gpio_out_core;
-    wire [1:0] gpio_in_core;
-    wire [1:0]	gpio_mode0_core;
-    wire [1:0]	gpio_mode1_core;
-    wire [1:0]	gpio_outenb_core;
-    wire [1:0]	gpio_inenb_core;
+    //------------------------------------------------------------
+    // This value is uniquely defined for each user project.
+    //------------------------------------------------------------
+    parameter USER_PROJECT_ID = 32'h0;
 
-    // Mega-Project Control
-    wire [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n;
+    // These pins are overlaid on mprj_io space.  They have the function
+    // below when the management processor is in reset, or in the default
+    // configuration.  They are assigned to uses in the user space by the
+    // configuration program running off of the SPI flash.  Note that even
+    // when the user has taken control of these pins, they can be restored
+    // to the original use by setting the resetb pin low.  The SPI pins and
+    // UART pins can be connected directly to an FTDI chip as long as the
+    // FTDI chip sets these lines to high impedence (input function) at
+    // all times except when holding the chip in reset.
+
+    // JTAG      = mprj_io[0]		(inout)
+    // SDO 	 = mprj_io[1]		(output)
+    // SDI 	 = mprj_io[2]		(input)
+    // CSB 	 = mprj_io[3]		(input)
+    // SCK	 = mprj_io[4]		(input)
+    // ser_rx    = mprj_io[5]		(input)
+    // ser_tx    = mprj_io[6]		(output)
+    // irq 	 = mprj_io[7]		(input)
+
+    // These pins are reserved for any project that wants to incorporate
+    // its own processor and flash controller.  While a user project can
+    // technically use any available I/O pins for the purpose, these
+    // four pins connect to a pass-through mode from the SPI slave (pins
+    // 1-4 above) so that any SPI flash connected to these specific pins
+    // can be accessed through the SPI slave even when the processor is in
+    // reset.
+
+    // flash_csb = mprj_io[8]
+    // flash_sck = mprj_io[9]
+    // flash_io0 = mprj_io[10]
+    // flash_io1 = mprj_io[11]
+
+    // One-bit GPIO dedicated to management SoC (outside of user control)
+    wire gpio_out_core;
+    wire gpio_in_core;
+    wire gpio_mode0_core;
+    wire gpio_mode1_core;
+    wire gpio_outenb_core;
+    wire gpio_inenb_core;
+
+    // Mega-Project Control (pad-facing)
+    wire [`MPRJ_IO_PADS-1:0] mgmt_io_data;
+    wire mprj_io_loader_resetn;
+    wire mprj_io_loader_clock;
+    wire mprj_io_loader_data;
+
     wire [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_enh;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis;
+    wire [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel;
+    wire [`MPRJ_IO_PADS-1:0] mprj_io_vtrip_sel;
+    wire [`MPRJ_IO_PADS-1:0] mprj_io_slow_sel;
+    wire [`MPRJ_IO_PADS-1:0] mprj_io_holdover;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_en;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol;
@@ -93,14 +136,22 @@
     wire [`MPRJ_IO_PADS-1:0] mprj_io_in;
     wire [`MPRJ_IO_PADS-1:0] mprj_io_out;
 
+    // Mega-Project Control (user-facing)
+    wire [`MPRJ_IO_PADS-1:0] user_io_oeb_n;
+    wire [`MPRJ_IO_PADS-1:0] user_io_in;
+    wire [`MPRJ_IO_PADS-1:0] user_io_out;
+
+    /* Padframe control signals */
+    wire [`MPRJ_IO_PADS-1:0] gpio_serial_link;
+    wire mgmt_serial_clock;
+    wire mgmt_serial_resetn;
+
+    // Power-on-reset signal.  The reset pad generates the sense-inverted
+    // reset at 3.3V.  The 1.8V signal and the inverted 1.8V signal are
+    // derived.
+
     wire porb_h;
     wire porb_l;
-    wire por;
-    wire SCK_core;
-    wire SDI_core;
-    wire CSB_core;
-    wire SDO_core;
-    wire SDO_enb;
 
     chip_io padframe(
 	// Package Pins
@@ -110,22 +161,12 @@
 	.gpio(gpio),
 	.mprj_io(mprj_io),
 	.clock(clock),
-	.RSTB(RSTB),
-	.ser_rx(ser_rx),
-	.ser_tx(ser_tx),
-	.irq(irq),
-	.SDO(SDO),
-	.SDI(SDI),
-	.CSB(CSB),
-	.SCK(SCK),
+	.resetb(resetb),
 	.flash_csb(flash_csb),
 	.flash_clk(flash_clk),
 	.flash_io0(flash_io0),
 	.flash_io1(flash_io1),
-	.flash_io2(flash_io2),
-	.flash_io3(flash_io3),
 	// SoC Core Interface
-	.por(por),
 	.porb_h(porb_h),
 	.clock_core(clock_core),
 	.gpio_out_core(gpio_out_core),
@@ -134,36 +175,21 @@
 	.gpio_mode1_core(gpio_mode1_core),
 	.gpio_outenb_core(gpio_outenb_core),
 	.gpio_inenb_core(gpio_inenb_core),
-	.SCK_core(SCK_core),
-	.ser_rx_core(ser_rx_core),
-	.ser_tx_core(ser_tx_core),
-	.irq_pin_core(irq_pin_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_io2_oeb_core(flash_io2_oeb_core),
-	.flash_io3_oeb_core(flash_io3_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_io2_ieb_core(flash_io2_ieb_core),
-	.flash_io3_ieb_core(flash_io3_ieb_core),
 	.flash_io0_do_core(flash_io0_do_core),
 	.flash_io1_do_core(flash_io1_do_core),
-	.flash_io2_do_core(flash_io2_do_core),
-	.flash_io3_do_core(flash_io3_do_core),
 	.flash_io0_di_core(flash_io0_di_core),
 	.flash_io1_di_core(flash_io1_di_core),
-	.flash_io2_di_core(flash_io2_di_core),
-	.flash_io3_di_core(flash_io3_di_core),
-	.SDI_core(SDI_core),
-	.CSB_core(CSB_core),
 	.pll_clk16(pll_clk16),
-	.SDO_core(SDO_core),
 	.mprj_io_in(mprj_io_in),
 	.mprj_io_out(mprj_io_out),
 	.mprj_io_oeb_n(mprj_io_oeb_n),
@@ -171,6 +197,9 @@
 	.mprj_io_enh(mprj_io_enh),
         .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),
@@ -178,8 +207,8 @@
     );
 
     // SoC core
-    wire striVe_clk;
-    wire striVe_rstn;
+    wire caravel_clk;
+    wire caravel_rstn;
 
     wire [7:0] spi_ro_config_core;
 
@@ -210,67 +239,52 @@
     wire xbar_ack_i_core;
     wire [31:0] xbar_dat_i_core;
 
+    // Mask revision
+    wire [31:0] mask_rev;
+
     mgmt_core soc (
 	`ifdef LVS
 		.vdd1v8(vdd1v8),
 		.vss(vss),
 	`endif
+		// GPIO (1 pin)
 		.gpio_out_pad(gpio_out_core),
 		.gpio_in_pad(gpio_in_core),
 		.gpio_mode0_pad(gpio_mode0_core),
 		.gpio_mode1_pad(gpio_mode1_core),
 		.gpio_outenb_pad(gpio_outenb_core),
 		.gpio_inenb_pad(gpio_inenb_core),
-		.spi_ro_config(spi_ro_config_core),
-		.ser_tx(ser_tx_core),
-		.ser_rx(ser_rx_core),
-		.irq_pin(irq_pin_core),
+		// Primary SPI flash controller
 		.flash_csb(flash_csb_core),
 		.flash_clk(flash_clk_core),
 		.flash_csb_oeb(flash_csb_oeb_core),
 		.flash_clk_oeb(flash_clk_oeb_core),
 		.flash_io0_oeb(flash_io0_oeb_core),
 		.flash_io1_oeb(flash_io1_oeb_core),
-		.flash_io2_oeb(flash_io2_oeb_core),
-		.flash_io3_oeb(flash_io3_oeb_core),
 		.flash_csb_ieb(flash_csb_ieb_core),
 		.flash_clk_ieb(flash_clk_ieb_core),
 		.flash_io0_ieb(flash_io0_ieb_core),
 		.flash_io1_ieb(flash_io1_ieb_core),
-		.flash_io2_ieb(flash_io2_ieb_core),
-		.flash_io3_ieb(flash_io3_ieb_core),
 		.flash_io0_do(flash_io0_do_core),
 		.flash_io1_do(flash_io1_do_core),
-		.flash_io2_do(flash_io2_do_core),
-		.flash_io3_do(flash_io3_do_core),
 		.flash_io0_di(flash_io0_di_core),
 		.flash_io1_di(flash_io1_di_core),
-		.flash_io2_di(flash_io2_di_core),
-		.flash_io3_di(flash_io3_di_core),
-		.por(por),
-		.porb_l(porb_l),
+		// Power-on Reset
+		.porb(porb_l),
+		// Clocks and reset
 		.clock(clock_core),
 		.pll_clk16(pll_clk16),
-		.SDI_core(SDI_core),
-		.CSB_core(CSB_core),
-		.SDO_core(SDO_core),
-		.SDO_enb(SDO_enb),
-        	.striVe_clk(striVe_clk),
-        	.striVe_rstn(striVe_rstn),
+        	.core_clk(caravel_clk),
+        	.core_rstn(caravel_rstn),
 		// Logic Analyzer 
 		.la_input(la_data_out_mprj),
 		.la_output(la_output_core),
 		.la_oen(la_oen),
 		// Mega Project IO Control
-		.mprj_io_oeb_n(mprj_io_oeb_n),
-		.mprj_io_enh(mprj_io_enh),
-        	.mprj_io_hldh_n(mprj_io_hldh_n),
-        	.mprj_io_inp_dis(mprj_io_inp_dis),
-        	.mprj_io_ib_mode_sel(mprj_io_ib_mode_sel),
-        	.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_io_loader_resetn(mprj_io_loader_resetn),
+		.mprj_io_loader_clock(mprj_io_loader_clock),
+		.mprj_io_loader_data(mprj_io_loader_data),
+		.mgmt_io_data(mgmt_io_data),
 		// Mega Project Slave ports (WB MI A)
 		.mprj_cyc_o(mprj_cyc_o_core),
 		.mprj_stb_o(mprj_stb_o_core),
@@ -288,18 +302,20 @@
         	.xbar_adr_o(xbar_adr_o_core),
         	.xbar_dat_o(xbar_dat_o_core),
         	.xbar_ack_i(xbar_ack_i_core),
-        	.xbar_dat_i(xbar_dat_i_core)
+        	.xbar_dat_i(xbar_dat_i_core),
+		// mask data
+		.mask_rev(mask_rev)
     	);
 
-	sky130_fd_sc_hd__ebufn_8 la_buf[127:0](
+	sky130_fd_sc_hd__ebufn_8 la_buf [127:0] (
 		.Z(la_data_in_mprj),
 		.A(la_output_core),
 		.TE_B(la_oen)
 	);
 	
 	mega_project mprj ( 
-    		.wb_clk_i(striVe_clk),
-    		.wb_rst_i(!striVe_rstn),
+    		.wb_clk_i(caravel_clk),
+    		.wb_rst_i(!caravel_rstn),
 		// MGMT SoC Wishbone Slave 
 		.wbs_cyc_i(mprj_cyc_o_core),
 		.wbs_stb_i(mprj_stb_o_core),
@@ -318,6 +334,45 @@
 		.io_in (mprj_io_in)
 	);
 
+    wire [`MPRJ_IO_PADS-1:0] gpio_serial_link_shifted;
+
+    assign gpio_serial_link_shifted = {mprj_io_loader_data, gpio_serial_link[`MPRJ_IO_PADS-1:1]};
+
+    gpio_control_block gpio_control_inst [`MPRJ_IO_PADS-1:0] (
+    	// Management Soc-facing signals
+
+    	resetn(mprj_io_loader_resetn),
+    	serial_clock(mprj_io_loader_clock),
+
+    	mgmt_gpio_io(mgmt_io_data),
+
+    	// Serial data chain for pad configuration
+    	serial_data_in(gpio_serial_link_shifted),
+    	serial_data_out(gpio_serial_link),
+
+    	// User-facing signals
+    	user_gpio_out(user_io_out),
+    	user_gpio_outenb(user_io_oeb_n),
+    	user_gpio_in(user_io_in),
+
+    	// Pad-facing signals (Pad GPIOv2)
+    	pad_gpio_holdover(mprj_io_hldh_n),
+    	pad_gpio_slow(mprj_io_slow),
+    	pad_gpio_vtrip_sel(mprj_io_vtrip_sel),
+    	pad_gpio_inenb(mprj_io_inp_dis),
+    	pad_gpio_ib_mode_sel(mprj_io_ib_mode_sel),
+    	pad_gpio_vtrip_sel(mprj_io_vtrip_sel),
+    	pad_gpio_slow_sel(mprj_io_slow_sel),
+    	pad_gpio_holdover(mprj_io_holdover),
+    	pad_gpio_ana_en(mprj_io_analog_en),
+    	pad_gpio_ana_sel(mprj_io_analog_sel),
+    	pad_gpio_ana_pol(mprj_io_analog_pol),
+    	pad_gpio_dm(mprj_io_dm),
+    	pad_gpio_outenb(mprj_io_oen_n),
+    	pad_gpio_out(mprj_io_out),
+    	pad_gpio_in(mprj_io_in)
+    );
+
     sky130_fd_sc_hvl__lsbufhv2lv levelshift (
 	`ifdef LVS
 		.vpwr(vdd3v3),
@@ -330,4 +385,10 @@
 		.X(porb_l)
     );
 
+    user_id_programming #(
+	.USER_PROJECT_ID(USER_PROJECT_ID)
+    ) user_id_value (
+	.mask_rev(mask_rev)
+    );
+
 endmodule
diff --git a/verilog/rtl/striVe_clkrst.v b/verilog/rtl/caravel_clkrst.v
similarity index 60%
rename from verilog/rtl/striVe_clkrst.v
rename to verilog/rtl/caravel_clkrst.v
index ff42831..af40b8f 100644
--- a/verilog/rtl/striVe_clkrst.v
+++ b/verilog/rtl/caravel_clkrst.v
@@ -1,4 +1,4 @@
-module striVe_clkrst(
+module caravel_clkrst(
 `ifdef LVS
     input vdd1v8,
     input vss,
@@ -6,14 +6,14 @@
     input ext_clk_sel,
     input ext_clk,
     input pll_clk,
-    input reset, 
-    input ext_reset,
-    output clk,
-    output resetn
+    input resetb, 
+    input ext_reset,	// NOTE: positive sense reset
+    output core_clk,
+    output resetb_sync
 );
 
     // Clock assignment (to do:  make this glitch-free)
-    assign clk = (ext_clk_sel == 1'b1) ? ext_clk : pll_clk;
+    assign core_clk = (ext_clk_sel == 1'b1) ? ext_clk : pll_clk;
 
     // Reset assignment.  "reset" comes from POR, while "ext_reset"
     // comes from standalone SPI (and is normally zero unless
@@ -22,14 +22,14 @@
     // Staged-delay reset
     reg [2:0] reset_delay;
 
-    always @(posedge clk or posedge reset) begin
-        if (reset == 1'b1) begin
+    always @(posedge core_clk or negedge resetb) begin
+        if (resetb == 1'b0) begin
         reset_delay <= 3'b111;
         end else begin
         reset_delay <= {1'b0, reset_delay[2:1]};
         end
     end
 
-    assign resetn = ~(reset_delay[0] | ext_reset);
+    assign resetb_sync = ~(reset_delay[0] | ext_reset);
 
 endmodule
diff --git a/verilog/rtl/caravel_spi.v b/verilog/rtl/caravel_spi.v
new file mode 100644
index 0000000..3abd227
--- /dev/null
+++ b/verilog/rtl/caravel_spi.v
@@ -0,0 +1,261 @@
+//-------------------------------------
+// SPI controller for Caravel (PicoSoC)
+//-------------------------------------
+// Written by Tim Edwards
+// efabless, inc. September 27, 2020
+//-------------------------------------
+
+`include "caravel_spi_slave.v"
+
+//-----------------------------------------------------------
+// This is a standalone slave SPI for the caravel chip that is
+// intended to be independent of the picosoc and independent
+// of all IP blocks except the power-on-reset.  This SPI has
+// register outputs controlling the functions that critically
+// affect operation of the picosoc and so cannot be accessed
+// from the picosoc itself.  This includes the PLL enables
+// and trim, and the crystal oscillator enable.  It also has
+// a general reset for the picosoc, an IRQ input, a bypass for
+// the entire crystal oscillator and PLL chain, the
+// manufacturer and product IDs and product revision number.
+// To be independent of the 1.8V regulator, the slave SPI is
+// synthesized with the 3V digital library and runs off of
+// the 3V supply.
+//
+// This module is designed to be decoupled from the chip
+// padframe and redirected to the wishbone bus under
+// register control from the management SoC, such that the
+// contents can be accessed from the management core via the
+// SPI master.
+//
+//-----------------------------------------------------------
+
+//------------------------------------------------------------
+// Caravel defined registers:
+// Register 0:  SPI status and control (unused & reserved)
+// Register 1 and 2:  Manufacturer ID (0x0456) (readonly)
+// Register 3:  Product ID (= 2) (readonly)
+// Register 4-7: Mask revision (readonly) --- Externally programmed
+//	with via programming.  Via programmed with a script to match
+//	each customer ID.
+//
+// Register 8:   PLL enable (1 bit)
+// Register 9:   PLL bypass (1 bit)
+// Register 10:  IRQ (1 bit)
+// Register 11:  reset (1 bit)
+// Register 12:  trap (1 bit) (readonly)
+// Register 13-16:  PLL trim (26 bits)
+// Register 17:	 PLL output select (3 bits)
+// Register 18:	 PLL divider (5 bits)
+//------------------------------------------------------------
+
+module caravel_spi(
+`ifdef LVS
+    vdd, vss, 
+`endif
+    RSTB, SCK, SDI, CSB, SDO, sdo_enb,
+    mgmt_sck, mgmt_sdi, mgmt_csb, mgmt_sdo,
+    pll_dco_ena, pll_div, pll_sel,
+    pll_trim, pll_bypass, irq, reset, trap,
+    mask_rev_in, pass_thru_reset,
+    pass_thru_mgmt_sck, pass_thru_mgmt_csb,
+    pass_thru_mgmt_sdi, pass_thru_mgmt_sdo,
+    pass_thru_user_sck, pass_thru_user_csb,
+    pass_thru_user_sdi, pass_thru_user_sdo
+);
+
+`ifdef LVS
+    inout vdd;	    // 3.3V supply
+    inout vss;	    // common ground
+`endif
+    
+    input RSTB;	    // from padframe
+
+    input SCK;	    // from padframe
+    input SDI;	    // from padframe
+    input CSB;	    // from padframe
+    output SDO;	    // to padframe
+    output sdo_enb; // to padframe
+
+    input mgmt_sck;    // from management SoC
+    input mgmt_sdi;    // from management SoC
+    input mgmt_csb;    // from management SoC
+    output mgmt_sdo;   // to management SoC
+
+    output pll_dco_ena;
+    output [4:0] pll_div;
+    output [2:0] pll_sel;
+    output [25:0] pll_trim;
+    output pll_bypass;
+    output irq;
+    output reset;
+    input  trap;
+    input [31:0] mask_rev_in;	// metal programmed;  3.3V domain
+
+    // Pass-through programming mode for management area SPI flash
+    output pass_thru_reset;
+    output pass_thru_mgmt_sck;
+    output pass_thru_mgmt_csb;
+    output pass_thru_mgmt_sdi;
+    input  pass_thru_mgmt_sdo;
+
+    // Pass-through programming mode for user area SPI flash
+    output pass_thru_user_sck;
+    output pass_thru_user_csb;
+    output pass_thru_user_sdi;
+    input  pass_thru_user_sdo;
+
+    reg [25:0] pll_trim;
+    reg [4:0] pll_div;
+    reg [2:0] pll_sel;
+    reg pll_dco_ena;
+    reg pll_bypass;
+    reg reset_reg;
+    reg irq;
+
+    wire [7:0] odata;
+    wire [7:0] idata;
+    wire [7:0] iaddr;
+
+    wire trap;
+    wire rdstb;
+    wire wrstb;
+    wire pass_thru_mgmt;		// Mode detected by spi_slave
+    wire pass_thru_mgmt_delay;
+    wire pass_thru_user;		// Mode detected by spi_slave
+    wire pass_thru_user_delay;
+
+    // Connect to management SoC SPI master when mgmt_csb is low
+
+    wire loc_sck;
+    wire loc_csb;
+    wire loc_sdi;
+    wire loc_sdo;
+    wire loc_sdoenb;
+
+    assign loc_csb = (mgmt_csb == 1'b0) ? 1'b0 : CSB;
+    assign loc_sck = (mgmt_csb == 1'b0) ? mgmt_sck : SCK;
+    assign loc_sdi = (mgmt_csb == 1'b0) ? mgmt_sdi : SDI;
+
+    assign mgmt_sdo = (mgmt_csb == 1'b0) ? loc_sdo : 1'b0;
+    assign sdo_enb = (mgmt_csb == 1'b0) ? 1'b1 : loc_sdoenb;
+
+    // Pass-through mode handling
+
+    assign pass_thru_mgmt_csb = ~pass_thru_mgmt_delay;
+    assign pass_thru_mgmt_sck = pass_thru_mgmt ? SCK : 1'b0;
+    assign pass_thru_mgmt_sdi = pass_thru_mgmt ? SDI : 1'b0;
+
+    assign pass_thru_user_csb = ~pass_thru_user_delay;
+    assign pass_thru_user_sck = pass_thru_user ? SCK : 1'b0;
+    assign pass_thru_user_sdi = pass_thru_user ? SDI : 1'b0;
+
+    assign SDO = pass_thru_mgmt ? pass_thru_mgmt_sdo :
+		 pass_thru_user ? pass_thru_user_sdo : loc_sdo;
+    assign reset = pass_thru_reset ? 1'b1 : reset_reg;
+
+    // Instantiate the SPI slave module
+
+    caravel_spi_slave U1 (
+	.reset(~RSTB),
+    	.SCK(loc_sck),
+    	.SDI(loc_sdi),
+    	.CSB(loc_csb),
+    	.SDO(loc_sdo),
+    	.sdoenb(loc_sdoenb),
+    	.idata(odata),
+    	.odata(idata),
+    	.oaddr(iaddr),
+    	.rdstb(rdstb),
+    	.wrstb(wrstb),
+    	.pass_thru_mgmt(pass_thru_mgmt),
+    	.pass_thru_mgmt_delay(pass_thru_mgmt_delay),
+    	.pass_thru_user(pass_thru_user),
+    	.pass_thru_user_delay(pass_thru_user_delay),
+    	.pass_thru_reset(pass_thru_reset)
+    );
+
+    wire [11:0] mfgr_id;
+    wire [7:0]  prod_id;
+    wire [31:0] mask_rev;
+
+    assign mfgr_id = 12'h456;		// Hard-coded
+    assign prod_id = 8'h10;		// Hard-coded
+    assign mask_rev = mask_rev_in;	// Copy in to out.
+
+    // Send register contents to odata on SPI read command
+    // All values are 1-4 bits and no shadow registers are required.
+
+    assign odata = 
+    (iaddr == 8'h00) ? 8'h00 :	// SPI status (fixed)
+    (iaddr == 8'h01) ? {4'h0, mfgr_id[11:8]} :	// Manufacturer ID (fixed)
+    (iaddr == 8'h02) ? mfgr_id[7:0] :	// Manufacturer ID (fixed)
+    (iaddr == 8'h03) ? prod_id :	// Product ID (fixed)
+    (iaddr == 8'h04) ? mask_rev[31:24] :	// Mask rev (metal programmed)
+    (iaddr == 8'h05) ? mask_rev[23:16] :	// Mask rev (metal programmed)
+    (iaddr == 8'h06) ? mask_rev[15:8] :		// Mask rev (metal programmed)
+    (iaddr == 8'h07) ? mask_rev[7:0] :		// Mask rev (metal programmed)
+
+    (iaddr == 8'h08) ? {7'b0000000, pll_dco_ena} :
+    (iaddr == 8'h09) ? {7'b0000000, pll_bypass} :
+    (iaddr == 8'h0a) ? {7'b0000000, irq} :
+    (iaddr == 8'h0b) ? {7'b0000000, reset} :
+    (iaddr == 8'h0c) ? {7'b0000000, trap} :
+    (iaddr == 8'h0d) ? pll_trim[7:0] :
+    (iaddr == 8'h0e) ? pll_trim[15:8] :
+    (iaddr == 8'h0f) ? pll_trim[23:16] :
+    (iaddr == 8'h10) ? {6'b000000, pll_trim[25:24]} :
+    (iaddr == 8'h11) ? {5'b00000, pll_sel} :
+    (iaddr == 8'h12) ? {3'b000, pll_div} :
+               8'h00;	// Default
+
+    // Register mapping and I/O to slave module
+
+    always @(posedge SCK or negedge RSTB) begin
+    if (RSTB == 1'b0) begin
+        // Set trim for PLL at (almost) slowest rate (~90MHz).  However,
+        // pll_trim[12] must be set to zero for proper startup.
+        pll_trim <= 26'b11111111111110111111111111;
+        pll_sel <= 3'b000;
+        pll_div <= 5'b00100;	// Default divide-by-8
+        pll_dco_ena <= 1'b1;	// Default free-running PLL
+        pll_bypass <= 1'b1;		// NOTE: Default bypass mode (don't use PLL)
+        irq <= 1'b0;
+        reset_reg <= 1'b0;
+    end else if (wrstb == 1'b1) begin
+        case (iaddr)
+        8'h08: begin
+             pll_dco_ena <= idata[0];
+               end
+        8'h09: begin
+             pll_bypass <= idata[0];
+               end
+        8'h0a: begin
+             irq <= idata[0];
+               end
+        8'h0b: begin
+             reset_reg <= idata[0];
+               end
+        // Register 0xc is read-only
+        8'h0d: begin
+              pll_trim[7:0] <= idata;
+               end
+        8'h0e: begin
+              pll_trim[15:8] <= idata;
+               end
+        8'h0f: begin
+              pll_trim[23:16] <= idata;
+               end
+        8'h10: begin
+              pll_trim[25:24] <= idata[1:0];
+               end
+        8'h11: begin
+             pll_sel <= idata[2:0];
+               end
+        8'h12: begin
+             pll_div <= idata[4:0];
+               end
+        endcase	// (iaddr)
+    end
+    end
+endmodule	// caravel_spi
diff --git a/verilog/rtl/caravel_spi_slave.v b/verilog/rtl/caravel_spi_slave.v
new file mode 100644
index 0000000..e8a6494
--- /dev/null
+++ b/verilog/rtl/caravel_spi_slave.v
@@ -0,0 +1,221 @@
+//------------------------------------------------------
+// caravel_spi_slave.v
+//------------------------------------------------------
+// General purpose SPI slave module for the Caravel chip
+//------------------------------------------------------
+// Written by Tim Edwards
+// efabless, inc., September 28, 2020
+//------------------------------------------------
+// This file is distributed free and open source
+//------------------------------------------------
+
+// SCK ---   Clock input
+// SDI ---   Data  input
+// SDO ---   Data  output
+// CSB ---   Chip  select (sense negative)
+// idata --- Data from chip to transmit out, in 8 bits
+// odata --- Input data to chip, in 8 bits
+// addr  --- Decoded address to upstream circuits
+// rdstb --- Read strobe, tells upstream circuit to supply next byte to idata
+// wrstb --- Write strobe, tells upstream circuit to latch odata.
+
+// Data format (general purpose):
+// 8 bit format
+// 1st byte:   Command word (see below)
+// 2nd byte:   Address word (register 0 to 255)
+// 3rd byte:   Data word    (value 0 to 255)
+
+// Command format:
+// 00000000  No operation
+// 10000000  Write until CSB raised
+// 01000000  Read  until CSB raised
+// 11000000  Simultaneous read/write until CSB raised
+// 11000100  Pass-through read/write to management area flash SPI until CSB raised
+// 11000101  Pass-through read/write to user area flash SPI until CSB raised
+// wrnnn000  Read/write as above, for nnn = 1 to 7 bytes, then terminate
+
+// Lower three bits are reserved for future use.
+// All serial bytes are read and written msb first.
+
+// Fixed control and status registers
+
+// Address 0 is reserved and contains flags for SPI mode.  This is
+// currently undefined and is always value 0.
+// Address 1 is reserved and contains manufacturer ID low 8 bits.
+// Address 2 is reserved and contains manufacturer ID high 4 bits.
+// Address 3 is reserved and contains product ID (8 bits).
+// Addresses 4 to 7 are reserved and contain the mask ID (32 bits).
+// Addresses 8 to 255 are available for general purpose use.
+
+`define COMMAND  3'b000
+`define ADDRESS  3'b001
+`define DATA     3'b010
+`define USERPASS 3'b100
+`define MGMTPASS 3'b101
+
+module caravel_spi_slave(reset, SCK, SDI, CSB, SDO,
+	sdoenb, idata, odata, oaddr, rdstb, wrstb,
+	pass_thru_mgmt, pass_thru_mgmt_delay,
+	pass_thru_user, pass_thru_user_delay, pass_thru_reset);
+
+    input reset;
+    input SCK;
+    input SDI;
+    input CSB;
+    output SDO;
+    output sdoenb;
+    input [7:0] idata;
+    output [7:0] odata;
+    output [7:0] oaddr;
+    output rdstb;
+    output wrstb; 
+    output pass_thru_mgmt;
+    output pass_thru_mgmt_delay;
+    output pass_thru_user;
+    output pass_thru_user_delay;
+    output pass_thru_reset;
+
+    reg  [7:0]  addr;
+    reg		wrstb;
+    reg		rdstb;
+    reg		sdoenb;
+    reg  [2:0]  state;
+    reg  [2:0]  count;
+    reg		writemode;
+    reg		readmode;
+    reg  [2:0]	fixed;
+    wire [7:0]  odata;
+    reg  [6:0]  predata;
+    wire [7:0]  oaddr;
+    reg  [7:0]  ldata;
+    reg		pass_thru_mgmt;
+    reg		pass_thru_mgmt_delay;
+    reg		pre_pass_thru_mgmt;
+    reg		pass_thru_user;
+    reg		pass_thru_user_delay;
+    reg		pre_pass_thru_user;
+    wire	csb_reset;
+
+    assign odata = {predata, SDI};
+    assign oaddr = (state == `ADDRESS) ? {addr[6:0], SDI} : addr;
+    assign SDO = ldata[7];
+    assign csb_reset = CSB | reset;
+    assign pass_thru_reset = pass_thru_mgmt_delay | pre_pass_thru_mgmt;
+
+    // Readback data is captured on the falling edge of SCK so that
+    // it is guaranteed valid at the next rising edge.
+    always @(negedge SCK or posedge CSB) begin
+        if (CSB == 1'b1) begin
+            wrstb <= 1'b0;
+            ldata  <= 8'b00000000;
+            sdoenb <= 1'b1;
+        end else begin
+
+            // After CSB low, 1st SCK starts command
+
+            if (state == `DATA) begin
+            	if (readmode == 1'b1) begin
+                    sdoenb <= 1'b0;
+                    if (count == 3'b000) begin
+                	ldata <= idata;
+                    end else begin
+                	ldata <= {ldata[6:0], 1'b0};	// Shift out
+                    end
+                end else begin
+                    sdoenb <= 1'b1;
+                end
+
+                // Apply write strobe on SCK negative edge on the next-to-last
+                // data bit so that it updates data on the rising edge of SCK
+                // on the last data bit.
+ 
+                if (count == 3'b111) begin
+                    if (writemode == 1'b1) begin
+                        wrstb <= 1'b1;
+                    end
+                end else begin
+                    wrstb <= 1'b0;
+                end
+	    end else if (state == `MGMTPASS || state == `USERPASS) begin
+		wrstb <= 1'b0;
+		sdoenb <= 1'b0;
+            end else begin
+                wrstb <= 1'b0;
+                sdoenb <= 1'b1;
+            end		// ! state `DATA
+        end		// ! CSB
+    end			// always @ ~SCK
+
+    always @(posedge SCK or posedge CSB) begin
+        if (csb_reset == 1'b1) begin
+            // Default state on reset
+            addr <= 8'h00;
+            rdstb <= 1'b0;
+            predata <= 7'b0000000;
+            state  <= `COMMAND;
+            count  <= 3'b000;
+            readmode <= 1'b0;
+            writemode <= 1'b0;
+            fixed <= 3'b000;
+	    pass_thru_mgmt <= 1'b0;
+	    pass_thru_mgmt_delay <= 1'b0;
+	    pre_pass_thru_mgmt <= 1'b0;
+	    pass_thru_user = 1'b0;
+	    pass_thru_user_delay <= 1'b0;
+	    pre_pass_thru_user <= 1'b0;
+        end else begin
+            // After CSB low, 1st SCK starts command
+            if (state == `COMMAND) begin
+                rdstb <= 1'b0;
+                count <= count + 1;
+        	if (count == 3'b000) begin
+	            writemode <= SDI;
+	        end else if (count == 3'b001) begin
+	            readmode <= SDI;
+	        end else if (count < 3'b101) begin
+	            fixed <= {fixed[1:0], SDI}; 
+	        end else if (count < 3'b110) begin
+		    pass_thru_mgmt_delay <= pre_pass_thru_mgmt;
+		    pass_thru_user_delay <= pre_pass_thru_user;
+	        end else if (count == 3'b111) begin
+		    if (pre_pass_thru_mgmt == 1'b1) begin
+			state <= `MGMTPASS;
+			pre_pass_thru_mgmt <= 1'b0;
+		    end else if (pre_pass_thru_user == 1'b1) begin
+			state <= `USERPASS;
+			pre_pass_thru_user <= 1'b0;
+		    end else begin
+	                state <= `ADDRESS;
+		    end
+	        end
+            end else if (state == `ADDRESS) begin
+	        count <= count + 1;
+	        addr <= {addr[6:0], SDI};
+	        if (count == 3'b111) begin
+	            if (readmode == 1'b1) begin
+	            	rdstb <= 1'b1;
+	            end
+	            state <= `DATA;
+	        end else begin
+	            rdstb <= 1'b0;
+	        end
+            end else if (state == `DATA) begin
+	        predata <= {predata[6:0], SDI};
+	        count <= count + 1;
+	        if (count == 3'b111) begin
+	            if (fixed == 3'b001) begin
+	                state <= `COMMAND;
+	            end else if (fixed != 3'b000) begin
+	                fixed <= fixed - 1;
+	                addr <= addr + 1;	// Auto increment address (fixed)
+	            end else begin	
+	                addr <= addr + 1;	// Auto increment address (streaming)
+	            end
+	        end else begin
+	            rdstb <= 1'b0;
+	        end
+            end		// ! state `DATA
+        end		// ! CSB
+    end			// always @ SCK
+
+endmodule // caravel_spi_slave
diff --git a/verilog/rtl/chip_io.v b/verilog/rtl/chip_io.v
index f3bba5e..bd359b9 100644
--- a/verilog/rtl/chip_io.v
+++ b/verilog/rtl/chip_io.v
@@ -3,62 +3,37 @@
 	inout  vdd3v3,
     	inout  vdd1v8,
     	inout  vss,
-	input  [1:0] gpio,
+	inout  gpio,
 	inout  clock,
-	inout  RSTB,
-	inout  ser_rx,
-	output ser_tx,
-	inout  irq,
-	output SDO,
-	inout  SDI,
-	inout  CSB,
-	inout  SCK,
+	inout  resetb,
 	output flash_csb,
 	output flash_clk,
 	output flash_io0,
 	output flash_io1,
-	output flash_io2,
-	output flash_io3,
 	// Chip Core Interface
-	input  por,
 	output porb_h,
 	output clock_core,
-	input  [1:0] gpio_out_core,
-    	output [1:0] gpio_in_core,
-    	input  [1:0] gpio_mode0_core,
-    	input  [1:0] gpio_mode1_core,
-    	input  [1:0] gpio_outenb_core,
-    	input  [1:0] gpio_inenb_core,
-	output SCK_core,
-	output ser_rx_core,
-	inout  ser_tx_core,
-	output irq_pin_core,
+	input  gpio_out_core,
+    	output gpio_in_core,
+    	input  gpio_mode0_core,
+    	input  gpio_mode1_core,
+    	input  gpio_outenb_core,
+    	input  gpio_inenb_core,
 	input  flash_csb_core,
 	input  flash_clk_core,
 	input  flash_csb_oeb_core,
 	input  flash_clk_oeb_core,
 	input  flash_io0_oeb_core,
 	input  flash_io1_oeb_core,
-	input  flash_io2_oeb_core,
-	input  flash_io3_oeb_core,
 	input  flash_csb_ieb_core,
 	input  flash_clk_ieb_core,
 	input  flash_io0_ieb_core,
 	input  flash_io1_ieb_core,
-	input  flash_io2_ieb_core,
-	input  flash_io3_ieb_core,
 	input  flash_io0_do_core,
 	input  flash_io1_do_core,
-	input  flash_io2_do_core,
-	input  flash_io3_do_core,
 	output flash_io0_di_core,
 	output flash_io1_di_core,
-	output flash_io2_di_core,
-	output flash_io3_di_core,	
-	output SDI_core,
-	output CSB_core,
 	input  pll_clk16,
-	input  SDO_core,
 	// Mega-project IOs
 	input [`MPRJ_IO_PADS-1:0] mprj_io,
 	input [`MPRJ_IO_PADS-1:0] mprj_io_out,
@@ -67,6 +42,9 @@
 	input [`MPRJ_IO_PADS-1:0] mprj_io_enh,
     	input [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
     	input [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
+    	input [`MPRJ_IO_PADS-1:0] mprj_io_vtrip_sel,
+    	input [`MPRJ_IO_PADS-1:0] mprj_io_slow_sel,
+    	input [`MPRJ_IO_PADS-1:0] mprj_io_holdover,
     	input [`MPRJ_IO_PADS-1:0] mprj_io_analog_en,
     	input [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
     	input [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
@@ -150,22 +128,16 @@
 		.src_bdy_lvc2()
     	);
 
-	wire [5:0] dm_all;
-    	assign dm_all = {gpio_mode1_core[1], gpio_mode1_core[1], gpio_mode0_core[1],
-		 gpio_mode1_core[0], gpio_mode1_core[0], gpio_mode0_core[0]};
-
+	wire [2:0] dm_all =
+    		{gpio_mode1_core, gpio_mode1_core, gpio_mode0_core};
 	wire[2:0] flash_io0_mode = 
 		{flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core};
 	wire[2:0] flash_io1_mode = 
 		{flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core};
-	wire[2:0] flash_io2_mode = 
-		{flash_io2_ieb_core, flash_io2_ieb_core, flash_io2_oeb_core};
-	wire[2:0] flash_io3_mode =
-		{flash_io3_ieb_core, flash_io3_ieb_core, flash_io3_oeb_core};
 
-    	// GPIO pads
-	`INOUT_PAD_V(
-		gpio, gpio_in_core, gpio_out_core, 2,
+    	// GPIO pad
+	`INOUT_PAD(
+		gpio, gpio_in_core, gpio_out_core,
 		gpio_inenb_core, gpio_outenb_core, dm_all);
 	
 	// Flash pads
@@ -175,35 +147,22 @@
 	`INOUT_PAD(
 		flash_io1, flash_io1_di_core, flash_io1_do_core,
 		flash_io1_ieb_core, flash_io1_oeb_core, flash_io1_mode);
-	`INOUT_PAD(
-		flash_io2, flash_io2_di_core, flash_io2_do_core,
-		flash_io2_ieb_core, flash_io2_oeb_core, flash_io2_mode);
-	`INOUT_PAD(
-		flash_io3, flash_io3_di_core, flash_io3_do_core,
-		flash_io3_ieb_core, flash_io3_oeb_core, flash_io3_mode);
 
 	`INPUT_PAD(clock, clock_core); 	    
-	`INPUT_PAD(irq, irq_pin_core);
-	`INPUT_PAD(SDI, SDI_core); 	    
-	`INPUT_PAD(CSB, CSB_core); 	    
-	`INPUT_PAD(SCK, SCK_core); 	    
-	`INPUT_PAD(ser_rx, ser_rx_core); 	    
 
 	// Output Pads
-	`OUTPUT_PAD(SDO, SDO_core, vdd1v8, SDO_enb);
 	`OUTPUT_PAD(flash_csb, flash_csb_core, flash_csb_ieb_core, flash_csb_oeb_core);  
 	`OUTPUT_PAD(flash_clk, flash_clk_core, flash_clk_ieb_core, flash_clk_oeb_core);
-	`OUTPUT_PAD(ser_tx, ser_tx_core, vdd1v8, ser_tx_ena); 	    
 
 
 	// NOTE:  The analog_out pad from the raven chip has been replaced by
-    	// the digital reset input RSTB on striVe due to the lack of an on-board
+    	// the digital reset input resetb on caravel due to the lack of an on-board
     	// power-on-reset circuit.  The XRES pad is used for providing a glitch-
     	// free reset.
-	s8iom0s8_top_xres4v2 RSTB_pad (
+	s8iom0s8_top_xres4v2 resetb_pad (
 		`ABUTMENT_PINS 
 		`ifndef	TOP_ROUTING
-		    .pad(RSTB),
+		    .pad(resetb),
 		`endif
 		.tie_weak_hi_h(xresloop),   // Loop-back connection to pad through pad_a_esd_h
 		.tie_hi_esd(),
diff --git a/verilog/rtl/convert_gpio_sigs.v b/verilog/rtl/convert_gpio_sigs.v
new file mode 100644
index 0000000..cac5141
--- /dev/null
+++ b/verilog/rtl/convert_gpio_sigs.v
@@ -0,0 +1,35 @@
+/* Convert the standard set of GPIO signals: input, output, output_enb,
+ * pullup, and pulldown into the set needed by the s8 GPIO pads:
+ * input, output, output_enb, input_enb, mode.  Note that dm[2] on
+ * thepads is always equal to dm[1] in this setup, so mode is shown as
+ * only a 2-bit signal.
+ *
+ * This module is bit-sliced.  Instantiate once for each GPIO pad.
+ * (Caravel has only one GPIO pad, so bit-slicing is irrelevant.)
+ */
+
+module convert_gpio_sigs (
+    input        gpio_out,
+    input        gpio_outenb,
+    input        gpio_pu,
+    input        gpio_pd,
+    output       gpio_out_pad,
+    output       gpio_outenb_pad,
+    output       gpio_inenb_pad,
+    output       gpio_mode1_pad,
+    output       gpio_mode0_pad
+);
+
+    assign gpio_out_pad = (gpio_pu == 1'b0 && gpio_pd == 1'b0) ? gpio_out :
+            (gpio_pu == 1'b1) ? 1 : 0;
+
+    assign gpio_outenb_pad = (gpio_outenb == 1'b0) ? 0 :
+            (gpio_pu == 1'b1 || gpio_pd == 1'b1) ? 0 : 1;
+
+    assign gpio_inenb_pad = ~gpio_outenb;
+
+    assign gpio_mode1_pad = ~gpio_outenb_pad;
+    assign gpio_mode0_pad = gpio_outenb;
+
+endmodule
+
diff --git a/verilog/rtl/counter_timer.v b/verilog/rtl/counter_timer.v
new file mode 100755
index 0000000..ccd1431
--- /dev/null
+++ b/verilog/rtl/counter_timer.v
@@ -0,0 +1,169 @@
+/* Simple 32-bit counter-timer for Caravel. */
+
+module counter_timer_wb # (
+    parameter BASE_ADR = 32'h2200_0000,
+    parameter CONFIG = 8'h00,
+    parameter VALUE  = 8'h04,
+    parameter DATA   = 8'h08
+) (
+    input wb_clk_i,
+    input wb_rst_i,
+    input [31:0] wb_adr_i,
+    input [31:0] wb_dat_i,
+    input [3:0] wb_sel_i,
+    input wb_we_i,
+    input wb_cyc_i,
+    input wb_stb_i,
+
+    output wb_ack_o,
+    output [31:0] wb_dat_o,
+    output irq
+);
+    wire [31:0] counter_timer_reg_cfg_do;
+    wire [31:0] counter_timer_reg_val_do;
+    wire [31:0] counter_timer_reg_dat_do;
+
+    wire resetn = ~wb_rst_i;
+    wire valid = wb_stb_i && wb_cyc_i;
+    wire counter_timer_reg_cfg_sel = valid && (wb_adr_i == (BASE_ADR | CONFIG));
+    wire counter_timer_reg_val_sel = valid && (wb_adr_i == (BASE_ADR | VALUE));
+    wire counter_timer_reg_dat_sel = valid && (wb_adr_i == (BASE_ADR | DATA));
+
+    wire reg_cfg_we = (counter_timer_reg_cfg_sel) ?
+		(wb_sel_i[0] & {wb_we_i}): 1'b0;
+    wire [3:0] reg_val_we = (counter_timer_reg_val_sel) ?
+		(wb_sel_i & {4{wb_we_i}}): 4'b0000;
+    wire [3:0] reg_dat_we = (counter_timer_reg_dat_sel) ?
+		(wb_sel_i & {4{wb_we_i}}): 4'b0000;
+
+    wire [31:0] mem_wdata = wb_dat_i;
+    wire reg_dat_re = counter_timer_reg_dat_sel && !wb_sel_i && ~wb_we_i;
+
+    assign wb_dat_o = (counter_timer_reg_cfg_sel) ? counter_timer_reg_cfg_do :
+		      (counter_timer_reg_val_sel) ? counter_timer_reg_val_do :
+		      counter_timer_reg_dat_do;
+    assign wb_ack_o = counter_timer_reg_cfg_sel || counter_timer_reg_val_sel ||
+			counter_timer_reg_dat_sel;
+    
+    counter_timer counter_timer_inst (
+        .resetn(resetn),
+        .clkin(wb_clk_i),
+        .reg_val_we(reg_val_we),
+        .reg_val_di(mem_wdata),
+        .reg_val_do(counter_timer_reg_val_do),
+        .reg_cfg_we(reg_cfg_we),
+        .reg_cfg_di(mem_wdata),
+        .reg_cfg_do(counter_timer_reg_cfg_do),
+        .reg_dat_we(reg_dat_we),
+        .reg_dat_di(mem_wdata),
+        .reg_dat_do(counter_timer_reg_dat_do),
+	.irq_out(irq)
+   );
+
+endmodule
+
+module counter_timer (
+    input resetn,
+    input clkin,
+
+    input  [3:0]  reg_val_we,
+    input  [31:0] reg_val_di,
+    output [31:0] reg_val_do,
+
+    input 	  reg_cfg_we,
+    input  [31:0] reg_cfg_di,
+    output [31:0] reg_cfg_do,
+
+    input  [3:0]  reg_dat_we,
+    input  [31:0] reg_dat_di,
+    output [31:0] reg_dat_do,
+    output	  irq_out
+);
+
+reg [31:0] value_cur;
+reg [31:0] value_reset;
+reg	   irq_out;
+
+reg enable;	// Enable (start) the counter/timer
+reg oneshot;	// Set oneshot (1) mode or continuous (0) mode
+reg updown;	// Count up (1) or down (0)
+reg irq_ena;	// Enable interrupt on timeout
+
+// Configuration register
+
+assign reg_cfg_do = {28'd0, irq_ena, updown, oneshot, enable};
+
+always @(posedge clkin or negedge resetn) begin
+    if (resetn == 1'b0) begin
+	enable <= 1'b0;
+	oneshot <= 1'b0;
+	updown <= 1'b0;
+	irq_ena <= 1'b0;
+    end else begin
+	if (reg_cfg_we) begin
+	    enable <= reg_cfg_di[0];
+	    oneshot <= reg_cfg_di[1];
+	    updown <= reg_cfg_di[2];
+	    irq_ena <= reg_cfg_di[3];
+	end
+    end
+end
+
+// Counter/timer reset value register
+
+assign reg_val_do = value_reset;
+
+always @(posedge clkin or negedge resetn) begin
+    if (resetn == 1'b0) begin
+	value_reset <= 32'd0;
+    end else begin
+	if (reg_val_we[3]) value_reset <= reg_val_di[31:24];
+	if (reg_val_we[2]) value_reset <= reg_val_di[23:16];
+	if (reg_val_we[1]) value_reset <= reg_val_di[15:8];
+	if (reg_val_we[0]) value_reset <= reg_val_di[7:0];
+    end
+end
+
+assign reg_dat_do = value_cur;
+
+// Counter/timer current value register and timer implementation
+
+always @(posedge clkin or negedge resetn) begin
+    if (resetn == 1'b0) begin
+	value_cur <= 32'd0;	
+	irq_out <= 1'b0;
+    end else begin
+	if (reg_dat_we != 4'b0000) begin
+	    if (reg_dat_we[3] == 1'b1) value_cur[31:24] <= reg_dat_di[31:24];
+	    if (reg_dat_we[2] == 1'b1) value_cur[23:16] <= reg_dat_di[23:16];
+	    if (reg_dat_we[1] == 1'b1) value_cur[15:8] <= reg_dat_di[15:8];
+	    if (reg_dat_we[0] == 1'b1) value_cur[7:0] <= reg_dat_di[7:0];
+	end else if (enable == 1'b1) begin
+	    if (updown == 1'b1) begin
+		if (value_cur == value_reset) begin
+		    if (oneshot != 1'b1) begin
+			value_cur <= 32'd0;
+		    end
+		    irq_out <= irq_ena;
+		end else begin
+		    value_cur <= value_cur + 1;	// count up
+		    irq_out <= 1'b0;
+		end
+	    end else begin
+		if (value_cur == 32'd0) begin
+		    if (oneshot != 1'b1) begin
+			value_cur <= value_reset;
+		    end
+		    irq_out <= irq_ena;
+		end else begin
+		    value_cur <= value_cur - 1;	// count down
+		    irq_out <= 1'b0;
+		end
+	    end
+	end else begin
+	    irq_out <= 1'b0;
+	end
+    end
+end
+
+endmodule
diff --git a/verilog/rtl/digital_pll.v b/verilog/rtl/digital_pll.v
index 0f22108..9754180 100644
--- a/verilog/rtl/digital_pll.v
+++ b/verilog/rtl/digital_pll.v
@@ -9,14 +9,14 @@
     vdd,
     vss,
 `endif
-    reset, extclk_sel, osc, clockc, clockp, clockd, div, sel, dco, ext_trim);
+    resetb, extclk_sel, osc, clockc, clockp, clockd, div, sel, dco, ext_trim);
 
 `ifdef LVS
     input vdd;
     input vss;
 `endif
 
-    input	reset;		// Sense positive reset
+    input	resetb;		// Sense negative reset
     input	extclk_sel;	// External clock select (acts as 2nd reset)
     input	osc;		// Input oscillator to match
     input [4:0]	div;		// PLL feedback division ratio
@@ -31,7 +31,8 @@
     wire [25:0] itrim;		// Internally generated trim bits
     wire [25:0] otrim;		// Trim bits applied to the ring oscillator
     wire [3:0]	nint;		// Internal divided down clocks
-    wire	resetb;		// Internal positivie sense reset
+    wire	reset;		// Internal positive sense reset
+    wire	resetbb;	// Internal buffered negative sense reset
     wire	creset;		// Controller reset
     wire	ireset;		// Internal reset (external reset OR extclk_sel)
 
@@ -42,17 +43,17 @@
     assign creset = (dco == 1'b0) ? ireset : 1'b1;
 
     ring_osc2x13 ringosc (
-    .reset(ireset),
-    .trim(itrim),
-    .clockp(clockp)
+        .reset(ireset),
+        .trim(itrim),
+        .clockp(clockp)
     );
 
     digital_pll_controller pll_control (
-    .reset(creset),
-    .clock(clockp[0]),
-    .osc(osc),
-    .div(div),
-    .trim(otrim)
+        .reset(creset),
+        .clock(clockp[0]),
+        .osc(osc),
+        .div(div),
+        .trim(otrim)
     );
 
     // Select core clock output
@@ -62,11 +63,11 @@
             (sel == 3'b011) ? clockd[2] :
                           clockd[3];
 
-    // Derive negative-sense reset from the input positive-sense reset
+    // Derive internal negative-sense reset from the input negative-sense reset
 
-    sky130_fd_sc_hd__inv_4 irb (
-    .A(reset),
-    .Y(resetb)
+    sky130_fd_sc_hd__buf_8 irbb (
+        .A(resetb),
+        .X(resetbb)
     );
 
     // Create divided down clocks.  The inverted output only comes
@@ -74,34 +75,34 @@
     // reset has to be inverted as well.
  
     sky130_fd_sc_hd__dfrbp_1 idiv2 (
-    .CLK(clockp[1]),
-    .D(clockd[0]),
-    .Q(nint[0]),
-    .Q_N(clockd[0]),
-    .RESET_B(resetb)
+        .CLK(clockp[1]),
+        .D(clockd[0]),
+        .Q(nint[0]),
+        .Q_N(clockd[0]),
+        .RESET_B(resetbb)
     );
 
     sky130_fd_sc_hd__dfrbp_1 idiv4 (
-    .CLK(clockd[0]),
-    .D(clockd[1]),
-    .Q(nint[1]),
-    .Q_N(clockd[1]),
-    .RESET_B(resetb)
+        .CLK(clockd[0]),
+        .D(clockd[1]),
+        .Q(nint[1]),
+        .Q_N(clockd[1]),
+        .RESET_B(resetbb)
     );
 
     sky130_fd_sc_hd__dfrbp_1 idiv8 (
-    .CLK(clockd[1]),
-    .D(clockd[2]),
-    .Q(nint[2]),
-    .Q_N(clockd[2]),
-    .RESET_B(resetb)
+        .CLK(clockd[1]),
+        .D(clockd[2]),
+        .Q(nint[2]),
+        .Q_N(clockd[2]),
+        .RESET_B(resetbb)
     );
 
     sky130_fd_sc_hd__dfrbp_1 idiv16 (
-    .CLK(clockd[2]),
-    .D(clockd[3]),
-    .Q(nint[3]),
-    .Q_N(clockd[3]),
-    .RESET_B(resetb)
+        .CLK(clockd[2]),
+        .D(clockd[3]),
+        .Q(nint[3]),
+        .Q_N(clockd[3]),
+        .RESET_B(resetbb)
     );
 endmodule
diff --git a/verilog/rtl/gpio_control_block.v b/verilog/rtl/gpio_control_block.v
new file mode 100644
index 0000000..1575841
--- /dev/null
+++ b/verilog/rtl/gpio_control_block.v
@@ -0,0 +1,200 @@
+/* 
+ *---------------------------------------------------------------------
+ * This block interfaces between the sky130_fd_io GPIOv2 pad, the
+ * caravel management area, and the user project area.
+ *
+ * The management area has ultimate control over the setting of the
+ * pad, and can modify all core-voltage inputs to the pad and monitor
+ * the output.
+ *
+ * The user project will rely on the management SoC startup program
+ * to configure each I/O pad to a fixed configuration except for
+ * the output enable which remains under user control.
+ *
+ * This module is bit-sliced.  Instantiate once for each GPIO pad.
+ *
+ *---------------------------------------------------------------------
+ */
+
+/*
+ *---------------------------------------------------------------------
+ *
+ * This module instantiates a shift register chain that passes through
+ * each gpio cell.  These are connected end-to-end around the padframe
+ * periphery.  The purpose is to avoid a massive number of control
+ * wires between the digital core and I/O, passing through the user area.
+ *
+ * See mprj_ctrl.v for the module that registers the data for each
+ * I/O and drives the input to the shift register.
+ *
+ *---------------------------------------------------------------------
+ */
+
+module gpio_control_block #(
+    parameter PAD_CTRL_BITS = 13
+) (
+    // Management Soc-facing signals
+    input  	 resetn,		// Global reset
+    input  	 serial_clock,
+
+    inout        mgmt_gpio_io,		// Management to/from pad
+
+    // Serial data chain for pad configuration
+    input  	 serial_data_in,
+    output 	 serial_data_out,
+
+    // User-facing signals
+    input        user_gpio_out,		// User space to pad
+    input        user_gpio_outenb,	// Output enable (user)
+    output	 user_gpio_in,		// Pad to user space
+
+    // Pad-facing signals (Pad GPIOv2)
+    output	 pad_gpio_holdover,
+    output	 pad_gpio_slow_sel,
+    output	 pad_gpio_vtrip_sel,
+    output       pad_gpio_inenb,
+    output       pad_gpio_ib_mode_sel,
+    output	 pad_gpio_ana_en,
+    output	 pad_gpio_ana_sel,
+    output	 pad_gpio_ana_pol,
+    output [2:0] pad_gpio_dm,
+    output       pad_gpio_outenb,
+    output	 pad_gpio_out,
+    input	 pad_gpio_in
+);
+
+    /* Parameters defining the bit offset of each function in the chain */
+    localparam MGMT_EN = 0;
+    localparam OEB = 1;
+    localparam HLDH = 2;
+    localparam ENH  = 3;
+    localparam INP_DIS = 4;
+    localparam MOD_SEL = 5;
+    localparam AN_EN = 6;
+    localparam AN_SEL = 7;
+    localparam AN_POL = 8;
+    localparam SLOW = 9;
+    localparam TRIP = 10;
+    localparam DM = 11;
+
+    /* Internally registered signals */
+    reg	 	mgmt_ena;		// Enable management SoC to access pad
+    reg	 	gpio_holdover;
+    reg	 	gpio_slow_sel;
+    reg	  	gpio_vtrip_sel;
+    reg  	gpio_inenb;
+    reg	 	gpio_ib_mode_sel;
+    reg  	gpio_outenb;
+    reg [2:0] 	gpio_dm;
+    reg	 	gpio_ana_en;
+    reg	 	gpio_ana_sel;
+    reg	 	gpio_ana_pol;
+
+    /* Derived output values */
+    wire	pad_gpio_holdover;
+    wire	pad_gpio_slow_sel;
+    wire	pad_gpio_vtrip_sel;
+    wire      	pad_gpio_inenb;
+    wire       	pad_gpio_ib_mode_sel;
+    wire	pad_gpio_ana_en;
+    wire	pad_gpio_ana_sel;
+    wire	pad_gpio_ana_pol;
+    wire [2:0]  pad_gpio_dm;
+    wire        pad_gpio_outenb;
+    wire	pad_gpio_out;
+    wire	pad_gpio_in;
+
+    /* Serial shift for the above (latched) values */
+    reg [PAD_CTRL_BITS-1:0] shift_register;
+
+    /* Utilize reset and clock to encode a load operation */
+    wire load_data;
+    wire int_reset;
+
+    /* Create internal reset and load signals from input reset and clock */
+    assign serial_data_out = shift_register[PAD_CTRL_BITS-1]; 
+    assign int_reset = (~resetn) & (~serial_clock);
+    assign load_data = (~resetn) & serial_clock;
+
+    always @(posedge serial_clock or posedge int_reset) begin
+	if (int_reset == 1'b1) begin
+	    /* Clear shift register */
+	    shift_register <= 'd0;
+	end else begin
+	    /* Shift data in */
+	    shift_register <= {shift_register[PAD_CTRL_BITS-2:0], serial_data_in};
+	end
+    end
+
+    always @(posedge load_data or posedge int_reset) begin
+	if (int_reset == 1'b1) begin
+	    /* Initial state on reset:  Pad set to management input */
+	    mgmt_ena <= 1'b0;
+	    gpio_holdover <= 1'b0;	// All signals latched in hold mode
+	    gpio_slow_sel <= 1'b0;	// Fast slew rate
+	    gpio_vtrip_sel <= 1'b0;	// CMOS mode
+            gpio_ib_mode_sel <= 1'b0;	// CMOS mode
+	    gpio_inenb <= 1'b0;		// Input enabled
+	    gpio_outenb <= 1'b1;	// Output disabled
+	    gpio_dm <= 3'b001;		// Configured as input only
+	    gpio_ana_en <= 1'b0;	// Digital enabled
+	    gpio_ana_sel <= 1'b0;	// Don't-care when gpio_ana_en = 0
+	    gpio_ana_pol <= 1'b0;	// Don't-care when gpio_ana_en = 0
+	end else begin
+	    /* Load data */
+	    mgmt_ena 	     <= shift_register[MGMT_EN];
+	    gpio_outenb      <= shift_register[OEB];
+	    gpio_holdover    <= shift_register[HLDH]; 
+	    gpio_inenb 	     <= shift_register[INP_DIS];
+	    gpio_ib_mode_sel <= shift_register[MOD_SEL];
+	    gpio_ana_en      <= shift_register[AN_EN];
+	    gpio_ana_sel     <= shift_register[AN_SEL];
+	    gpio_ana_pol     <= shift_register[AN_POL];
+	    gpio_slow_sel    <= shift_register[SLOW];
+	    gpio_vtrip_sel   <= shift_register[TRIP];
+	    gpio_dm 	     <= shift_register[DM+2:DM];
+
+	end
+    end
+
+    /* These pad configuration signals are static and do not change	*/
+    /* after setup.							*/
+
+    assign pad_gpio_holdover 	= gpio_holdover;
+    assign pad_gpio_slow_sel 	= gpio_slow_sel;
+    assign pad_gpio_vtrip_sel	= gpio_vtrip_sel;
+    assign pad_gpio_ib_mode_sel	= gpio_ib_mode_sel;
+    assign pad_gpio_ana_en	= gpio_ana_en;
+    assign pad_gpio_ana_sel	= gpio_ana_sel;
+    assign pad_gpio_ana_pol	= gpio_ana_pol;
+    assign pad_gpio_dm		= gpio_dm;
+    assign pad_gpio_inenb 	= gpio_inenb;
+
+    /* Implement pad control behavior depending on state of mgmt_ena */
+
+    /* If pad is configured for input and dm[2:1] is 01, then pad is	*/
+    /* configured as pull-up or pull-down depending on dm[0], and to	*/
+    /* set the pullup or pulldown condition, the pad output bit must	*/
+    /* be set to the opposite state of dm[0].				*/
+    /* 		dm[0] = 0 is pull-down;  dm[0] = 1 is pull-up.		*/
+    /* Otherwise, the output 
+
+    assign pad_gpio_out = (mgmt_ena) ? mgmt_gpio_io :
+		(((gpio_dm[2:1] == 2'b01) && (gpio_inenb == 1'b0)) ?
+			~gpio_dm[0] : user_gpio_out);
+
+    /* When under user control, gpio_outenb = 1 means that the pad is	*/
+    /* configured as input, and the user outenb is unused.  Otherwise,	*/
+    /* the pad outenb signal is controlled by the user.			*/
+
+    assign pad_gpio_outenb = (mgmt_ena) ? gpio_outenb : 
+		((gpio_outenb == 1) ? 1'b1 : user_gpio_outenb);
+
+    /* User gpio_in is grounded when the management controls the pad	*/
+    assign user_gpio_in = (mgmt_ena) ? 1'b0 : pad_gpio_in;
+
+    /* Management I/O line is set from the pad when the pad is		*/
+    /* configured for input.						*/
+    assign mgmt_gpio_io = (gpio_inenb == 0) ? pad_gpio_in : 1'bz;
+
+endmodule
diff --git a/verilog/rtl/gpio_wb.v b/verilog/rtl/gpio_wb.v
index 9c55047..e4e92e9 100644
--- a/verilog/rtl/gpio_wb.v
+++ b/verilog/rtl/gpio_wb.v
@@ -18,11 +18,11 @@
     output [31:0] wb_dat_o,
     output wb_ack_o,
 
-    input [1:0] gpio_in_pad,
-    output [1:0] gpio,
-    output [1:0] gpio_oeb,
-    output [1:0] gpio_pu,
-    output [1:0] gpio_pd
+    input  gpio_in_pad,
+    output gpio,
+    output gpio_oeb,
+    output gpio_pu,
+    output gpio_pd
 );
 
     wire resetn;
@@ -50,7 +50,7 @@
 
         .iomem_addr(wb_adr_i),
         .iomem_valid(valid),
-        .iomem_wstrb(iomem_we),
+        .iomem_wstrb(iomem_we[0]),
         .iomem_wdata(wb_dat_i),
         .iomem_rdata(wb_dat_o),
         .iomem_ready(ready),
@@ -73,25 +73,25 @@
     input clk,
     input resetn,
 
-    input [1:0] gpio_in_pad,
+    input gpio_in_pad,
 
     input [31:0] iomem_addr,
     input iomem_valid,
-    input [3:0] iomem_wstrb,
+    input iomem_wstrb,
     input [31:0] iomem_wdata,
     output reg [31:0] iomem_rdata,
     output reg iomem_ready,
 
-    output [1:0] gpio,
-    output [1:0] gpio_oeb,
-    output [1:0] gpio_pu,
-    output [1:0] gpio_pd
+    output gpio,
+    output gpio_oeb,
+    output gpio_pu,
+    output gpio_pd
 );
 
-    reg [1:0] gpio;		// GPIO output data
-    reg [1:0] gpio_pu;		// GPIO pull-up enable
-    reg [1:0] gpio_pd;		// GPIO pull-down enable
-    reg [1:0] gpio_oeb;    // GPIO output enable (sense negative)
+    reg gpio;		// GPIO output data
+    reg gpio_pu;		// GPIO pull-up enable
+    reg gpio_pd;		// GPIO pull-down enable
+    reg gpio_oeb;    // GPIO output enable (sense negative)
     
     wire gpio_sel;
     wire gpio_oeb_sel;
@@ -115,24 +115,20 @@
                 iomem_ready <= 1'b 1;
                 
                 if (gpio_sel) begin
-                    iomem_rdata <= {14'd0, gpio, 14'd0, gpio_in_pad};
-
-                    if (iomem_wstrb[0]) gpio[ 1: 0] <= iomem_wdata[ 1: 0];
+                    iomem_rdata <= {30'd0, gpio, gpio_in_pad};
+                    if (iomem_wstrb) gpio <= iomem_wdata[0];
 
                 end else if (gpio_oeb_sel) begin
-                    iomem_rdata <= {30'd0, gpio_oeb};
-
-                    if (iomem_wstrb[0]) gpio_oeb[ 1: 0] <= iomem_wdata[ 1: 0];
+                    iomem_rdata <= {31'd0, gpio_oeb};
+                    if (iomem_wstrb) gpio_oeb <= iomem_wdata[0];
 
                 end else if (gpio_pu_sel) begin
-                    iomem_rdata <= {30'd0, gpio_pu};
-
-                    if (iomem_wstrb[0]) gpio_pu[ 1: 0] <= iomem_wdata[ 1: 0];
+                    iomem_rdata <= {31'd0, gpio_pu};
+                    if (iomem_wstrb) gpio_pu <= iomem_wdata[0];
 
                 end else if (gpio_pd_sel) begin
-                    iomem_rdata <= {30'd0, gpio_pd};          
-
-                    if (iomem_wstrb[0]) gpio_pd[ 1: 0] <= iomem_wdata[ 1: 0];
+                    iomem_rdata <= {31'd0, gpio_pd};          
+                    if (iomem_wstrb) gpio_pd <= iomem_wdata[0];
 
                 end
 
diff --git a/verilog/rtl/mgmt_core.v b/verilog/rtl/mgmt_core.v
index ed0c79d..26e7e55 100644
--- a/verilog/rtl/mgmt_core.v
+++ b/verilog/rtl/mgmt_core.v
@@ -1,21 +1,15 @@
 module mgmt_core(
 `ifdef LVS
-	inout vdd3v3,
 	inout vdd1v8,	   
 	inout vss,
 `endif
-	input ext_clk,
-	output[ 1:0] gpio_out_pad,		// Connect to out on gpio pad
-	input  [1:0] gpio_in_pad,		// Connect to in on gpio pad
-	output [1:0] gpio_mode0_pad,		// Connect to dm[0] on gpio pad
-	output [1:0] gpio_mode1_pad,		// Connect to dm[2] on gpio pad
-	output [1:0] gpio_outenb_pad,		// Connect to oe_n on gpio pad
-	output [1:0] gpio_inenb_pad,		// Connect to inp_dis on gpio pad
-	input [7:0]   spi_ro_config,
-	output ser_tx,
-	input  ser_rx,
-	// IRQ
-	input  irq_pin,		        // dedicated IRQ pin
+	// GPIO (dedicated pad)
+	output gpio_out_pad,		// Connect to out on gpio pad
+	input  gpio_in_pad,		// Connect to in on gpio pad
+	output gpio_mode0_pad,		// Connect to dm[0] on gpio pad
+	output gpio_mode1_pad,		// Connect to dm[2] on gpio pad
+	output gpio_outenb_pad,		// Connect to oe_n on gpio pad
+	output gpio_inenb_pad,		// Connect to inp_dis on gpio pad
 	// Flash memory control (SPI master)
 	output flash_csb,
 	output flash_clk,
@@ -23,44 +17,29 @@
 	output flash_clk_oeb,
 	output flash_io0_oeb,
 	output flash_io1_oeb,
-	output flash_io2_oeb,
-	output flash_io3_oeb,
 	output flash_csb_ieb,
 	output flash_clk_ieb,
 	output flash_io0_ieb,
 	output flash_io1_ieb,
-	output flash_io2_ieb,
-	output flash_io3_ieb,
 	output flash_io0_do,
 	output flash_io1_do,
-	output flash_io2_do,
-	output flash_io3_do,
 	input flash_io0_di,
 	input flash_io1_di,
-	input flash_io2_di,
-	input flash_io3_di,
-	output por,
-	input porb_l,
+	// Master reset
+	input porb,
+	// Clocking
 	input clock,
+	input ext_clk,
 	output pll_clk16,
-	input SDI_core,
-	input CSB_core,
-	output SDO_core,
-	output SDO_enb,
 	// LA signals
     	input  [127:0] la_input,           	// From Mega-Project to cpu
     	output [127:0] la_output,          	// From CPU to Mega-Project
     	output [127:0] la_oen,              // LA output enable  
 	// Mega-Project Control Signals
-	output [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n,
-    	output [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n,
-	output [`MPRJ_IO_PADS-1:0] mprj_io_enh,
-    	output [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
-    	output [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
-    	output [`MPRJ_IO_PADS-1:0] mprj_io_analog_en,
-    	output [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
-    	output [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
-    	output [`MPRJ_IO_PADS*3-1:0] mprj_io_dm,
+	inout [`MPRJ_IO_PADS-1:0] mgmt_io_data,
+	output mprj_io_loader_resetn,
+	output mprj_io_loader_clock,
+	output mprj_io_loader_data,
 	// WB MI A (Mega project)
     	input mprj_ack_i,
 	input [31:0] mprj_dat_i,
@@ -80,15 +59,23 @@
     	output [31:0] xbar_adr_o,
     	output [31:0] xbar_dat_o,
 
-    	output striVe_clk,
-    	output striVe_rstn
+    	output core_clk,
+    	output core_rstn,
+
+	// Metal programmed user ID / mask revision vector
+	input [31:0] mask_rev
 );
     	wire ext_clk_sel;
     	wire ext_clk;
     	wire pll_clk;
     	wire ext_reset;
 
-	striVe_clkrst clkrst(
+	wire spi_sck;
+	wire spi_csb;
+	wire spi_sdi;
+	wire spi_sdo;
+
+	caravel_clkrst clkrst(
 	`ifdef LVS
 		.vdd1v8(vdd1v8),
 		.vss(vss),
@@ -96,29 +83,28 @@
 		.ext_clk_sel(ext_clk_sel),
 		.ext_clk(ext_clk),
 		.pll_clk(pll_clk),
-		.reset(por), 
+		.resetb(porb), 
 		.ext_reset(ext_reset),
-		.clk(striVe_clk),
-		.resetn(striVe_rstn)
+		.core_clk(core_clk),
+		.resetb_sync(core_rstn)
 	);
 
-    	// SoC core
-    	wire [9:0] adc0_data_core;
-    	wire [1:0] adc0_inputsrc_core;
-    	wire [9:0] adc1_data_core;
-    	wire [1:0] adc1_inputsrc_core;
-    	wire [9:0] dac_value_core;
-    	wire [1:0] comp_ninputsrc_core;
-    	wire [1:0] comp_pinputsrc_core;
-    	wire [7:0] spi_ro_config_core;
+	// The following functions are connected to specific user project
+	// area pins, when under control of the management area (during
+	// startup, and when not otherwise programmed for the user project).
 
-    	// HKSPI 
-	wire [11:0] spi_ro_mfgr_id;
-    	wire [7:0] spi_ro_prod_id;
-    	wire [3:0] spi_ro_mask_rev;
-	wire [2:0] spi_ro_pll_sel;
-    	wire [4:0] spi_ro_pll_div;
-    	wire [25:0] spi_ro_pll_trim;
+	// JTAG      = mgmt_io_data[0]       (inout)
+	// SDO       = mgmt_io_data[1]       (output)	(shared with SPI master)
+	// SDI       = mgmt_io_data[2]       (input)	(shared with SPI master)
+	// CSB       = mgmt_io_data[3]       (input)	(shared with SPI master)
+	// SCK       = mgmt_io_data[4]       (input)	(shared with SPI master)
+	// ser_rx    = mgmt_io_data[5]       (input)
+	// ser_tx    = mgmt_io_data[6]       (output)
+	// irq       = mgmt_io_data[7]       (input)
+	// flash_csb = mgmt_io_data[8]	     (output)	(user area flash)
+	// flash_sck = mgmt_io_data[9]	     (output)	(user area flash)
+	// flash_io0 = mgmt_io_data[10]	     (output)	(user area flash)
+	// flash_io1 = mgmt_io_data[11]	     (input)	(user area flash)
 
 	mgmt_soc soc (
     	    `ifdef LVS
@@ -128,27 +114,26 @@
         	.pll_clk(pll_clk),
 		.ext_clk(ext_clk),
 		.ext_clk_sel(ext_clk_sel),
-		.clk(striVe_clk),
-		.resetn(striVe_rstn),
+		.clk(core_clk),
+		.resetn(core_rstn),
+		.trap(trap),
+		// GPIO
 		.gpio_out_pad(gpio_out_pad),
 		.gpio_in_pad(gpio_in_pad),
 		.gpio_mode0_pad(gpio_mode0_pad),
 		.gpio_mode1_pad(gpio_mode1_pad),
 		.gpio_outenb_pad(gpio_outenb_pad),
 		.gpio_inenb_pad(gpio_inenb_pad),
-		.spi_ro_config(spi_ro_config),
-		.spi_ro_pll_dco_ena(spi_ro_pll_dco_ena),
-		.spi_ro_pll_div(spi_ro_pll_div),
-		.spi_ro_pll_sel(spi_ro_pll_sel),
-		.spi_ro_pll_trim(spi_ro_pll_trim),
-		.spi_ro_mfgr_id(spi_ro_mfgr_id),
-		.spi_ro_prod_id(spi_ro_prod_id),
-		.spi_ro_mask_rev(spi_ro_mask_rev),
-		.ser_tx(ser_tx),
-		.ser_rx(ser_rx),
-		.irq_pin(irq_pin),
+		// UART
+		.ser_tx(mgmt_io_data[6]),
+		.ser_rx(mgmt_io_data[5]),
+		.irq_pin(mgmt_io_data[7]),
 		.irq_spi(irq_spi),
-		.trap(trap),
+		// SPI master
+		.spi_csb(spi_csb),
+		.spi_sck(spi_sck),
+		.spi_sdi(spi_sdi),
+		.spi_sdo(spi_sdo),
 		// Flash
 		.flash_csb(flash_csb),
 		.flash_clk(flash_clk),
@@ -172,20 +157,22 @@
 		.flash_io1_di(flash_io1_di),
 		.flash_io2_di(flash_io2_di),
 		.flash_io3_di(flash_io3_di),
+		// SPI pass-through to/from SPI flash controller
+		.pass_thru_mgmt(pass_thru_reset),
+		.pass_thru_mgmt_csb(pass_thru_mgmt_csb),
+		.pass_thru_mgmt_sck(pass_thru_mgmt_sck),
+		.pass_thru_mgmt_sdi(pass_thru_mgmt_sdi),
+		.pass_thru_mgmt_sdo(pass_thru_mgmt_sdo),
 		// Logic Analyzer
 		.la_input(la_input),
 		.la_output(la_output),
 		.la_oen(la_oen),
-		// Mega-Project Control
-		.mprj_io_oeb_n(mprj_io_oeb_n),
-        	.mprj_io_hldh_n(mprj_io_hldh_n),
-		.mprj_io_enh(mprj_io_enh),
-        	.mprj_io_inp_dis(mprj_io_inp_dis),
-        	.mprj_io_ib_mode_sel(mprj_io_ib_mode_sel),
-        	.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),
+		// Mega-Project I/O Configuration
+		.mprj_io_loader_resetn(mprj_io_loader_resetn),
+		.mprj_io_loader_clock(mprj_io_loader_clock),
+		.mprj_io_loader_data(mprj_io_loader_data),
+		// I/O data
+		.mgmt_io_data(mgmt_io_data),
 		// Mega Project Slave ports (WB MI A)
 		.mprj_cyc_o(mprj_cyc_o),
 		.mprj_stb_o(mprj_stb_o),
@@ -211,58 +198,65 @@
 		.vdd(vdd1v8),
 		.vss(vss),
 	    `endif
-		.reset(por),
+		.resetb(porb),
 		.extclk_sel(ext_clk_sel),
-		.osc(xi),
+		.osc(clock),
 		.clockc(pll_clk),
 		.clockp({pll_clk_core0, pll_clk_core90}),
 		.clockd({pll_clk2, pll_clk4, pll_clk8, pll_clk16}),
-		.div(spi_ro_pll_div),
-		.sel(spi_ro_pll_sel),
-		.dco(spi_ro_pll_dco_ena),
-		.ext_trim(spi_ro_pll_trim)
+		.div(spi_pll_div),
+		.sel(spi_pll_sel),
+		.dco(spi_pll_dco_ena),
+		.ext_trim(spi_pll_trim)
     	);
 
-	// For the mask revision input, use an array of digital constant logic cells
-	wire [3:0] mask_rev;
-    	wire [3:0] no_connect;
 
-    	sky130_fd_sc_hd__conb_1 mask_rev_value [3:0] (
-	    `ifdef LVS
-        	.vpwr(vdd1v8),
-        	.vpb(vdd1v8),
-        	.vnb(vss),
-        	.vgnd(vss),
-	    `endif
-        	.HI({no_connect[3:1], mask_rev[0]}),
-        	.LO({mask_rev[3:1], no_connect[0]})
-    	);
+	// Housekeeping SPI vectors
+	wire [4:0]  spi_pll_div;
+	wire [2:0]  spi_pll_sel;
+	wire [25:0] spi_pll_trim;
 
-	// Housekeeping SPI at 3.3V.
-    	striVe_spi housekeeping (
+	// Housekeeping SPI (SPI slave module)
+	caravel_spi housekeeping (
 	    `ifdef LVS
-		.vdd(vdd3v3),
+		.vdd(vdd1v8),
 		.vss(vss),
 	    `endif
-		.RSTB(porb_l),
-		.SCK(spi_sck),
-		.SDI(SDI_core),
-		.CSB(CSB_core),
-		.SDO(SDO_core),
-		.sdo_enb(SDO_enb),
-		.pll_dco_ena(spi_ro_pll_dco_ena),
-		.pll_sel(spi_ro_pll_sel),
-		.pll_div(spi_ro_pll_div),
-        	.pll_trim(spi_ro_pll_trim),
-		.pll_bypass(ext_clk_sel),
-		.irq(irq_spi),
-		.RST(por),
-		.reset(ext_reset),
-		.trap(trap),
-        	.mfgr_id(spi_ro_mfgr_id),
-		.prod_id(spi_ro_prod_id),
-		.mask_rev_in(mask_rev),
-		.mask_rev(spi_ro_mask_rev)
-    	);
+	    .RSTB(porb),
+	    .SCK(mgmt_io_data[4]),
+	    .SDI(mgmt_io_data[2]),
+	    .CSB(mgmt_io_data[3]),
+	    .SDO(mgmt_io_data[1]),
+	     // Note that the Soc SPI master shares pins with the housekeeping
+	     // SPI but with SDI and SDO reversed, such that the CPU can
+	     // access the housekeeping SPI registers directly if the
+	     // SPI master is enabled.
+	    .mgmt_sck(mgmt_io_data[4]),
+	    .mgmt_sdi(mgmt_io_data[1]),
+	    .mgmt_csb(mgmt_io_data[3]),
+	    .mgmt_sdo(mgmt_io_data[2]),
+	     // NOTE:  SDO enable is not accessible in the current configuration.
+	     // May want to have a different type of GPIO control for the several
+	     // pins like SPI SDO that could benefit from it.
+	    .sdo_enb(),
+	    .pll_dco_ena(spi_pll_dco_ena),
+	    .pll_sel(spi_pll_sel),
+	    .pll_div(spi_pll_div),
+            .pll_trim(spi_pll_trim),
+	    .pll_bypass(ext_clk_sel),
+	    .irq(irq_spi),
+	    .reset(ext_reset),
+	    .trap(trap),
+	    .mask_rev_in(mask_rev),
+    	    .pass_thru_reset(pass_thru_reset),
+    	    .pass_thru_mgmt_sck(pass_thru_mgmt_sck),
+    	    .pass_thru_mgmt_csb(pass_thru_mgmt_csb),
+    	    .pass_thru_mgmt_sdi(pass_thru_mgmt_sdi),
+    	    .pass_thru_mgmt_sdo(pass_thru_mgmt_sdo),
+    	    .pass_thru_user_sck(mgmt_io_data[9]),
+    	    .pass_thru_user_csb(mgmt_io_data[8]),
+    	    .pass_thru_user_sdi(mgmt_io_data[10]),
+    	    .pass_thru_user_sdo(mgmt_io_data[11])
+	);
 
 endmodule
diff --git a/verilog/rtl/mgmt_soc.v b/verilog/rtl/mgmt_soc.v
index ab1ff53..4a3b585 100644
--- a/verilog/rtl/mgmt_soc.v
+++ b/verilog/rtl/mgmt_soc.v
@@ -24,21 +24,23 @@
  */
 
 `ifdef PICORV32_V
-`error "openstriVe_soc.v must be read before picorv32.v!"
+`error "mgmt_soc.v must be read before picorv32.v!"
 `endif
 
-`define PICORV32_REGS openstriVe_soc_regs
+`define PICORV32_REGS mgmt_soc_regs
 
 `include "picorv32.v"
 `include "spimemio.v"
 `include "simpleuart.v"
+`include "simple_spi_master.v"
+`include "counter_timer.v"
 `include "wb_intercon.v"
 `include "mem_wb.v"
 `include "gpio_wb.v"
-`include "spi_sysctrl.v"
 `include "sysctrl.v"
 `include "la_wb.v"
 `include "mprj_ctrl.v"
+`include "convert_gpio_sigs.v"
 
 module mgmt_soc (
 `ifdef LVS
@@ -52,40 +54,37 @@
     input clk,
     input resetn,
 
-    // Memory mapped I/O signals
-    output [1:0] gpio_out_pad,		// Connect to out on gpio pad
-    input  [1:0] gpio_in_pad,		// Connect to in on gpio pad
-    output [1:0] gpio_mode0_pad,	// Connect to dm[0] on gpio pad
-    output [1:0] gpio_mode1_pad,	// Connect to dm[2] on gpio pad
-    output [1:0] gpio_outenb_pad,	// Connect to oe_n on gpio pad
-    output [1:0] gpio_inenb_pad,	// Connect to inp_dis on gpio pad
+    // Trap state from CPU
+    output trap,
+
+    // GPIO (one pin)
+    output gpio_out_pad,	// Connect to out on gpio pad
+    input  gpio_in_pad,		// Connect to in on gpio pad
+    output gpio_mode0_pad,	// Connect to dm[0] on gpio pad
+    output gpio_mode1_pad,	// Connect to dm[2] on gpio pad
+    output gpio_outenb_pad,	// Connect to oe_n on gpio pad
+    output gpio_inenb_pad,	// Connect to inp_dis on gpio pad
 
     // LA signals
     input  [127:0] la_input,           	// From Mega-Project to cpu
     output [127:0] la_output,          	// From CPU to Mega-Project
     output [127:0] la_oen,              // LA output enable (active low) 
 
-    // Mega-Project Control
-    output [MPRJ_IO_PADS-1:0] mprj_io_oeb_n,
-    output [MPRJ_IO_PADS-1:0] mprj_io_hldh_n,
-    output [MPRJ_IO_PADS-1:0] mprj_io_enh,
-    output [MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
-    output [MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
-    output [MPRJ_IO_PADS-1:0] mprj_io_analog_en,
-    output [MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
-    output [MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
-    output [MPRJ_IO_PADS*3-1:0] mprj_io_dm,
+    // Mega-Project I/O Configuration (serial load)
+    output mprj_io_loader_resetn,
+    output mprj_io_loader_clock,
+    output mprj_io_loader_data,
 
-    input [7:0]   spi_ro_config,
-    input 	  spi_ro_pll_dco_ena,
-    input [4:0]   spi_ro_pll_div,
-    input [2:0]   spi_ro_pll_sel,
-    input [25:0]  spi_ro_pll_trim,
+    // Mega-Project pad data (when management SoC controls the pad)
+    inout [MPRJ_IO_PADS-1:0] mgmt_io_data,
 
-    input [11:0]  spi_ro_mfgr_id,
-    input [7:0]   spi_ro_prod_id,
-    input [3:0]   spi_ro_mask_rev,
+    // SPI master
+    output spi_csb,
+    output spi_sck,
+    output spi_sdo,
+    input  spi_sdi,
 
+    // UART
     output ser_tx,
     input  ser_rx,
 
@@ -93,9 +92,6 @@
     input  irq_pin,		// dedicated IRQ pin
     input  irq_spi,		// IRQ from standalone SPI
 
-    // trap
-    output trap,
-
     // Flash memory control (SPI master)
     output flash_csb,
     output flash_clk,
@@ -126,6 +122,13 @@
     input  flash_io2_di,
     input  flash_io3_di,
 
+    // SPI pass-thru mode
+    input  pass_thru_mgmt,
+    input  pass_thru_mgmt_csb,
+    input  pass_thru_mgmt_sck,
+    input  pass_thru_mgmt_sdi,
+    output pass_thru_mgmt_sdo,
+
     // WB MI A (Mega project)
     input mprj_ack_i,
     input [31:0] mprj_dat_i,
@@ -153,21 +156,37 @@
     parameter [31:0] PROGADDR_IRQ   = 32'h 0000_0000;
 
     // Slaves Base Addresses
-    parameter RAM_BASE_ADR   = 32'h 0000_0000;
-    parameter FLASH_BASE_ADR = 32'h 1000_0000;
-    parameter UART_BASE_ADR  = 32'h 2000_0000;
-    parameter GPIO_BASE_ADR  = 32'h 2100_0000;
-    parameter LA_BASE_ADR    = 32'h 2200_0000;
-    parameter MPRJ_CTRL_ADR  = 32'h 2300_0000;
-    parameter MPRJ_BASE_ADR  = 32'h 3000_0000;   // WB MI A
-    parameter SYS_BASE_ADR   = 32'h 2F00_0000;
-    parameter SPI_BASE_ADR   = 32'h 2E00_0000;
-    parameter FLASH_CTRL_CFG = 32'h 2D00_0000;
-    parameter XBAR_BASE_ADR  = 32'h 8000_0000;
+    parameter RAM_BASE_ADR    = 32'h 0000_0000;
+    parameter FLASH_BASE_ADR  = 32'h 1000_0000;
+    parameter UART_BASE_ADR   = 32'h 2000_0000;
+    parameter GPIO_BASE_ADR   = 32'h 2100_0000;
+    parameter COUNTER_TIMER0_BASE_ADR = 32'h 2110_0000;
+    parameter COUNTER_TIMER1_BASE_ADR = 32'h 2120_0000;
+    parameter SPI_MASTER_BASE_ADR = 32'h 2130_0000;
+    parameter LA_BASE_ADR     = 32'h 2200_0000;
+    parameter MPRJ_CTRL_ADR   = 32'h 2300_0000;
+    parameter MPRJ_BASE_ADR   = 32'h 3000_0000;   // WB MI A
+    parameter SYS_BASE_ADR    = 32'h 2F00_0000;
+    parameter FLASH_CTRL_CFG  = 32'h 2D00_0000;
+    parameter XBAR_BASE_ADR   = 32'h 8000_0000;
 
     // UART
     parameter UART_CLK_DIV = 8'h00;
     parameter UART_DATA    = 8'h04;
+
+    // SPI Master
+    parameter SPI_MASTER_CONFIG = 8'h00;
+    parameter SPI_MASTER_DATA = 8'h04;
+
+    // Counter-timer 0
+    parameter COUNTER_TIMER0_CONFIG = 8'h00;
+    parameter COUNTER_TIMER0_VALUE = 8'h04;
+    parameter COUNTER_TIMER0_DATA = 8'h08;
+
+    // Counter-timer 1
+    parameter COUNTER_TIMER1_CONFIG = 8'h00;
+    parameter COUNTER_TIMER1_VALUE = 8'h04;
+    parameter COUNTER_TIMER1_DATA = 8'h08;
     
     // SOC GPIO
     parameter GPIO_DATA = 8'h00;
@@ -189,31 +208,15 @@
     parameter MPRJ_IO_PADS  = 32;
     parameter MPRJ_PWR_CTRL = 32;
    
-    // SPI-Controlled Registers 
-    parameter SPI_CFG        = 8'h00;
-    parameter SPI_ENA        = 8'h04;
-    parameter SPI_PLL_CFG    = 8'h08;
-    parameter SPI_MFGR_ID    = 8'h0c;
-    parameter SPI_PROD_ID    = 8'h10;
-    parameter SPI_MASK_REV   = 8'h14;
-    parameter SPI_PLL_BYPASS = 8'h18;
-    
     // System Control Registers
-    parameter OSC_ENA       = 8'h00;
-    parameter OSC_OUT       = 8'h04;
-    parameter XTAL_OUT      = 8'h08;
     parameter PLL_OUT       = 8'h0c;
     parameter TRAP_OUT      = 8'h10;
     parameter IRQ7_SRC      = 8'h14;
-    parameter IRQ8_SRC      = 8'h18;
-    parameter OVERTEMP_ENA  = 8'h1c;
-    parameter OVERTEMP_DATA = 8'h20;
-    parameter OVERTEMP_OUT  = 8'h24;
 
     // Wishbone Interconnect 
     localparam ADR_WIDTH = 32;
     localparam DAT_WIDTH = 32;
-    localparam NUM_SLAVES = 11;
+    localparam NUM_SLAVES = 13;
 
     parameter [NUM_SLAVES*ADR_WIDTH-1: 0] ADR_MASK = {
         {8'h80, {ADR_WIDTH-8{1'b0}}},
@@ -226,17 +229,21 @@
         {8'hFF, {ADR_WIDTH-8{1'b0}}},
         {8'hFF, {ADR_WIDTH-8{1'b0}}},
         {8'hFF, {ADR_WIDTH-8{1'b0}}},
+        {8'hFF, {ADR_WIDTH-8{1'b0}}},
+        {8'hFF, {ADR_WIDTH-8{1'b0}}},
         {8'hFF, {ADR_WIDTH-8{1'b0}}}
     };
 
     parameter [NUM_SLAVES*ADR_WIDTH-1: 0] SLAVE_ADR = {
         {XBAR_BASE_ADR},
         {SYS_BASE_ADR},
-        {SPI_BASE_ADR},
         {FLASH_CTRL_CFG},
         {MPRJ_BASE_ADR},
         {MPRJ_CTRL_ADR},
         {LA_BASE_ADR},
+	{SPI_MASTER_BASE_ADR},
+	{COUNTER_TIMER1_BASE_ADR},
+	{COUNTER_TIMER0_BASE_ADR},
         {GPIO_BASE_ADR},
         {UART_BASE_ADR},
         {FLASH_BASE_ADR},
@@ -244,36 +251,31 @@
     };
 
     // memory-mapped I/O control registers
-    wire [1:0] gpio_pullup;    	// Intermediate GPIO pullup
-    wire [1:0] gpio_pulldown;  	// Intermediate GPIO pulldown
-    wire [1:0] gpio_outenb;    	// Intermediate GPIO out enable (bar)
-    wire [1:0] gpio_out;      	// Intermediate GPIO output
+    wire gpio_pullup;    	// Intermediate GPIO pullup
+    wire gpio_pulldown;  	// Intermediate GPIO pulldown
+    wire gpio_outenb;    	// Intermediate GPIO out enable (bar)
+    wire gpio_out;      	// Intermediate GPIO output
 
-    wire [1:0] gpio;		// GPIO output data
-    wire [1:0] gpio_pu;		// GPIO pull-up enable
-    wire [1:0] gpio_pd;		// GPIO pull-down enable
-    wire [1:0] gpio_oeb;	// GPIO output enable (sense negative)
+    wire gpio;		// GPIO output data
+    wire gpio_pu;	// GPIO pull-up enable
+    wire gpio_pd;	// GPIO pull-down enable
+    wire gpio_oeb;	// GPIO output enable (sense negative)
 
     wire pll_output_dest;	// PLL clock output destination
     wire trap_output_dest; 	// Trap signal output destination
     wire irq_7_inputsrc;	// IRQ 7 source
-    wire irq_8_inputsrc;	// IRQ 8 source
 
     // GPIO assignments
-    assign gpio_out[0] = (pll_output_dest == 1'b1) ? pll_clk : gpio[0];
-    assign gpio_out[1] = (trap_output_dest == 1'b1) ? trap : gpio[1];
+    assign gpio_out = (trap_output_dest == 1'b1) ? trap : gpio;
 
-    assign gpio_outenb[0] = (pll_output_dest == 1'b0)   ? gpio_oeb[0] : 1'b0;
-    assign gpio_outenb[1] = (trap_output_dest == 1'b0) ? gpio_oeb[1] : 1'b0;
+    assign gpio_outenb = (trap_output_dest == 1'b0) ? gpio_oeb : 1'b0;
 
-    assign gpio_pullup[0] = (pll_output_dest == 1'b0)   ? gpio_pu[0] : 1'b0;
-    assign gpio_pullup[1] = (trap_output_dest == 1'b0) ? gpio_pu[1] : 1'b0;
+    assign gpio_pullup = (trap_output_dest == 1'b0) ? gpio_pu : 1'b0;
 
-    assign gpio_pulldown[0] = (pll_output_dest == 1'b0)   ? gpio_pd[0] : 1'b0;
-    assign gpio_pulldown[1] = (trap_output_dest == 1'b0) ? gpio_pd[1] : 1'b0;
+    assign gpio_pulldown = (trap_output_dest == 1'b0) ? gpio_pd : 1'b0;
 
     // Convert GPIO signals to sky130_fd_io pad signals
-    convert_gpio_sigs convert_gpio_bit [1:0] (
+    convert_gpio_sigs convert_gpio_bit (
         .gpio_out(gpio_out),
         .gpio_outenb(gpio_outenb),
         .gpio_pu(gpio_pullup),
@@ -285,29 +287,16 @@
         .gpio_mode0_pad(gpio_mode0_pad)
     );
 
-    wire [7:0] mprj_io_oeb;
-    convert_gpio_sigs convert_io_bit [7:0] (
-        .gpio_out(),
-        .gpio_outenb(mprj_io_oeb),
-        .gpio_pu(mprj_io_pu),
-        .gpio_pd(mprj_io_pd),
-        .gpio_out_pad(),
-        .gpio_outenb_pad(mprj_io_outenb_pad),
-        .gpio_inenb_pad(mprj_io_inenb_pad),
-        .gpio_mode1_pad(mprj_io_mode1_pad),
-        .gpio_mode0_pad(mprj_io_mode0_pad)
-    );
-    
     reg [31:0] irq;
     wire irq_7;
-    wire irq_8;
     wire irq_stall;
     wire irq_uart;
+    wire irq_spi_master;
+    wire irq_counter_timer0;
+    wire irq_counter_timer1;
 
-    assign irq_uart = 0;
     assign irq_stall = 0;
-    assign irq_7 = (irq_7_inputsrc == 1'b1) ? gpio_in_pad[0] : 1'b0;
-    assign irq_8 = (irq_8_inputsrc == 1'b1) ? gpio_in_pad[1] : 1'b0;
+    assign irq_7 = (irq_7_inputsrc == 1'b1) ? gpio_in_pad : 1'b0;
 
     always @* begin
         irq = 0;
@@ -316,7 +305,9 @@
         irq[5] = irq_pin;
         irq[6] = irq_spi;
         irq[7] = irq_7;
-        irq[8] = irq_8;
+        irq[9] = irq_spi_master;
+        irq[10] = irq_counter_timer0;
+        irq[11] = irq_counter_timer1;
     end
 
     // Assumption : no syscon module and wb_clk is the clock coming from the chip pin ? 
@@ -394,6 +385,12 @@
         .wb_cfg_ack_o(spimemio_cfg_ack_o),
         .wb_cfg_dat_o(spimemio_cfg_dat_o),
 
+	.pass_thru(pass_thru_mgmt),
+	.pass_thru_csb(pass_thru_mgmt_csb),
+	.pass_thru_sck(pass_thru_mgmt_sck),
+	.pass_thru_sdi(pass_thru_mgmt_sdi),
+	.pass_thru_sdo(pass_thru_mgmt_sdo),
+
         .flash_csb (flash_csb),
         .flash_clk (flash_clk),
 
@@ -452,6 +449,91 @@
         .ser_rx(ser_rx)
     );
 
+    // Wishbone SPI master
+    wire spi_master_stb_i;
+    wire spi_master_ack_o;
+    wire [31:0] spi_master_dat_o;
+
+    simple_spi_master_wb #(
+        .BASE_ADR(SPI_MASTER_BASE_ADR),
+        .CONFIG(SPI_MASTER_CONFIG),
+        .DATA(SPI_MASTER_DATA)
+    ) simple_spi_master_inst (
+        // Wishbone Interface
+        .wb_clk_i(wb_clk_i),
+        .wb_rst_i(wb_rst_i),
+
+        .wb_adr_i(cpu_adr_o),      
+        .wb_dat_i(cpu_dat_o),
+        .wb_sel_i(cpu_sel_o),
+        .wb_we_i(cpu_we_o),
+        .wb_cyc_i(cpu_cyc_o),
+
+        .wb_stb_i(spi_master_stb_i),
+        .wb_ack_o(spi_master_ack_o),
+        .wb_dat_o(spi_master_dat_o),
+
+        .csb(spi_csb),
+        .sck(spi_sck),
+        .sdi(spi_sdi),
+        .sdo(spi_sdo),
+	.irq(irq_spi_master)
+    );
+
+    // Wishbone Counter-timer 0
+    wire counter_timer0_stb_i;
+    wire counter_timer0_ack_o;
+    wire [31:0] counter_timer0_dat_o;
+
+    counter_timer_wb #(
+        .BASE_ADR(COUNTER_TIMER0_BASE_ADR),
+        .CONFIG(COUNTER_TIMER0_CONFIG),
+        .VALUE(COUNTER_TIMER0_VALUE),
+        .DATA(COUNTER_TIMER0_DATA)
+    ) counter_timer_0 (
+        // Wishbone Interface
+        .wb_clk_i(wb_clk_i),
+        .wb_rst_i(wb_rst_i),
+
+        .wb_adr_i(cpu_adr_o),      
+        .wb_dat_i(cpu_dat_o),
+        .wb_sel_i(cpu_sel_o),
+        .wb_we_i(cpu_we_o),
+        .wb_cyc_i(cpu_cyc_o),
+
+        .wb_stb_i(counter_timer0_stb_i),
+        .wb_ack_o(counter_timer0_ack_o),
+        .wb_dat_o(counter_timer0_dat_o),
+	.irq(irq_counter_timer0)
+    );
+
+    // Wishbone Counter-timer 1
+    wire counter_timer1_stb_i;
+    wire counter_timer1_ack_o;
+    wire [31:0] counter_timer1_dat_o;
+
+    counter_timer_wb #(
+        .BASE_ADR(COUNTER_TIMER1_BASE_ADR),
+        .CONFIG(COUNTER_TIMER1_CONFIG),
+        .VALUE(COUNTER_TIMER1_VALUE),
+        .DATA(COUNTER_TIMER1_DATA)
+    ) counter_timer_1 (
+        // Wishbone Interface
+        .wb_clk_i(wb_clk_i),
+        .wb_rst_i(wb_rst_i),
+
+        .wb_adr_i(cpu_adr_o),      
+        .wb_dat_i(cpu_dat_o),
+        .wb_sel_i(cpu_sel_o),
+        .wb_we_i(cpu_we_o),
+        .wb_cyc_i(cpu_cyc_o),
+
+        .wb_stb_i(counter_timer1_stb_i),
+        .wb_ack_o(counter_timer1_ack_o),
+        .wb_dat_o(counter_timer1_dat_o),
+	.irq(irq_counter_timer1)
+    );
+
     // Wishbone Slave GPIO Registers
     wire gpio_stb_i;
     wire gpio_ack_o;
@@ -481,49 +563,6 @@
         .gpio_pd(gpio_pd)
     );
 
-    // Wishbone SPI System Control Registers (RO)
-    wire spi_sys_stb_i;
-    wire spi_sys_ack_o;
-    wire [31:0] spi_sys_dat_o;
-
-    spi_sysctrl_wb #(
-        .BASE_ADR(SPI_BASE_ADR),
-        .SPI_CFG(SPI_CFG),
-        .SPI_ENA(SPI_ENA),
-        .SPI_PLL_CFG(SPI_PLL_CFG),
-        .SPI_MFGR_ID(SPI_MFGR_ID),
-        .SPI_PROD_ID(SPI_PROD_ID),
-        .SPI_MASK_REV(SPI_MASK_REV),
-        .SPI_PLL_BYPASS(SPI_PLL_BYPASS)
-    ) spi_sysctrl (
-        .wb_clk_i(wb_clk_i),
-        .wb_rst_i(wb_rst_i),
-
-        .wb_adr_i(cpu_adr_o), 
-        .wb_dat_i(cpu_dat_o),
-        .wb_sel_i(cpu_sel_o),
-        .wb_we_i(cpu_we_o),
-        .wb_cyc_i(cpu_cyc_o),
-
-        .wb_stb_i(spi_sys_stb_i),
-        .wb_ack_o(spi_sys_ack_o),
-        .wb_dat_o(spi_sys_dat_o),
-        
-        .spi_ro_config(spi_ro_config), // (verify) wire input to the core not connected to HKSPI, what should it be connected to ? 
-        .spi_ro_pll_div(spi_ro_pll_div), 
-        .spi_ro_pll_sel(spi_ro_pll_sel),
-        .spi_ro_xtal_ena(spi_ro_xtal_ena),
-        .spi_ro_reg_ena(spi_ro_reg_ena), 
-    
-        .spi_ro_pll_trim(spi_ro_pll_trim),
-        .spi_ro_pll_dco_ena(spi_ro_pll_dco_ena),  
-
-        .spi_ro_mfgr_id(spi_ro_mfgr_id),
-        .spi_ro_prod_id(spi_ro_prod_id), 
-        .spi_ro_mask_rev(spi_ro_mask_rev), 
-        .pll_bypass(ext_clk_sel)
-    );
-    
     // Wishbone Slave System Control Register
     wire sys_stb_i;
     wire sys_ack_o;
@@ -533,8 +572,7 @@
         .BASE_ADR(SYS_BASE_ADR),
         .PLL_OUT(PLL_OUT),
         .TRAP_OUT(TRAP_OUT),
-        .IRQ7_SRC(IRQ7_SRC),
-        .IRQ8_SRC(IRQ8_SRC)
+        .IRQ7_SRC(IRQ7_SRC)
     ) sysctrl (
         .wb_clk_i(wb_clk_i),
         .wb_rst_i(wb_rst_i),
@@ -551,8 +589,7 @@
 
         .pll_output_dest(pll_output_dest),
         .trap_output_dest(trap_output_dest),
-        .irq_7_inputsrc(irq_7_inputsrc),
-        .irq_8_inputsrc(irq_8_inputsrc)
+        .irq_7_inputsrc(irq_7_inputsrc)
     );
 
     // Logic Analyzer 
@@ -610,15 +647,10 @@
         .wb_ack_o(mprj_ctrl_ack_o),
         .wb_dat_o(mprj_ctrl_dat_o),
 
-        .output_en_n(mprj_io_oeb_n),
-        .holdh_n(mprj_io_hldh_n),
-        .enableh(mprj_io_enh),
-        .input_dis(mprj_io_inp_dis),
-        .ib_mode_sel(mprj_io_ib_mode_sel),
-        .analog_en(mprj_io_analog_en),
-        .analog_sel(mprj_io_analog_sel),
-        .analog_pol(mprj_io_analog_pol),
-        .digital_mode(mprj_io_dm)
+	.serial_clock(mprj_io_loader_clock),
+	.serial_resetn(mprj_io_loader_resetn),
+	.serial_data_out(mprj_io_loader_data),
+	.mgmt_gpio_io(mgmt_io_data)
     );
 
     // Wishbone Slave RAM
@@ -658,52 +690,29 @@
         .wbm_ack_o(cpu_ack_i),
 
         // Slaves Interface
-        .wbs_stb_o({ xbar_stb_o, sys_stb_i, spi_sys_stb_i, spimemio_cfg_stb_i, mprj_stb_o, mprj_ctrl_stb_i, la_stb_i, gpio_stb_i, uart_stb_i, spimemio_flash_stb_i, mem_stb_i }), 
-        .wbs_dat_i({ xbar_dat_i, sys_dat_o, spi_sys_dat_o, spimemio_cfg_dat_o, mprj_dat_i, mprj_ctrl_dat_o, la_dat_o, gpio_dat_o, uart_dat_o, spimemio_flash_dat_o, mem_dat_o }),
-        .wbs_ack_i({ xbar_ack_i, sys_ack_o, spi_sys_ack_o, spimemio_cfg_ack_o, mprj_ack_i, mprj_ctrl_ack_o, la_ack_o, gpio_ack_o, uart_ack_o, spimemio_flash_ack_o, mem_ack_o })
+        .wbs_stb_o({ xbar_stb_o, sys_stb_i, spimemio_cfg_stb_i,
+		mprj_stb_o, mprj_ctrl_stb_i, la_stb_i, 
+		spi_master_stb_i, counter_timer1_stb_i, counter_timer0_stb_i,
+		gpio_stb_i, uart_stb_i,
+		spimemio_flash_stb_i, mem_stb_i }), 
+        .wbs_dat_i({ xbar_dat_i, sys_dat_o, spimemio_cfg_dat_o,
+		mprj_dat_i, mprj_ctrl_dat_o, la_dat_o,
+		spi_master_dat_o, counter_timer1_dat_o, counter_timer0_dat_o,
+		gpio_dat_o, uart_dat_o,
+		spimemio_flash_dat_o, mem_dat_o }),
+        .wbs_ack_i({ xbar_ack_i, sys_ack_o, spimemio_cfg_ack_o,
+		mprj_ack_i, mprj_ctrl_ack_o, la_ack_o,
+		spi_master_ack_o, counter_timer1_ack_o, counter_timer0_ack_o,
+		gpio_ack_o, uart_ack_o,
+		spimemio_flash_ack_o, mem_ack_o })
     );
 
 endmodule
 
-
-/* Convert the standard set of GPIO signals: input, output, output_enb,
- * pullup, and pulldown into the set needed by the s8 GPIO pads:
- * input, output, output_enb, input_enb, mode.  Note that dm[2] on
- * thepads is always equal to dm[1] in this setup, so mode is shown as
- * only a 2-bit signal.
- *
- * This module is bit-sliced.  Instantiate once for each GPIO pad.
- */
-
-module convert_gpio_sigs (
-    input        gpio_out,
-    input        gpio_outenb,
-    input        gpio_pu,
-    input        gpio_pd,
-    output       gpio_out_pad,
-    output       gpio_outenb_pad,
-    output       gpio_inenb_pad,
-    output       gpio_mode1_pad,
-    output       gpio_mode0_pad
-);
-
-    assign gpio_out_pad = (gpio_pu == 1'b0 && gpio_pd == 1'b0) ? gpio_out :
-            (gpio_pu == 1'b1) ? 1 : 0;
-
-    assign gpio_outenb_pad = (gpio_outenb == 1'b0) ? 0 :
-            (gpio_pu == 1'b1 || gpio_pd == 1'b1) ? 0 : 1;
-
-    assign gpio_inenb_pad = ~gpio_outenb;
-
-    assign gpio_mode1_pad = ~gpio_outenb_pad;
-    assign gpio_mode0_pad = gpio_outenb;
-
-endmodule
-
 // Implementation note:
 // Replace the following two modules with wrappers for your SRAM cells.
 
-module openstriVe_soc_regs (
+module mgmt_soc_regs (
     input clk, wen,
     input [5:0] waddr,
     input [5:0] raddr1,
diff --git a/verilog/rtl/mprj_ctrl.v b/verilog/rtl/mprj_ctrl.v
index 9236beb..66250cb 100644
--- a/verilog/rtl/mprj_ctrl.v
+++ b/verilog/rtl/mprj_ctrl.v
@@ -1,5 +1,8 @@
 module mprj_ctrl_wb #(
     parameter BASE_ADR = 32'h 2300_0000,
+    parameter DATA   = 8'h 00,
+    parameter XFER   = 8'h 04,
+    parameter CONFIG = 8'h 08,
     parameter IO_PADS = 32,   // Number of IO control registers
     parameter PWR_CTRL = 32   // Number of power control registers
 )(
@@ -16,17 +19,14 @@
     output [31:0] wb_dat_o,
     output wb_ack_o,
 
-    output [IO_PADS-1:0] output_en_n,
-    output [IO_PADS-1:0] holdh_n,
-    output [IO_PADS-1:0] enableh,
-    output [IO_PADS-1:0] input_dis,
-    output [IO_PADS-1:0] ib_mode_sel,
-    output [IO_PADS-1:0] analog_en,
-    output [IO_PADS-1:0] analog_sel,
-    output [IO_PADS-1:0] analog_pol,
-    output [IO_PADS*3-1:0] digital_mode
-);
+    // Output is to serial loader
+    output serial_clock,
+    output serial_resetn,
+    output serial_data_out,
 
+    // Read/write data to each GPIO pad from management SoC
+    inout [IO_PADS-1:0] mgmt_gpio_io
+);
     wire resetn;
     wire valid;
     wire ready;
@@ -40,7 +40,10 @@
 
     mprj_ctrl #(
         .BASE_ADR(BASE_ADR),
-        .IO_PADS(IO_PADS),
+	.DATA(DATA),
+        .CONFIG(CONFIG),
+        .XFER(XFER),
+	.IO_PADS(IO_PADS),
         .PWR_CTRL(PWR_CTRL)
     ) mprj_ctrl (
         .clk(wb_clk_i),
@@ -51,21 +54,20 @@
         .iomem_wdata(wb_dat_i),
         .iomem_rdata(wb_dat_o),
         .iomem_ready(ready),
-        .output_en_n(output_en_n),
-        .holdh_n(holdh_n),
-        .enableh(enableh),
-        .input_dis(input_dis),
-        .ib_mode_sel(ib_mode_sel),
-        .analog_en(analog_en),
-        .analog_sel(analog_sel),
-        .analog_pol(analog_pol),
-        .digital_mode(digital_mode)
+
+	.serial_clock(serial_clock),
+	.serial_resetn(serial_resetn),
+	.serial_data_out(serial_data_out),
+	.mgmt_gpio_io(mgmt_gpio_io)
     );
 
 endmodule
 
 module mprj_ctrl #(
     parameter BASE_ADR = 32'h 2300_0000,
+    parameter DATA   = 8'h 00,
+    parameter XFER   = 8'h 04,
+    parameter CONFIG = 8'h 08,
     parameter IO_PADS = 32,
     parameter PWR_CTRL = 32
 )(
@@ -76,51 +78,44 @@
     input iomem_valid,
     input [3:0] iomem_wstrb,
     input [31:0] iomem_wdata,
-
     output reg [31:0] iomem_rdata,
     output reg iomem_ready,
 
-    output [IO_PADS-1:0] output_en_n,
-    output [IO_PADS-1:0] holdh_n,
-    output [IO_PADS-1:0] enableh,
-    output [IO_PADS-1:0] input_dis,
-    output [IO_PADS-1:0] ib_mode_sel,
-    output [IO_PADS-1:0] analog_en,
-    output [IO_PADS-1:0] analog_sel,
-    output [IO_PADS-1:0] analog_pol,
-    output [IO_PADS*3-1:0] digital_mode
+    output serial_clock,
+    output serial_resetn,
+    output serial_data_out,
+    inout [IO_PADS-1:0] mgmt_gpio_io
 );
 	
-    localparam PWR_BASE_ADR = BASE_ADR + IO_PADS*4;
-    localparam OEB = 0;
-    localparam HLDH = 1;
-    localparam ENH  = 2;
-    localparam INP_DIS = 3;
-    localparam MOD_SEL = 4;
-    localparam AN_EN = 5;
-    localparam AN_SEL = 6;
-    localparam AN_POL = 7;
-    localparam DM = 8;
+    localparam IO_BASE_ADR = (BASE_ADR | CONFIG);
+    localparam PWR_BASE_ADR = (BASE_ADR | CONFIG) + IO_PADS*4;
+    localparam OEB = 1;			// Offset of OEB in shift register block.
 
-    reg [IO_PADS*32-1:0] io_ctrl;		
-    reg [PWR_CTRL*32-1:0] pwr_ctrl;
+    reg [IO_PADS*32-1:0] io_ctrl;	// I/O control, 1 word per gpio pad
+    reg [PWR_CTRL*32-1:0] pwr_ctrl;	// Power control, 1 word per power pad
+    reg [IO_PADS-1:0] mgmt_gpio_out;	// I/O read/write data, 1 bit per gpio pad
+    reg xfer_ctrl;			// Transfer control (1 bit)
 
-    wire [IO_PADS-1:0] io_ctrl_sel;
+    wire [IO_PADS-1:0] io_ctrl_sel;	// wishbone selects
     wire [PWR_CTRL-1:0] pwr_ctrl_sel;
+    wire io_data_sel;
+    wire xfer_sel;
+
+    assign xfer_sel = (iomem_addr[7:0] == XFER);
+    assign io_data_sel = (iomem_addr[7:0] == DATA); 
+
+    // Direction of mgmt_gpio_io depends on the value of io_ctrl pad bit 1 (OEB)
+    // if OEB = 0 then mgmt_gpio_out --> mgmt_gpio_io;  if OEB = 1 then
+    // mgmt_gpio_io --> mgmt_gpio_in.  mgmt_gpio_in is always a copy of mgmt_gpio_io.
+
+    assign mgmt_gpio_in = mgmt_gpio_io;
 
     genvar i;
     generate
         for (i=0; i<IO_PADS; i=i+1) begin
-            assign io_ctrl_sel[i] = (iomem_addr[7:0] == (BASE_ADR[7:0] + i*4)); 
-            assign output_en_n[i]   = io_ctrl[i*32+OEB];
-            assign holdh_n[i]  = io_ctrl[i*32+HLDH];
-            assign enableh[i] = io_ctrl[i*32+ENH];
-            assign input_dis[i] = io_ctrl[i*32+INP_DIS];
-            assign ib_mode_sel[i] = io_ctrl[i*32+MOD_SEL];
-            assign analog_en[i]  = io_ctrl[i*32+AN_EN];
-            assign analog_sel[i] = io_ctrl[i*32+AN_SEL];
-            assign analog_pol[i] = io_ctrl[i*32+AN_POL];
-            assign digital_mode[(i+1)*3-1:i*3] = io_ctrl[i*32+DM+3-1:i*32+DM];
+            assign io_ctrl_sel[i] = (iomem_addr[7:0] == (IO_BASE_ADR[7:0] + i*4)); 
+            assign mgmt_gpio_io[i] = (io_ctrl[i*32] + OEB == 1'b0) ?
+				mgmt_gpio_out[i] : 1'bz;
         end
     endgenerate
 
@@ -130,16 +125,38 @@
         end
     endgenerate
 
+    // I/O transfer of xfer bit and gpio data to/from user project region under
+    // management SoC control
+
+    always @(posedge clk) begin
+	if (!resetn) begin
+	    xfer_ctrl <= 0;
+	    mgmt_gpio_out <= 'd0;
+	end else begin
+	    iomem_ready <= 0;
+	    if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADDR[31:8]) begin
+		iomem_ready <= 1'b 1;
+
+		if (io_data_sel) begin
+		    iomem_rdata <= mgmt_gpio_in;
+		    mgmt_gpio_out <= 'd0;
+		    if (iomem_wstrb[0]) mgmt_gpio_out[IO_PADS-1:0] <= iomem_wdata[IO_PADS-1:0];
+
+		end else if (xfer_sel) begin
+		    iomem_rdata <= {31'd0, xfer_ctrl};
+		    if (iomem_wstrb[0]) xfer_ctrl <= iomem_wdata[1:0];
+		end
+	    end
+	end
+    end
+
     generate 
         for (i=0; i<IO_PADS; i=i+1) begin
              always @(posedge clk) begin
                 if (!resetn) begin
                     io_ctrl[i*32+: 32]  <= 0;
                 end else begin
-                    iomem_ready <= 0;
                     if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin
-                        iomem_ready <= 1'b 1;
-
                         if (io_ctrl_sel[i]) begin
                             iomem_rdata <= io_ctrl[i*32+: 32];
                             if (iomem_wstrb[0])
@@ -166,10 +183,7 @@
                 if (!resetn) begin
                     pwr_ctrl[i*32+: 32]  <= 0;
                 end else begin
-                    iomem_ready <= 0;
                     if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin
-                        iomem_ready <= 1'b 1;
-
                         if (pwr_ctrl_sel[i]) begin
                             iomem_rdata <= pwr_ctrl[i*32+: 32];
                             if (iomem_wstrb[0])
@@ -190,4 +204,122 @@
         end
     endgenerate
 
-endmodule
\ No newline at end of file
+    // Instantiate the GPIO transfer circuit
+
+    gpio_transfer_data #(
+	.NUM_GPIO_PADS(IO_PADS),
+	.PAD_CTRL_BITS(14)
+    ) gpio_xfer (
+	.resetn(resetn),
+	.clock(clk),
+	.pad_configure(io_ctrl),
+	.serial_clock(serial_clock),
+	.serial_resetn(serial_resetn),
+	.serial_data_out(serial_data_out)
+    );
+
+endmodule
+
+/*
+ *----------------------------------------------------
+ *
+ * This module initiates a write to the shift register
+ * chain from registered data in the processor core.
+ *
+ *----------------------------------------------------
+ */
+
+`define START	2'b00
+`define XBYTE	2'b01
+`define LOAD	2'b10
+
+module gpio_transfer_data #(
+    parameter NUM_GPIO_PADS = 32,
+    parameter PAD_CTRL_BITS = 13
+) (
+    input resetn,
+    input clock,
+    input [NUM_GPIO_PADS*PAD_CTRL_BITS-1:0] pad_configure,
+
+    output	 serial_clock,
+    output	 serial_resetn,
+    output 	 serial_data_out
+);
+    reg [3:0]  xfer_count;
+    reg [5:0]  pad_count;
+    reg [1:0]  xfer_state;
+    reg	       serial_clock;
+    reg	       serial_resetn;
+    reg	       serial_data_out;
+    reg [PAD_CTRL_BITS-1:0] serial_data_staging;
+
+    integer i;
+
+    always @(posedge clock or negedge resetn) begin
+	if (resetn == 1'b0) begin
+
+	    xfer_state <= `START;
+	    xfer_count <= 4'd0;
+	    pad_count  <= 6'd0;
+	    serial_resetn <= 1'b0;
+	    serial_clock <= 1'b0;
+	    serial_data_out <= 1'b0;
+
+	end else begin
+
+	    if (xfer_state == `START) begin
+	    	serial_resetn <= 1'b1;
+		serial_clock <= 1'b0;
+	    	xfer_count <= 6'd0;
+		if (pad_count == NUM_GPIO_PADS) begin
+		    xfer_state <= `LOAD;
+		end else begin
+		    pad_count <= pad_count + 1;
+		    xfer_state <= `XBYTE;
+
+		    for (i=0; i < NUM_GPIO_PADS; i = i + 1) begin
+			if (pad_count == i) 
+			    serial_data_staging <=
+				pad_configure[(i+1)*PAD_CTRL_BITS-1 : i*PAD_CTRL_BITS];
+		    end
+		end
+	    end else if (xfer_state == `XBYTE) begin
+	    	serial_resetn <= 1'b1;
+		serial_clock <= ~serial_clock;
+		if (serial_clock == 1'b0) begin
+		    if (xfer_count == PAD_CTRL_BITS) begin
+		    	xfer_state <= `START;
+		    end else begin
+		    	xfer_count <= xfer_count + 1;
+		    end
+		end else begin
+		    serial_data_staging <= {serial_data_staging[PAD_CTRL_BITS-2:0], 1'b0};
+		    serial_data_out <= serial_data_staging[PAD_CTRL_BITS-1];
+		end
+	    end else if (xfer_state == `LOAD) begin
+		xfer_count <= xfer_count + 1;
+
+		/* Load sequence:  Raise clock for final data shift in;
+		 * Pulse reset low while clock is high
+		 * Set clock back to zero.
+		 * Return to idle mode.
+		 */
+		if (xfer_count == 4'd0) begin
+		    serial_clock <= 1'b1;
+		    serial_resetn <= 1'b1;
+		end else if (xfer_count == 4'd1) begin
+		    serial_clock <= 1'b1;
+		    serial_resetn <= 1'b0;
+		end else if (xfer_count == 4'd2) begin
+		    serial_clock <= 1'b1;
+		    serial_resetn <= 1'b1;
+		end else if (xfer_count == 4'd3) begin
+		    serial_resetn <= 1'b1;
+		    serial_clock <= 1'b0;
+		    xfer_state <= `START;
+		end
+	    end	
+	end
+    end
+
+endmodule
diff --git a/verilog/rtl/mprj_io.v b/verilog/rtl/mprj_io.v
index e168b67..0238649 100644
--- a/verilog/rtl/mprj_io.v
+++ b/verilog/rtl/mprj_io.v
@@ -1,27 +1,31 @@
 module mprj_io(
-	inout vdd,
-	inout vdd1v8,
-	inout vss,
-	input vddio_q,
-	input vssio_q,
-	input analog_a,
-	input analog_b,
-	input [`MPRJ_IO_PADS-1:0] io,
-	input [`MPRJ_IO_PADS-1:0] io_out,
-	input [`MPRJ_IO_PADS-1:0] oeb_n,
+    inout vdd,
+    inout vdd1v8,
+    inout vss,
+    input vddio_q,
+    input vssio_q,
+    input analog_a,
+    input analog_b,
+    input [`MPRJ_IO_PADS-1:0] io,
+    input [`MPRJ_IO_PADS-1:0] io_out,
+    input [`MPRJ_IO_PADS-1:0] oeb_n,
     input [`MPRJ_IO_PADS-1:0] hldh_n,
-	input [`MPRJ_IO_PADS-1:0] enh,
+    input [`MPRJ_IO_PADS-1:0] enh,
     input [`MPRJ_IO_PADS-1:0] inp_dis,
     input [`MPRJ_IO_PADS-1:0] ib_mode_sel,
+    input [`MPRJ_IO_PADS-1:0] vtrip_sel,
+    input [`MPRJ_IO_PADS-1:0] slow_sel,
+    input [`MPRJ_IO_PADS-1:0] holdover,
     input [`MPRJ_IO_PADS-1:0] analog_en,
     input [`MPRJ_IO_PADS-1:0] analog_sel,
     input [`MPRJ_IO_PADS-1:0] analog_pol,
     input [`MPRJ_IO_PADS*3-1:0] dm,
-	output [`MPRJ_IO_PADS-1:0] io_in
+    output [`MPRJ_IO_PADS-1:0] io_in
 );
 
 	`MPRJ_IO_PAD_V(io, io_in, io_out, `MPRJ_IO_PADS, 
 		oeb_n, hldh_n, enh, inp_dis, ib_mode_sel,
+		vtrip_sel, slow_sel, holdolver,
 		analog_en, analog_sel, analog_pol, dm);
 
-endmodule
\ No newline at end of file
+endmodule
diff --git a/verilog/rtl/pads.v b/verilog/rtl/pads.v
index 16a288e..ad2ac30 100644
--- a/verilog/rtl/pads.v
+++ b/verilog/rtl/pads.v
@@ -207,7 +207,7 @@
 		.tie_hi_esd(), \
 		.tie_lo_esd(loop_``X) )
 
-`define MPRJ_IO_PAD_V(X,Y,Y_OUT,V,OUT_EN_N,HLD_N, ENH, INP_DIS, MODE_SEL, AN_EN, AN_SEL, AN_POL, MODE) \
+`define MPRJ_IO_PAD_V(X,Y,Y_OUT,V,OUT_EN_N,HLD_N, ENH, INP_DIS, MODE_SEL, VTRIP_SEL, SLOW_SEL, HOLD_SEL, AN_EN, AN_SEL, AN_POL, MODE) \
 	wire [V-1:0] loop_``X; \
 	s8iom0_gpiov2_pad  X``_pad [V-1:0] ( \
 	`ABUTMENT_PINS \
@@ -224,9 +224,9 @@
 		.enable_vddio(vdd1v8), \
 		.inp_dis(INP_DIS), \
 		.ib_mode_sel(MODE_SEL), \
-		.vtrip_sel(vss), \
-		.slow(vss),	\
-		.hld_ovr(vss), \
+		.vtrip_sel(VTRIP_SEL), \
+		.slow(SLOW_SEL),	\
+		.hld_ovr(HOLD_SEL), \
 		.analog_en(AN_EN), \
 		.analog_sel(AN_SEL), \
 		.analog_pol(AN_POL), \
@@ -238,73 +238,3 @@
 		.in_h(), \
 		.tie_hi_esd(), \
 		.tie_lo_esd(loop_``X) )
-
-`define I2C_RX(X,Y) \
-	wire loop_``X; \
-	s8iom0s8_top_gpio_ovtv2 X``_pad ( \
-	`ABUTMENT_PINS \
-	`ifndef	TOP_ROUTING \
-		.pad(X), \
-	`endif \
-		.out(vss), \
-		.oe_n(vdd1v8), \
-		.hld_h_n(vdd3v3), \
-		.enable_h(porb_h), \
-		.enable_inp_h(loop_``X), \
-		.enable_vdda_h(porb_h), \
-		.enable_vddio(vdd1v8), \
-		.enable_vswitch_h(vss), \
-		.inp_dis(por), \
-		.vtrip_sel(vss), \
-		.hys_trim(vdd1v8), \
-		.slow(vss), \
-		.slew_ctl({vss, vss}), \	// 2 bits
-		.hld_ovr(vss), \
-		.analog_en(vss), \
-		.analog_sel(vss), \
-		.analog_pol(vss), \
-		.dm({vss, vss, vdd1v8}), \		// 3 bits
-		.ib_mode_sel({vss, vss}), \	// 2 bits
-		.vinref(vdd1v8), \
-		.pad_a_noesd_h(), \
-		.pad_a_esd_0_h(), \
-		.pad_a_esd_1_h(), \
-		.in(Y), \
-		.in_h(), \
-		.tie_hi_esd(), \
-		.tie_lo_esd() )
-
-`define I2C_TX(X,Y) \
-	wire loop_``X; \
-	s8iom0s8_top_gpio_ovtv2 X``_pad ( \
-	`ABUTMENT_PINS \
-	`ifndef	TOP_ROUTING \
-		.pad(X), \
-	`endif \
-		.out(Y), \
-		.oe_n(vss), \
-		.hld_h_n(vdd3v3), \
-		.enable_h(porb_h), \
-		.enable_inp_h(loop_``X), \
-		.enable_vdda_h(porb_h), \
-		.enable_vddio(vdd1v8), \
-		.enable_vswitch_h(vss), \
-		.inp_dis(vdd1v8), \
-		.vtrip_sel(vss), \
-		.hys_trim(vdd1v8), \
-		.slow(vss), \
-		.slew_ctl({vss, vss}), \	// 2 bits
-		.hld_ovr(vss), \
-		.analog_en(vss), \
-		.analog_sel(vss), \
-		.analog_pol(vss), \
-		.dm({vdd1v8, vdd1v8, vss}),	\	// 3 bits
-		.ib_mode_sel({vss, vss}), \	// 2 bits
-		.vinref(vdd1v8), \
-		.pad_a_noesd_h(), \
-		.pad_a_esd_0_h(), \
-		.pad_a_esd_1_h(), \
-		.in(), \
-		.in_h(), \
-		.tie_hi_esd(), \
-		.tie_lo_esd())
diff --git a/verilog/rtl/simple_spi_master.v b/verilog/rtl/simple_spi_master.v
new file mode 100755
index 0000000..de6ac2a
--- /dev/null
+++ b/verilog/rtl/simple_spi_master.v
@@ -0,0 +1,373 @@
+//----------------------------------------------------------------------------
+// Module: simple_spi_master
+//
+//----------------------------------------------------------------------------
+// Copyright (C) 2019 efabless, inc.
+//
+// This source file may be used and distributed without
+// restriction provided that this copyright statement is not
+// removed from the file and that any derivative work contains
+// the original copyright notice and the associated disclaimer.
+//
+// This source file is free software; you can redistribute it
+// and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation;
+// either version 2.1 of the License, or (at your option) any
+// later version.
+//
+// This source is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied
+// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+// PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+//--------------------------------------------------------------------
+// 
+// resetn: active low async reset
+// clk:    master clock (before prescaler)
+// stream:
+//     0 = apply/release CSB separately for each byte
+//     1 = apply CSB until stream bit is cleared
+// mlb:
+//     0 = msb 1st
+//     1 = lsb 1st
+// invsck:
+//     0 = normal SCK
+//     1 = inverted SCK
+// invcsb:
+//     0 = normal CSB (active low)
+//     1 = inverted CSB (active high)
+// mode:
+//     0 = read and change data on opposite SCK edges
+//     1 = read and change data on the same SCK edge
+// enable:
+//     0 = disable the SPI master
+//     1 = enable the SPI master
+// irqena:
+//     0 = disable interrupt
+//     1 = enable interrupt
+// prescaler: count (in master clock cycles) of 1/2 SCK cycle.
+//
+// reg_dat_we:
+//     1 = data write enable
+// reg_dat_re:
+//     1 = data read enable
+// reg_cfg_*: Signaling for read/write of configuration register
+// reg_dat_*: Signaling for read/write of data register
+//
+// err_out:  Indicates attempt to read/write before data ready
+//	(failure to wait for reg_dat_wait to clear)
+//
+// Between "mode" and "invsck", all four standard SPI modes are supported
+//
+//--------------------------------------------------------------------
+
+module simple_spi_master_wb #(
+    parameter BASE_ADR = 32'h2100_0000,
+    parameter CONFIG = 8'h00,
+    parameter DATA = 8'h04
+) (
+    input wb_clk_i,
+    input wb_rst_i,
+    input [31:0] wb_adr_i,
+    input [31:0] wb_dat_i,
+    input [3:0] wb_sel_i,
+    input wb_we_i,
+    input wb_cyc_i,
+    input wb_stb_i,
+    output wb_ack_o,
+    output [31:0] wb_dat_o,
+
+    input 	 sdi,	 // SPI input
+    output 	 csb,	 // SPI chip select
+    output 	 sck,	 // SPI clock
+    output 	 sdo,	 // SPI output
+    output	 irq	 // interrupt output
+);
+
+    wire [31:0] simple_spi_master_reg_cfg_do;
+    wire [31:0] simple_spi_master_reg_dat_do;
+
+    wire resetn = ~wb_rst_i;
+    wire valid = wb_stb_i && wb_cyc_i;
+    wire simple_spi_master_reg_cfg_sel = valid && (wb_adr_i == (BASE_ADR | CONFIG));
+    wire simple_spi_master_reg_dat_sel = valid && (wb_adr_i == (BASE_ADR | DATA));
+
+    wire [1:0] reg_cfg_we = (simple_spi_master_reg_cfg_sel) ?
+		(wb_sel_i[1:0] & {2{wb_we_i}}): 2'b00;
+    wire reg_dat_we = (simple_spi_master_reg_dat_sel) ? (wb_sel_i[0] & wb_we_i): 1'b0;
+
+    wire [31:0] mem_wdata = wb_dat_i;
+    wire reg_dat_re = simple_spi_master_reg_dat_sel && !wb_sel_i && ~wb_we_i;
+
+    assign wb_dat_o = (simple_spi_master_reg_cfg_sel) ? simple_spi_master_reg_cfg_do :
+		simple_spi_master_reg_dat_do;
+    assign wb_ack_o = (simple_spi_master_reg_cfg_sel || simple_spi_master_reg_dat_sel)
+		&& (!reg_dat_wait);
+
+    simple_spi_master spi_master (
+    	.resetn(resetn),
+    	.clk(wb_clk_i),
+    	.reg_cfg_we(reg_cfg_we),
+    	.reg_cfg_di(mem_wdata),
+    	.reg_cfg_do(simple_spi_master_reg_cfg_do),
+    	.reg_dat_we(reg_dat_we),
+    	.reg_dat_re(reg_dat_re),
+    	.reg_dat_di(mem_wdata),
+    	.reg_dat_do(simple_spi_master_reg_dat_do),
+    	.reg_dat_wait(reg_dat_wait),
+
+    	.sdi(sdi),	 // SPI input
+    	.csb(csb),	 // SPI chip select
+    	.sck(sck),	 // SPI clock
+    	.sdo(sdo),	 // SPI output
+	.irq_out(irq)	 // interrupt
+    );
+endmodule
+
+module simple_spi_master (
+    input        resetn,
+    input        clk,	 // master clock (assume 100MHz)
+
+    input  [1:0]  reg_cfg_we,
+    input  [31:0] reg_cfg_di,
+    output [31:0] reg_cfg_do,
+
+    input  	  reg_dat_we,
+    input  	  reg_dat_re,
+    input  [31:0] reg_dat_di,
+    output [31:0] reg_dat_do,
+    output	  reg_dat_wait,
+    output	  irq_out,
+    output	  err_out,
+
+    input 	 sdi,	 // SPI input
+    output 	 csb,	 // SPI chip select
+    output 	 sck,	 // SPI clock
+    output 	 sdo	 // SPI output
+);
+
+    parameter IDLE   = 2'b00;	    
+    parameter SENDL  = 2'b01; 
+    parameter SENDH  = 2'b10; 
+    parameter FINISH = 2'b11; 
+
+    reg	  done;
+    reg 	  isdo, hsck, icsb;
+    reg [1:0] state;
+    reg 	  isck;
+    reg	  err_out;
+ 
+    reg [7:0]  treg, rreg, d_latched;
+    reg [2:0]  nbit;
+
+    reg [7:0]  prescaler;
+    reg [7:0]  count;
+    reg	   invsck;
+    reg	   invcsb;
+    reg	   mlb;
+    reg	   irqena;
+    reg	   stream;
+    reg	   mode;
+    reg	   enable;
+ 
+    wire	  csb;
+    wire	  irq_out;
+    wire	  sck;
+    wire	  sdo;
+
+    // Define behavior for inverted SCK and inverted CSB
+    assign    	  csb = (invcsb) ? ~icsb : icsb;
+    assign	  sck = (invsck) ? ~isck : isck;
+
+    // No bidirectional 3-pin mode defined, so SDO is enabled whenever CSB is low.
+    assign	  sdo = icsb ? 1'bz : isdo;
+
+    assign	  irq_out = irqena & done;
+
+    // Read configuration and data registers
+    assign reg_cfg_do = {17'd0, irqena, enable, stream, mode, invsck, invcsb, mlb, prescaler};
+    assign reg_dat_wait = ~done;
+    assign reg_dat_do = done ? rreg : ~0;
+
+    // Write configuration register
+    always @(posedge clk or negedge resetn) begin
+        if (resetn == 1'b0) begin
+	    prescaler <= 8'd2;
+	    invcsb <= 1'b0;
+	    invsck <= 1'b0;
+	    mlb <= 1'b0;
+	    enable <= 1'b0;
+	    irqena <= 1'b0;
+	    stream <= 1'b0;
+	    mode <= 1'b0;
+        end else begin
+            if (reg_cfg_we[0]) prescaler <= reg_cfg_di[7:0];
+            if (reg_cfg_we[1]) begin
+	        mlb <= reg_cfg_di[8];
+	        invcsb <= reg_cfg_di[9];
+	        invsck <= reg_cfg_di[10];
+	        mode <= reg_cfg_di[11];
+	        stream <= reg_cfg_di[12];
+	        enable <= reg_cfg_di[13];
+	        irqena <= reg_cfg_di[14];
+	    end //reg_cfg_we[1]
+        end //resetn
+    end //always
+ 
+    // Watch for read and write enables on clk, not hsck, so as not to
+    // miss them.
+
+    reg w_latched, r_latched;
+
+    always @(posedge clk or negedge resetn) begin
+        if (resetn == 1'b0) begin
+	    err_out <= 1'b0;
+            w_latched <= 1'b0;
+            r_latched <= 1'b0;
+	    d_latched <= 8'd0;
+        end else begin
+            // Clear latches on SEND, otherwise latch when seen
+            if (state == SENDL || state == SENDH) begin
+	        if (reg_dat_we == 1'b0) begin
+		    w_latched <= 1'b0;
+	        end
+	    end else begin
+	        if (reg_dat_we == 1'b1) begin
+		    if (done == 1'b0 && w_latched == 1'b1) begin
+		        err_out <= 1'b1;
+		    end else begin
+		        w_latched <= 1'b1;
+		        d_latched <= reg_dat_di[7:0];
+		        err_out <= 1'b0;
+		    end
+	        end
+	    end
+
+	    if (reg_dat_re == 1'b1) begin
+	        if (r_latched == 1'b1) begin
+		    r_latched <= 1'b0;
+	        end else begin
+		    err_out <= 1'b1;	// byte not available
+	        end
+	    end else if (state == FINISH) begin
+	        r_latched <= 1'b1;
+	    end if (state == SENDL || state == SENDH) begin
+	        if (r_latched == 1'b1) begin
+		    err_out <= 1'b1;	// last byte was never read
+	        end else begin
+		    r_latched <= 1'b0;
+	        end
+	    end
+        end
+    end
+
+    // State transition.
+
+    always @(posedge hsck or negedge resetn) begin
+        if (resetn == 1'b0) begin
+	    state <= IDLE;
+	    nbit <= 3'd0;
+	    icsb <= 1'b1;
+	    done <= 1'b1;
+        end else begin
+	    if (state == IDLE) begin
+	        if (w_latched == 1'b1) begin
+		    state <= SENDL;
+		    nbit <= 3'd0;
+		    icsb <= 1'b0;
+		    done <= 1'b0;
+	        end else begin
+	            icsb <= ~stream;
+	        end
+	    end else if (state == SENDL) begin
+	        state <= SENDH;
+	    end else if (state == SENDH) begin
+	        nbit <= nbit + 1;
+                if (nbit == 3'd7) begin
+		    state <= FINISH;
+	        end else begin
+	            state <= SENDL;
+	        end
+	    end else if (state == FINISH) begin
+	        icsb <= ~stream;
+	        done <= 1'b1;
+	        state <= IDLE;
+	    end
+        end
+    end
+ 
+    // Set up internal clock.  The enable bit gates the internal clock
+    // to shut down the master SPI when disabled.
+
+    always @(posedge clk or negedge resetn) begin
+        if (resetn == 1'b0) begin
+	    count <= 8'd0;
+	    hsck <= 1'b0;
+        end else begin
+	    if (enable == 1'b0) begin
+ 	        count <= 8'd0;
+	    end else begin
+	        count <= count + 1; 
+                if (count == prescaler) begin
+		    hsck <= ~hsck;
+		    count <= 8'd0;
+	        end // count
+	    end // enable
+        end // resetn
+    end // always
+ 
+    // sck is half the rate of hsck
+
+    always @(posedge hsck or negedge resetn) begin
+        if (resetn == 1'b0) begin
+	    isck <= 1'b0;
+        end else begin
+	    if (state == IDLE || state == FINISH)
+	        isck <= 1'b0;
+	    else
+	        isck <= ~isck;
+        end // resetn
+    end // always
+
+    // Main procedure:  read, write, shift data
+
+    always @(posedge hsck or negedge resetn) begin
+        if (resetn == 1'b0) begin
+	    rreg <= 8'hff;
+	    treg <= 8'hff;
+	    isdo <= 1'b0;
+        end else begin 
+	    if (isck == 1'b0 && (state == SENDL || state == SENDH)) begin
+	        if (mlb == 1'b1) begin
+		    // LSB first, sdi@msb -> right shift
+		    rreg <= {sdi, rreg[7:1]};
+	        end else begin
+		    // MSB first, sdi@lsb -> left shift
+		    rreg <= {rreg[6:0], sdi};
+	        end
+	    end // read on ~isck
+
+            if (w_latched == 1'b1) begin
+	        if (mlb == 1'b1) begin
+		    treg <= {1'b1, d_latched[7:1]};
+		    isdo <= d_latched[0];
+	        end else begin
+		    treg <= {d_latched[6:0], 1'b1};
+		    isdo <= d_latched[7];
+	        end // mlb
+	    end else if ((mode ^ isck) == 1'b1) begin
+	        if (mlb == 1'b1) begin
+		    // LSB first, shift right
+		    treg <= {1'b1, treg[7:1]};
+		    isdo <= treg[0];
+	        end else begin
+		    // MSB first shift LEFT
+		    treg <= {treg[6:0], 1'b1};
+		    isdo <= treg[7];
+	        end // mlb
+	    end // write on mode ^ isck
+        end // resetn
+    end // always
+ 
+endmodule
diff --git a/verilog/rtl/spi_slave.v b/verilog/rtl/spi_slave.v
deleted file mode 100644
index 16a1923..0000000
--- a/verilog/rtl/spi_slave.v
+++ /dev/null
@@ -1,179 +0,0 @@
-//------------------------------------------------
-// spi_slave.v
-//------------------------------------------------
-// General purpose SPI slave module
-//------------------------------------------------
-// Written by Tim Edwards
-// efabless, inc., april 23, 2017
-//------------------------------------------------
-// This file is distributed free and open source
-//------------------------------------------------
-
-// SCK ---   Clock input
-// SDI ---   Data  input
-// SDO ---   Data  output
-// CSB ---   Chip  select (sense negative)
-// idata --- Data from chip to transmit out, in 8 bits
-// odata --- Input data to chip, in 8 bits
-// addr  --- Decoded address to upstream circuits
-// rdstb --- Read strobe, tells upstream circuit to supply next byte to idata
-// wrstb --- Write strobe, tells upstream circuit to latch odata.
-
-// Data format (general purpose):
-// 8 bit format
-// 1st byte:   Command word (see below)
-// 2nd byte:   Address word (register 0 to 255)
-// 3rd byte:   Data word    (value 0 to 255)
-
-// Command format:
-// 00000000  No operation
-// 10000000  Write until CSB raised
-// 01000000  Read  until CSB raised
-// 11000000  Simultaneous read/write until CSB raised
-// wrnnn000  Read/write as above, for nnn = 1 to 7 bytes, then terminate
-
-// Lower three bits are reserved for future use.
-// All serial bytes are read and written msb first.
-
-// Fixed control and status registers
-
-// Address 0 is reserved and contains flags for SPI mode.  This is
-// currently undefined and is always value 0.
-// Address 1 is reserved and contains manufacturer ID low 8 bits.
-// Address 2 is reserved and contains manufacturer ID high 4 bits
-// and mask revision number (4 bits).
-// Address 3 is reserved and contains product ID (8 bits).
-// Addresses 4 to 255 are available for general purpose use.
-
-`define COMMAND  2'b00
-`define ADDRESS  2'b01
-`define DATA     2'b10
-`define IDLE     2'b11	// Not used
-
-module spi_slave(SCK, SDI, CSB, SDO, sdoenb, idata, odata, oaddr, rdstb, wrstb);
-    input SCK;
-    input SDI;
-    input CSB;
-    output SDO;
-    output sdoenb;
-    input [7:0] idata;
-    output [7:0] odata;
-    output [7:0] oaddr;
-    output rdstb;
-    output wrstb; 
-
-    reg  [7:0]  addr;
-    reg		wrstb;
-    reg		rdstb;
-    reg		sdoenb;
-    reg  [1:0]  state;
-    reg  [2:0]  count;
-    reg		writemode;
-    reg		readmode;
-    reg  [2:0]	fixed;
-    wire [7:0]  odata;
-    reg  [6:0]  predata;
-    wire [7:0]  oaddr;
-    reg  [7:0]  ldata;
-
-    assign odata = {predata, SDI};
-    assign oaddr = (state == `ADDRESS) ? {addr[6:0], SDI} : addr;
-    assign SDO = ldata[7];
-
-    // Readback data is captured on the falling edge of SCK so that
-    // it is guaranteed valid at the next rising edge.
-    always @(negedge SCK or posedge CSB) begin
-    if (CSB == 1'b1) begin
-        wrstb <= 1'b0;
-        ldata  <= 8'b00000000;
-        sdoenb <= 1'b1;
-        end else begin
-
-        // After CSB low, 1st SCK starts command
-
-        if (state == `DATA) begin
-        if (readmode == 1'b1) begin
-            sdoenb <= 1'b0;
-            if (count == 3'b000) begin
-            ldata <= idata;
-            end else begin
-            ldata <= {ldata[6:0], 1'b0};	// Shift out
-            end
-        end else begin
-            sdoenb <= 1'b1;
-        end
-
-        // Apply write strobe on SCK negative edge on the next-to-last
-        // data bit so that it updates data on the rising edge of SCK
-        // on the last data bit.
- 
-        if (count == 3'b111) begin
-            if (writemode == 1'b1) begin
-            wrstb <= 1'b1;
-             end
-        end else begin
-            wrstb <= 1'b0;
-        end
-        end else begin
-        wrstb <= 1'b0;
-        sdoenb <= 1'b1;
-        end		// ! state `DATA
-    end		// ! CSB
-    end			// always @ ~SCK
-
-    always @(posedge SCK or posedge CSB) begin
-    if (CSB == 1'b1) begin
-        // Default state on reset
-        addr <= 8'h00;
-        rdstb <= 1'b0;
-        predata <= 7'b0000000;
-        state  <= `COMMAND;
-        count  <= 3'b000;
-        readmode <= 1'b0;
-        writemode <= 1'b0;
-        fixed <= 3'b000;
-        end else begin
-        // After CSB low, 1st SCK starts command
-        if (state == `COMMAND) begin
-        rdstb <= 1'b0;
-        count <= count + 1;
-        if (count == 3'b000) begin
-            writemode <= SDI;
-        end else if (count == 3'b001) begin
-            readmode <= SDI;
-        end else if (count < 3'b101) begin
-            fixed <= {fixed[1:0], SDI}; 
-        end else if (count == 3'b111) begin
-            state <= `ADDRESS;
-        end
-        end else if (state == `ADDRESS) begin
-        count <= count + 1;
-        addr <= {addr[6:0], SDI};
-        if (count == 3'b111) begin
-            if (readmode == 1'b1) begin
-            rdstb <= 1'b1;
-            end
-            state <= `DATA;
-        end else begin
-            rdstb <= 1'b0;
-        end
-        end else if (state == `DATA) begin
-        predata <= {predata[6:0], SDI};
-        count <= count + 1;
-        if (count == 3'b111) begin
-            if (fixed == 3'b001) begin
-            state <= `COMMAND;
-            end else if (fixed != 3'b000) begin
-            fixed <= fixed - 1;
-            addr <= addr + 1;	// Auto increment address (fixed)
-            end else begin	
-            addr <= addr + 1;	// Auto increment address (streaming)
-            end
-        end else begin
-            rdstb <= 1'b0;
-        end
-        end		// ! state `DATA
-    end		// ! CSB
-    end			// always @ SCK
-
-endmodule // spi_slave
diff --git a/verilog/rtl/spi_sysctrl.v b/verilog/rtl/spi_sysctrl.v
deleted file mode 100644
index 7a34a7f..0000000
--- a/verilog/rtl/spi_sysctrl.v
+++ /dev/null
@@ -1,182 +0,0 @@
-module spi_sysctrl_wb #(
-    parameter BASE_ADR = 32'h2E00_0000,
-    parameter SPI_CFG = 8'h00,
-    parameter SPI_ENA = 8'h04,
-    parameter SPI_PLL_CFG = 8'h08,
-    parameter SPI_MFGR_ID = 8'h0c,
-    parameter SPI_PROD_ID = 8'h10,
-    parameter SPI_MASK_REV = 8'h14,
-    parameter SPI_PLL_BYPASS = 8'h18
-) (
-    input wb_clk_i,
-    input wb_rst_i,
-
-    input [31:0] wb_dat_i,
-    input [31:0] wb_adr_i,
-    input [3:0] wb_sel_i,
-    input wb_cyc_i,
-    input wb_stb_i,
-    input wb_we_i,
-
-    output [31:0] wb_dat_o,
-    output wb_ack_o,
-
-    // Read-Only HKSPI Registers
-    input [7:0] spi_ro_config, // (verify) wire input to the core not connected to HKSPI, what should it be connected to ? 
-    
-    input [4:0] spi_ro_pll_div, 
-    input [2:0] spi_ro_pll_sel,
-    input spi_ro_xtal_ena,
-    input spi_ro_reg_ena, 
-    
-    input [25:0] spi_ro_pll_trim,
-    input spi_ro_pll_dco_ena,  
-
-    input [11:0] spi_ro_mfgr_id,
-    input [7:0] spi_ro_prod_id, 
-    input [3:0] spi_ro_mask_rev, 
-    input pll_bypass
-);
-
-    wire resetn;
-    wire valid;
-    wire ready;
-    wire [3:0] iomem_we;
-
-    assign resetn = ~wb_rst_i;
-    assign valid = wb_stb_i && wb_cyc_i; 
-
-    assign iomem_we = wb_sel_i & {4{wb_we_i}};
-    assign wb_ack_o = ready;
-    
-    spi_sysctrl #(
-        .BASE_ADR(BASE_ADR),
-        .SPI_CFG(SPI_CFG),
-        .SPI_ENA(SPI_ENA),
-        .SPI_PLL_CFG(SPI_PLL_CFG),
-        .SPI_MFGR_ID(SPI_MFGR_ID),
-        .SPI_PROD_ID(SPI_PROD_ID),
-        .SPI_MASK_REV(SPI_MASK_REV),
-        .SPI_PLL_BYPASS(SPI_PLL_BYPASS)
-    ) spi_sysctrl (
-        .clk(wb_clk_i),
-        .resetn(resetn),
-
-        .iomem_addr(wb_adr_i),
-        .iomem_valid(valid),
-        .iomem_wstrb(iomem_we),
-        .iomem_wdata(wb_dat_i),
-        .iomem_rdata(wb_dat_o),
-        .iomem_ready(ready),
-        
-        .spi_ro_config(spi_ro_config), // (verify) wire input to the core not connected to HKSPI, what should it be connected to ? 
-        .spi_ro_pll_div(spi_ro_pll_div), 
-        .spi_ro_pll_sel(spi_ro_pll_sel),
-        .spi_ro_xtal_ena(spi_ro_xtal_ena),
-        .spi_ro_reg_ena(spi_ro_reg_ena), 
-    
-        .spi_ro_pll_trim(spi_ro_pll_trim),
-        .spi_ro_pll_dco_ena(spi_ro_pll_dco_ena),  
-
-        .spi_ro_mfgr_id(spi_ro_mfgr_id),
-        .spi_ro_prod_id(spi_ro_prod_id), 
-        .spi_ro_mask_rev(spi_ro_mask_rev), 
-        .pll_bypass(pll_bypass)
-    );
-
-endmodule
-
-module spi_sysctrl #(
-    parameter BASE_ADR = 32'h2300_0000,
-    parameter SPI_CFG = 8'h00,
-    parameter SPI_ENA = 8'h04,
-    parameter SPI_PLL_CFG = 8'h08,
-    parameter SPI_MFGR_ID = 8'h0c,
-    parameter SPI_PROD_ID = 8'h10,
-    parameter SPI_MASK_REV = 8'h14,
-    parameter SPI_PLL_BYPASS = 8'h18
-) (
-    input clk,
-    input resetn,
-
-    input [31:0] iomem_addr,
-    input iomem_valid,
-    input [3:0] iomem_wstrb,
-    input [31:0] iomem_wdata,
-    output reg [31:0] iomem_rdata,
-    output reg iomem_ready,
-
-    input [7:0] spi_ro_config, // (verify) wire input to the core not connected to HKSPI, what should it be connected to ? 
-    
-    input [4:0] spi_ro_pll_div, 
-    input [2:0] spi_ro_pll_sel,
-    input spi_ro_xtal_ena,
-    input spi_ro_reg_ena, 
-    
-    input [25:0] spi_ro_pll_trim,
-    input spi_ro_pll_dco_ena,  
-
-    input [11:0] spi_ro_mfgr_id,
-    input [7:0] spi_ro_prod_id, 
-    input [3:0] spi_ro_mask_rev, 
-    input pll_bypass
-); 
-    // Read-only Registers
-   
-    wire spi_cfg_sel;
-    wire spi_ena_sel;
-    wire pll_cfg_sel;
-    wire spi_mfgr_sel;
-    wire spi_prod_sel;
-    wire spi_maskrev_sel;
-    wire pll_bypass_sel;
-
-
-    assign spi_cfg_sel  = (iomem_addr[7:0] == SPI_CFG);
-    assign spi_ena_sel  = (iomem_addr[7:0] == SPI_ENA);
-    assign pll_cfg_sel  = (iomem_addr[7:0] == SPI_PLL_CFG);
-    assign spi_mfgr_sel = (iomem_addr[7:0] == SPI_MFGR_ID);
-    assign spi_prod_sel = (iomem_addr[7:0] == SPI_PROD_ID);
-    
-    assign spi_maskrev_sel = (iomem_addr[7:0] == SPI_MASK_REV);
-    assign pll_bypass_sel  = (iomem_addr[7:0] == SPI_PLL_BYPASS);
-
-    always @(posedge clk) begin
-        iomem_ready <= 0;
-        if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin
-            iomem_ready <= 1;
-            if (spi_cfg_sel) begin
-                iomem_rdata <= {24'd0, spi_ro_config};
-
-            end else if (spi_ena_sel) begin
-                iomem_rdata <= {
-                    22'd0,
-                    spi_ro_pll_div,
-                    spi_ro_pll_sel,
-                    spi_ro_xtal_ena,
-                    spi_ro_reg_ena
-                };
-
-            end else if (pll_cfg_sel) begin
-                iomem_rdata <= {
-                    5'd0,
-                    spi_ro_pll_trim,
-                    spi_ro_pll_dco_ena
-                };
-
-            end else if (spi_mfgr_sel) begin
-                iomem_rdata <= {20'd0, spi_ro_mfgr_id};
-
-            end else if (spi_prod_sel) begin
-                iomem_rdata <= {24'd0, spi_ro_prod_id};
-
-            end else if (spi_maskrev_sel) begin
-                iomem_rdata <= {28'd0, spi_ro_mask_rev};
-
-            end else if (pll_bypass_sel) begin
-                iomem_rdata <= {31'd0, pll_bypass};
-            end
-        end
-    end
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/spimemio.v b/verilog/rtl/spimemio.v
index 053aa61..456c2d0 100644
--- a/verilog/rtl/spimemio.v
+++ b/verilog/rtl/spimemio.v
@@ -22,7 +22,7 @@
     input wb_rst_i,
 
     input [31:0] wb_adr_i, 
-     input [31:0] wb_dat_i,
+    input [31:0] wb_dat_i,
     input [3:0] wb_sel_i,
     input wb_we_i,
     input wb_cyc_i,
@@ -36,6 +36,12 @@
     output [31:0] wb_flash_dat_o,
     output [31:0] wb_cfg_dat_o,
 
+    input  pass_thru,
+    input  pass_thru_csb,
+    input  pass_thru_sck,
+    input  pass_thru_sdi,
+    output pass_thru_sdo,
+
     output flash_csb,
     output flash_clk,
 
@@ -280,28 +286,35 @@
         xfer_io3_90 <= xfer_io3_do;
     end
 
-    assign flash_csb = config_en ? xfer_csb : config_csb;
-    assign flash_clk = config_en ? xfer_clk : config_clk;
+    wire pass_thru;
+    wire pass_thru_csb;
+    wire pass_thru_sck;
+    wire pass_thru_sdi;
+    wire pass_thru_sdo;
 
-    assign flash_csb_oeb = ~resetn;
-    assign flash_clk_oeb = ~resetn;
+    assign flash_csb = (pass_thru) ? pass_thru_csb : (config_en ? xfer_csb : config_csb);
+    assign flash_clk = (pass_thru) ? pass_thru_sck : (config_en ? xfer_clk : config_clk);
 
-    assign flash_io0_oeb = ~resetn ? 1'b1 : (config_en ? ~xfer_io0_oe : ~config_oe[0]);
-    assign flash_io1_oeb = ~resetn ? 1'b1 : (config_en ? ~xfer_io1_oe : ~config_oe[1]);
-    assign flash_io2_oeb = ~resetn ? 1'b1 : (config_en ? ~xfer_io2_oe : ~config_oe[2]);
-    assign flash_io3_oeb = ~resetn ? 1'b1 : (config_en ? ~xfer_io3_oe : ~config_oe[3]);
+    assign flash_csb_oeb = (pass_thru) ? 1'b0 : (~resetn ? 1'b1 : 1'b0);
+    assign flash_clk_oeb = (pass_thru) ? 1'b0 : (~resetn ? 1'b1 : 1'b0);
+
+    assign flash_io0_oeb = pass_thru ? 1'b0 : ~resetn ? 1'b1 : (config_en ? ~xfer_io0_oe : ~config_oe[0]);
+    assign flash_io1_oeb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? ~xfer_io1_oe : ~config_oe[1]);
+    assign flash_io2_oeb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? ~xfer_io2_oe : ~config_oe[2]);
+    assign flash_io3_oeb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? ~xfer_io3_oe : ~config_oe[3]);
     assign flash_csb_ieb = 1'b1;	/* Always disabled */
     assign flash_clk_ieb = 1'b1;	/* Always disabled */
 
-    assign flash_io0_ieb = ~resetn ? 1'b1 : (config_en ? xfer_io0_oe : config_oe[0]);
-    assign flash_io1_ieb = ~resetn ? 1'b1 : (config_en ? xfer_io1_oe : config_oe[1]);
-    assign flash_io2_ieb = ~resetn ? 1'b1 : (config_en ? xfer_io2_oe : config_oe[2]);
-    assign flash_io3_ieb = ~resetn ? 1'b1 : (config_en ? xfer_io3_oe : config_oe[3]);
+    assign flash_io0_ieb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? xfer_io0_oe : config_oe[0]);
+    assign flash_io1_ieb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? xfer_io1_oe : config_oe[1]);
+    assign flash_io2_ieb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? xfer_io2_oe : config_oe[2]);
+    assign flash_io3_ieb = (pass_thru | ~resetn) ? 1'b1 : (config_en ? xfer_io3_oe : config_oe[3]);
 
-    assign flash_io0_do = config_en ? (config_ddr ? xfer_io0_90 : xfer_io0_do) : config_do[0];
+    assign flash_io0_do = pass_thru ? pass_thru_sdi : (config_en ? (config_ddr ? xfer_io0_90 : xfer_io0_do) : config_do[0]);
     assign flash_io1_do = config_en ? (config_ddr ? xfer_io1_90 : xfer_io1_do) : config_do[1];
     assign flash_io2_do = config_en ? (config_ddr ? xfer_io2_90 : xfer_io2_do) : config_do[2];
     assign flash_io3_do = config_en ? (config_ddr ? xfer_io3_90 : xfer_io3_do) : config_do[3];
+    assign pass_thru_sdo = pass_thru ? flash_io1_di : 1'b0;
 
     wire xfer_dspi = din_ddr && !din_qspi;
     wire xfer_ddr = din_ddr && din_qspi;
diff --git a/verilog/rtl/striVe_spi.v b/verilog/rtl/striVe_spi.v
deleted file mode 100644
index 54643c3..0000000
--- a/verilog/rtl/striVe_spi.v
+++ /dev/null
@@ -1,194 +0,0 @@
-//-------------------------------------
-// SPI controller for striVe (PicoSoC)
-//-------------------------------------
-// Written by Tim Edwards
-// efabless, inc. December 23, 2019
-//-------------------------------------
-
-`include "spi_slave.v"
-
-//-----------------------------------------------------------
-// This is a standalone slave SPI for the striVe chip that is
-// intended to be independent of the picosoc and independent
-// of all IP blocks except the power-on-reset.  This SPI has
-// register outputs controlling the functions that critically
-// affect operation of the picosoc and so cannot be accessed
-// from the picosoc itself.  This includes the PLL enables
-// and trim, and the crystal oscillator enable.  It also has
-// a general reset for the picosoc, an IRQ input, a bypass for
-// the entire crystal oscillator and PLL chain, the
-// manufacturer and product IDs and product revision number.
-// To be independent of the 1.8V regulator, the slave SPI is
-// synthesized with the 3V digital library and runs off of
-// the 3V supply.
-//
-//-----------------------------------------------------------
-
-//------------------------------------------------------------
-// Picochip defined registers:
-// Register 0:  SPI status and control (unused & reserved)
-// Register 1h: Mask revision (= 0) (readonly)
-// Register 1l and 2:  Manufacturer ID (0x456) (readonly)
-// Register 3:  Product ID (= 2) (readonly)
-//
-// Register 4:  SkyWater IP enable and trim (xtal, regulator, PLL)  (8 bits)
-// Register 5:  PLL bypass (1 bit)
-// Register 6:  IRQ (1 bit)
-// Register 7:  reset (1 bit)
-// Register 8:  trap (1 bit) (readonly)
-//------------------------------------------------------------
-
-module striVe_spi(
-`ifdef LVS
-    vdd, vss, 
-`endif
-    RSTB, SCK, SDI, CSB, SDO, sdo_enb,
-    xtal_ena, reg_ena, pll_dco_ena, pll_div, pll_sel,
-    pll_trim, pll_bypass, irq, reset, RST, trap,
-    mfgr_id, prod_id, mask_rev_in, mask_rev);
-
-`ifdef LVS
-    inout vdd;	    // 3.3V supply
-    inout vss;	    // common ground
-`endif
-    
-    input RSTB;	    // 3.3V domain
-    input SCK;	    // 3.3V domain
-    input SDI;	    // 3.3V domain
-    input CSB;	    // 3.3V domain
-    output SDO;	    // 3.3V domain
-    output sdo_enb;
-    output xtal_ena;
-    output reg_ena;
-    output pll_dco_ena;
-    output [25:0] pll_trim;
-    output [2:0] pll_sel;
-    output [4:0] pll_div;
-    output pll_bypass;
-    output irq;
-    output reset;
-    output RST;
-    input  trap;
-    input [3:0] mask_rev_in;	// metal programmed;  3.3V domain
-    output [11:0] mfgr_id;
-    output [7:0] prod_id;
-    output [3:0] mask_rev;
-
-    reg xtal_ena;
-    reg reg_ena;
-    reg [25:0] pll_trim;
-    reg [4:0] pll_div;
-    reg [2:0] pll_sel;
-    reg pll_dco_ena;
-    reg pll_bypass;
-    reg irq;
-    reg reset;
-
-    wire [7:0] odata;
-    wire [7:0] idata;
-    wire [7:0] iaddr;
-
-    wire trap;
-    wire rdstb;
-    wire wrstb;
-
-    assign RST = ~RSTB;
-
-    // Instantiate the SPI slave module
-
-    spi_slave U1 (
-    .SCK(SCK),
-    .SDI(SDI),
-    .CSB(CSB),
-    .SDO(SDO),
-    .sdoenb(sdo_enb),
-    .idata(odata),
-    .odata(idata),
-    .oaddr(iaddr),
-    .rdstb(rdstb),
-    .wrstb(wrstb)
-    );
-
-    wire [11:0] mfgr_id;
-    wire [7:0] prod_id;
-    wire [3:0] mask_rev;
-
-    assign mfgr_id = 12'h456;		// Hard-coded
-    assign prod_id = 8'h05;		// Hard-coded
-    assign mask_rev = mask_rev_in;	// Copy in to out.
-
-    // Send register contents to odata on SPI read command
-    // All values are 1-4 bits and no shadow registers are required.
-
-    assign odata = 
-    (iaddr == 8'h00) ? 8'h00 :	// SPI status (fixed)
-    (iaddr == 8'h01) ? {mask_rev, mfgr_id[11:8]} : 	// Mask rev (metal programmed)
-    (iaddr == 8'h02) ? mfgr_id[7:0] :	// Manufacturer ID (fixed)
-    (iaddr == 8'h03) ? prod_id :	// Product ID (fixed)
-    (iaddr == 8'h04) ? {5'b00000, xtal_ena, reg_ena, pll_dco_ena} :
-    (iaddr == 8'h05) ? {7'b0000000, pll_bypass} :
-    (iaddr == 8'h06) ? {7'b0000000, irq} :
-    (iaddr == 8'h07) ? {7'b0000000, reset} :
-    (iaddr == 8'h08) ? {7'b0000000, trap} :
-    (iaddr == 8'h09) ? pll_trim[7:0] :
-    (iaddr == 8'h0a) ? pll_trim[15:8] :
-    (iaddr == 8'h0b) ? pll_trim[23:16] :
-    (iaddr == 8'h0c) ? {6'b000000, pll_trim[25:24]} :
-    (iaddr == 8'h0d) ? {5'b00000, pll_sel} :
-    (iaddr == 8'h0e) ? {3'b000, pll_div} :
-               8'h00;	// Default
-
-    // Register mapping and I/O to slave module
-
-    always @(posedge SCK or negedge RSTB) begin
-    if (RSTB == 1'b0) begin
-        // Set trim for PLL at (almost) slowest rate (~90MHz).  However,
-        // pll_trim[12] must be set to zero for proper startup.
-        pll_trim <= 26'b11111111111110111111111111;
-        pll_sel <= 3'b000;
-        pll_div <= 5'b00100;	// Default divide-by-8
-        xtal_ena <= 1'b1;
-        reg_ena <= 1'b1;
-        pll_dco_ena <= 1'b1;	// Default free-running PLL
-        pll_bypass <= 1'b1;		// NOTE: Default bypass mode (don't use PLL)
-        irq <= 1'b0;
-        reset <= 1'b0;
-    end else if (wrstb == 1'b1) begin
-        case (iaddr)
-        8'h04: begin
-             pll_dco_ena <= idata[2];
-             reg_ena    <= idata[1];
-             xtal_ena  <= idata[0];
-               end
-        8'h05: begin
-             pll_bypass <= idata[0];
-               end
-        8'h06: begin
-             irq <= idata[0];
-               end
-        8'h07: begin
-             reset <= idata[0];
-               end
-        // Register 8 is read-only
-        8'h09: begin
-              pll_trim[7:0] <= idata;
-               end
-        8'h0a: begin
-              pll_trim[15:8] <= idata;
-               end
-        8'h0b: begin
-              pll_trim[23:16] <= idata;
-               end
-        8'h0c: begin
-              pll_trim[25:24] <= idata[1:0];
-               end
-        8'h0d: begin
-             pll_sel <= idata[2:0];
-               end
-        8'h0e: begin
-             pll_div <= idata[4:0];
-               end
-        endcase	// (iaddr)
-    end
-    end
-endmodule	// striVe_spi_orig
diff --git a/verilog/rtl/sysctrl.v b/verilog/rtl/sysctrl.v
index 9d66e66..62ed4fc 100644
--- a/verilog/rtl/sysctrl.v
+++ b/verilog/rtl/sysctrl.v
@@ -2,8 +2,7 @@
     parameter BASE_ADR      = 32'h2F00_0000,
     parameter PLL_OUT       = 8'h0c,
     parameter TRAP_OUT      = 8'h10,
-    parameter IRQ7_SRC      = 8'h14,
-    parameter IRQ8_SRC      = 8'h18
+    parameter IRQ7_SRC      = 8'h14
 ) (
     input wb_clk_i,
     input wb_rst_i,
@@ -20,8 +19,7 @@
     
     output pll_output_dest,
     output trap_output_dest,
-    output irq_7_inputsrc,
-    output irq_8_inputsrc
+    output irq_7_inputsrc
 
 );
 
@@ -40,8 +38,7 @@
         .BASE_ADR(BASE_ADR),
         .PLL_OUT(PLL_OUT),
         .TRAP_OUT(TRAP_OUT),
-        .IRQ7_SRC(IRQ7_SRC),
-        .IRQ8_SRC(IRQ8_SRC)
+        .IRQ7_SRC(IRQ7_SRC)
     ) sysctrl (
         .clk(wb_clk_i),
         .resetn(resetn),
@@ -56,8 +53,7 @@
         .pll_output_dest(pll_output_dest),
         .trap_output_dest(trap_output_dest), 
     
-        .irq_7_inputsrc(irq_7_inputsrc),
-        .irq_8_inputsrc(irq_8_inputsrc)
+        .irq_7_inputsrc(irq_7_inputsrc)
     );
 
 endmodule
@@ -66,8 +62,7 @@
     parameter BASE_ADR = 32'h2300_0000,
     parameter PLL_OUT       = 8'h0c,
     parameter TRAP_OUT      = 8'h10,
-    parameter IRQ7_SRC      = 8'h14,
-    parameter IRQ8_SRC      = 8'h18
+    parameter IRQ7_SRC      = 8'h14
 ) (
     input clk,
     input resetn,
@@ -81,27 +76,23 @@
 
     output pll_output_dest,
     output trap_output_dest,
-    output irq_7_inputsrc,
-    output irq_8_inputsrc
+    output irq_7_inputsrc
 ); 
 
     reg pll_output_dest;
     reg trap_output_dest;
     reg irq_7_inputsrc;
-    reg irq_8_inputsrc;
 
     assign pll_out_sel  = (iomem_addr[7:0] == PLL_OUT);
     assign trap_out_sel = (iomem_addr[7:0] == TRAP_OUT);
 
     assign irq7_sel  = (iomem_addr[7:0] == IRQ7_SRC);
-    assign irq8_sel  = (iomem_addr[7:0] == IRQ8_SRC);
 
     always @(posedge clk) begin
         if (!resetn) begin
             pll_output_dest <= 0;
             trap_output_dest <= 0;
             irq_7_inputsrc <= 0;
-            irq_8_inputsrc <= 0;
         end else begin
             iomem_ready <= 0;
             if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin
@@ -122,11 +113,6 @@
                     if (iomem_wstrb[0])
                         irq_7_inputsrc <= iomem_wdata[0];
 
-                end else if (irq8_sel) begin
-                    iomem_rdata <= {31'd0, irq_8_inputsrc};
-                    if (iomem_wstrb[0])
-                        irq_8_inputsrc <= iomem_wdata[0];
-
                 end
             end
         end
diff --git a/verilog/rtl/user_id_programming.v b/verilog/rtl/user_id_programming.v
new file mode 100644
index 0000000..4e80555
--- /dev/null
+++ b/verilog/rtl/user_id_programming.v
@@ -0,0 +1,36 @@
+// This module represents an unprogrammed mask revision
+// block that is configured with via programming on the
+// chip top level.  This value is passed to the block as
+// a parameter
+
+module user_id_programming #(
+    parameter [ 0:0] USER_PROJECT_ID = 32'h0
+) (
+    output [31:0] mask_rev
+);
+    wire [31:0] mask_rev;
+    wire [31:0] user_proj_id_high;
+    wire [31:0] user_proj_id_low;
+
+    // For the mask revision input, use an array of digital constant logic cells
+
+    sky130_fd_sc_hd__conb_1 mask_rev_value [31:0] (
+        `ifdef LVS
+            .vpwr(vdd1v8),
+            .vpb(vdd1v8),
+            .vnb(vss),
+            .vgnd(vss),
+        `endif
+            .HI(user_proj_id_high),
+            .LO(user_proj_id_low)
+    );
+
+    genvar i;
+    generate
+	for (i = 0; i < 32; i = i+1) begin
+	    assign mask_rev[i] = (USER_PROJECT_ID & (32'h01 << i)) ?
+			user_proj_id_high[i] : user_proj_id_low[i];
+	end
+    endgenerate
+
+endmodule
diff --git a/verilog/rtl/wb_intercon.v b/verilog/rtl/wb_intercon.v
index 3a2c58f..1397cd4 100644
--- a/verilog/rtl/wb_intercon.v
+++ b/verilog/rtl/wb_intercon.v
@@ -24,12 +24,12 @@
         {8'hFF, {24{1'b0}} }
     };
     parameter [NS*AW-1:0] SLAVE_ADR = {
-        {8'h28, {24{1'b0}} },    // Flash Configuration Register
-        {8'h23, {24{1'b0}} },    // System Control
-        {8'h21, {24{1'b0}} },    // GPIOs
-        {8'h20, {24{1'b0}} },    // UART 
-        {8'h10, {24{1'b0}} },    // Flash 
-        {8'h00, {24{1'b0}} }     // RAM
+        { 32'h2800_0000 },    // Flash Configuration Register
+        { 32'h2200_0000 },    // System Control
+        { 32'h2100_0000 },    // GPIOs
+        { 32'h2000_0000 },    // UART 
+        { 32'h1000_0000 },    // Flash 
+        { 32'h0000_0000 }     // RAM
     };
     
     wire [NS-1: 0] slave_sel;
@@ -54,4 +54,4 @@
             wbm_dat_o[i%DW] = wbm_dat_o[i%DW] | (slave_sel[i/DW] & wbs_dat_i[i]);
     end
  
-endmodule
\ No newline at end of file
+endmodule
