diff --git a/gds/jar_illegal_logic.gds.gz b/gds/jar_illegal_logic.gds.gz
deleted file mode 100644
index eb4b5b2..0000000
--- a/gds/jar_illegal_logic.gds.gz
+++ /dev/null
Binary files differ
diff --git a/gds/user_module_348953272198890067.gds.gz b/gds/user_module_348953272198890067.gds.gz
deleted file mode 100644
index 9fa7679..0000000
--- a/gds/user_module_348953272198890067.gds.gz
+++ /dev/null
Binary files differ
diff --git a/gds/user_module_348961139276644947.gds.gz b/gds/user_module_348961139276644947.gds.gz
deleted file mode 100644
index 65484d7..0000000
--- a/gds/user_module_348961139276644947.gds.gz
+++ /dev/null
Binary files differ
diff --git a/gds/user_project_wrapper.gds.gz b/gds/user_project_wrapper.gds.gz
deleted file mode 100644
index 0eb7798..0000000
--- a/gds/user_project_wrapper.gds.gz
+++ /dev/null
Binary files differ
diff --git a/verilog/rtl/036_illegal_logic.v b/verilog/rtl/036_illegal_logic.v
deleted file mode 100644
index 1091f21..0000000
--- a/verilog/rtl/036_illegal_logic.v
+++ /dev/null
@@ -1,41 +0,0 @@
-module jar_illegal_logic
-(
-	input  [7:0] io_in,
-	output [7:0] io_out
-);
-	wire clk   = io_in[0];
-	wire reset = io_in[1];
-	wire oe    = io_in[2];
-	wire [6:0] led_out;
-	assign io_out[6:0] = (oe) ? led_out : 7'b0;
-
-	reg [4:0] index;
-	wire [3:0] hex;
-
-	wire v0 = index[4];
-	wire v1 = index[3];
-	wire v2 = index[2];
-	wire v3 = index[1];
-	wire v4 = index[0];
-
-	wire n4 = !v4;
-	wire n3 = !v3;
-	wire n2 = !v2;
-	wire n1 = !v1;
-	wire n0 = !v0;
-
-	always @(posedge clk) begin
-		if (reset) begin
-			index <= 0;
-		end else begin
-			hex[3] <= (n0&n1&n2&v3)|(n0&v1&v2&v3&v4)|(v0&n1&n2&n3)|(v0&v1&v2&n3)|(n0&v1&v2&n3&n4)|(v0&v2&v3&n4)|(n0&n1&n2&v4)|(n0&v1&n2&n3);
-			hex[2] <= (n0&v1&n2&v4)|(v0&v1&n2&n3&n4)|(v0&n1&v2&v4)|(n0&v1&v2&n3&n4)|(v0&v2&v3&n4)|(v0&n1&n3&n4)|(n0&v1&v3&n4)|(n2&v3&n4)|(v1&n2&v3);
-			hex[1] <= (v0&n1&v2&n3&v4)|(v0&v1&n2&n3&n4)|(n0&v2&v3&v4)|(v0&v1&n2&v4)|(n0&v1&v2&n3&n4)|(n0&n2&v3&n4)|(n0&v1&v2&v4);
-			hex[0] <= (v0&n1&v3&v4)|(n0&n1&v2&n3)|(v1&n2&v3&n4)|(v1&n2&n3&v4)|(v0&n1&n3&n4)|(n0&n1&n2&v4)|(n0&n2&v3&n4)|(n0&v1&v2&v4)|(n0&v1&v3&n4)|(n0&v1&n2&n3);
-			index <= index + 1;
-		end
-	end
-
-	seg7hex seg7hex(.hex(hex), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/039_core.v b/verilog/rtl/039_core.v
deleted file mode 100644
index da485d6..0000000
--- a/verilog/rtl/039_core.v
+++ /dev/null
@@ -1,286 +0,0 @@
-///////////////////////////////////////////////////////////////////////////
-// M0 - 16-bit serial SUBLEQ processor
-//
-// Copyright 2022 William Moyes
-//
-
-`default_nettype none
-`timescale 100us/10ps
-
-
-///////////////////////////////////////////////////////////////////////////
-// SPI Controller
-//
-// 16-bit Address + 16-bit Data controller and timing generator
-//
-module SPIController (
-  // System Interfaces
-  input wire clk,
-  input wire rst,
-
-  // SPI Bus Interfaces
-  output reg CS0,
-  output reg CS1,
-  output reg SPICLK,
-  output reg MOSI,
-  input wire MISO,
-
-  // Input Signals
-  input wire Addr15, 		// Sampled on Phase 01
-  input wire Read_notWrite,	// Sampled on Phase 16
-  input wire Addr,		// Sampled on Phase 18[bit0/LSB], 20[bit1], ..., 44[bit13], 46[bit14/MSB], bit 15 not sampled (see Addr15)
-  input wire Data,		// Sampled on Phase 50[bit0/LSB], 52[bit1], ..., 78[bit14], 80[bit15/MSB]
-
-
-  // Timing Output Signals
-  output reg ShiftAddr,		// Asserted when the Address should be shifted
-  output reg ShiftDataRead,     // Asserted when the data register collecting data read from memory should be shifted
-  output reg ShiftDataWrite,    // Asserted when the data regsiter providing data to be written to memory should be shifted
-  output reg PresetCarry,       // Asserted the clock before data motion starts
-  output reg EndOfPhase         //
-);
-
-  // SPI sequencer
-  reg [6:0] SPIphase;
-  always @(posedge clk) begin
-    if (rst)
-      SPIphase <= 0;
-    else if (SPIphase == 83)
-      SPIphase <= 0;
-    else
-      SPIphase <= SPIphase + 1;
-  end
-
-  // SPI bus signal generator
-  always @(posedge clk) begin
-    if (SPIphase <= 1) begin
-      CS0 <= 1;
-      CS1 <= 1;
-      SPICLK <= 0;
-      MOSI <= 0;
-    end else begin
-      CS0 <= CSreg;
-      CS1 <= !CSreg;
-      if (SPIphase <= 81)
-        SPICLK <= SPIphase[0];
-      else
-        SPICLK <= 0;
-
-      if (SPIphase <= 13)
-        MOSI <= 0;
-      else if (SPIphase <= 15)
-        MOSI <= 1;
-      else if (SPIphase <= 17) begin
-        if (SPIphase[0] == 0)
-          MOSI <= Read_notWrite;
-      end else if (SPIphase <= 47) begin
-        if (SPIphase[0] == 0)
-          MOSI <= Addr;		// TODO: Generate the Address Shift timing pulse output
-      end else if (SPIphase <= 49)
-        MOSI <= 0;
-      else begin
-        if (Read_notWrite)
-          MOSI <= 0;
-        else begin
-          if (SPIphase[0] == 0)
-            MOSI <= Data;      	// TODO: Generate the Address Shift timing pulse output
-        end
-      end
-    end
-  end
-
-  // Generate Address Shift Enable Signals
-  always @(posedge clk) begin
-    ShiftAddr <= ((SPIphase >= 18) && (SPIphase <= 48) && (SPIphase[0] == 0));
-    ShiftDataRead <= ((SPIphase >= 51) && (SPIphase <= 81) && (SPIphase[0] == 1) && Read_notWrite);
-    ShiftDataWrite <= ((SPIphase >= 50) && (SPIphase <= 80) && (SPIphase[0] == 0) && !Read_notWrite);
-    PresetCarry <= (SPIphase == 17);
-    EndOfPhase <= (SPIphase == 83);
-  end
-
-  reg CSreg;
-  always @(posedge clk) begin
-    if (SPIphase == 1)
-      CSreg <= Addr15;
-  end
-
-endmodule
-
-
-
-///////////////////////////////////////////////////////////////////////////
-// M0 top level
-//
-module moyes0_top_module (
-  input  [7:0] io_in,
-  output [7:0] io_out
-);
-
-  // --- ASIC Inputs ---
-  wire clk     = io_in[0];      // System clock (~6000 Hz)
-  wire rst     = io_in[1];      // Reset line, active high
-  wire spi_miso= io_in[2];      // SPI bus, ASIC input, target output
-  wire uart_rx = io_in[3];      // Serial port, ASIC Receive
-  wire in4     = io_in[4];
-  wire in5     = io_in[5];
-  wire in6     = io_in[6];
-  wire in7     = io_in[7];
-
-  // --- ASIC Outputs ---
-  wire spi_cs0;
-  wire spi_cs1;
-  wire spi_clk;
-  wire spi_mosi;
-  wire uart_tx;
-  wire out5;
-  wire out6;
-  wire out7;
-
-  wire [7:0] io_out;
-  assign io_out[0] = spi_cs0;  // SPI bus, Chip Select for ROM, Words 0000-7FFF
-  assign io_out[1] = spi_cs1;  // SPI bus, Chip Select for RAM, Words 8000-FFFF
-  assign io_out[2] = spi_clk;  // SPI bus, Clock
-  assign io_out[3] = spi_mosi; // SPI bus, ASIC output, target input
-  assign io_out[4] = uart_tx;  // Serial port, ASIC Transmit
-  assign io_out[5] = out5;
-  assign io_out[6] = out6;
-  assign io_out[7] = out7;
-
-  // --- Internal Timing Signals ---
-  wire ShiftAddr;
-  wire ShiftDataRead;
-  wire ShiftDataWrite;
-  wire PresetCarry;
-  wire EndOfPhase;
-
-  // --- SPI Control Signals
-  wire Addr15;
-  wire Read_notWrite;
-  wire SPIAddr;
-  wire SPIDataIn;
-
-  // --- CPU Registers ---
-  reg [15:0] PC;
-  reg [15:0] TMP;
-  reg [15:0] ADR;
-  reg PCCarry;
-  reg TBorrow;
-  reg TZero;
-  reg LEQ;
-
-
-  SPIController spi (
-     // System Interfaces
-    .clk(clk),
-    .rst(rst),
-
-    // SPI Bus Interfaces
-    .CS0(spi_cs0),
-    .CS1(spi_cs1),
-    .SPICLK(spi_clk),
-    .MOSI(spi_mosi),
-    .MISO(spi_miso),
-
-    // Input Signals
-    .Addr15(Addr15),
-    .Read_notWrite(Read_notWrite),
-    .Addr(SPIAddr),
-    .Data(SPIDataIn),
-
-    // Timing Output Signals
-    .ShiftAddr(ShiftAddr),
-    .ShiftDataRead(ShiftDataRead),
-    .ShiftDataWrite(ShiftDataWrite),
-    .PresetCarry(PresetCarry),
-    .EndOfPhase(EndOfPhase)
-  );
-
-  reg [2:0]  CPUphase;
-  always @(posedge clk) begin
-    if (rst)
-      CPUphase <= 3'd0;
-    else if (!EndOfPhase)
-      CPUphase <= CPUphase;
-    else begin
-      if (CPUphase == 3'd5)
-         CPUphase <= 3'd0;
-      else
-         CPUphase <= CPUphase + 3'd1;
-    end
-  end
-
-  wire PCphase = (CPUphase == 0) || (CPUphase == 2) || (CPUphase == 5);
-
-  assign Addr15 = PCphase ? PC[15] : ADR[15];
-
-  assign Read_notWrite = (CPUphase != 4);
-
-  always @(posedge clk) begin
-
-    if (rst)
-      PC  <= 16'h0000;
-    else begin
-      if (PresetCarry)
-        PCCarry <= 1;
-
-      if (PCphase && ShiftAddr) begin
-        PCCarry <= PC[0] & PCCarry;
-        PC <= {PC[0] ^ PCCarry, PC[15:1]};
-      end
-
-      if ((CPUphase == 5) && ShiftDataRead) begin
-        PC <= {LEQ ? spi_miso : PC[0], PC[15:1]};
-      end
-    end
-  end
-
-  assign SPIAddr = PCphase ? PC[0] : ADR[0];
-
-  assign SPIDataIn = TMP[0];
-
-  wire ReadADR = (CPUphase == 0) || (CPUphase == 2);
-  wire ReadTMP = (CPUphase == 1) || (CPUphase == 3);
-
-  always @(posedge clk) begin
-    if (ReadADR & ShiftDataRead)
-      ADR <= {spi_miso, ADR[15:1]};
-
-    if (!PCphase & ShiftAddr)
-      ADR <= {ADR[0], ADR[15:1]};
-  end
-
-
-  wire sub_b;
-  wire sub_r;
-  assign {sub_b, sub_r} = spi_miso - TMP[0] - TBorrow;
-
-  always @(posedge clk) begin
-    if (PresetCarry) begin
-      TBorrow <= 0;
-      TZero <= 1;
-    end
-
-    if ((CPUphase == 1) & ShiftDataRead)
-      TMP <= {spi_miso, TMP[15:1]};
-
-    if ((CPUphase == 3) & ShiftDataRead) begin
-      TBorrow <= sub_b;
-      TMP <= {sub_r, TMP[15:1]};
-      if (sub_r)
-        TZero <= 0;
-    end
-
-    if (!Read_notWrite & ShiftDataWrite)
-      TMP <= {TMP[0], TMP[15:1]};
-
-  end
-
-  always @(posedge clk) begin
-    if (EndOfPhase & (CPUphase == 3)) begin
-      LEQ <= TZero | TBorrow;
-    end
-  end
-
-
-
-endmodule
diff --git a/verilog/rtl/051_counter.v b/verilog/rtl/051_counter.v
deleted file mode 100644
index 8d1fe24..0000000
--- a/verilog/rtl/051_counter.v
+++ /dev/null
@@ -1,46 +0,0 @@
-`default_nettype none
-
-module xor_shift32_quantamhd #( parameter MAX_COUNT = 1000 ) (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    wire [5:0] seed_input = io_in[7:2];
-
-    // external clock is 1000Hz, so need 10 bit counter
-    reg [9:0] second_counter;
-    reg [3:0] digit;
-    reg unsigned [31:0] inital_state;
-
-    always @(posedge clk) begin
-        // Seed Setting
-        if (reset) begin
-            inital_state <= {26'b00000000000000000000000000, seed_input};
-            second_counter <= 0;
-            digit <= 0;
-        end else begin
-            // if up to 16e6
-            if (second_counter == MAX_COUNT) begin
-                // reset
-                second_counter <= 0;
-                
-                inital_state = inital_state ^ (inital_state << 13);
-                inital_state = inital_state ^ (inital_state >> 17);
-                inital_state = inital_state ^ (inital_state << 5);
-
-                // increment digit
-                digit <= {1'b0, inital_state[2:0]};
-            end else 
-                // increment counter
-                second_counter <= second_counter + 1'b1;
-        end
-    end
-
-    // instantiate segment display
-    seg7 seg7(.counter(digit), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/053_player.v b/verilog/rtl/053_player.v
deleted file mode 100644
index 23306a6..0000000
--- a/verilog/rtl/053_player.v
+++ /dev/null
@@ -1,168 +0,0 @@
-`default_nettype none
-
-/*
-    Verilog code for playing a RTTL ringtone on a Piezo Speaker
-
-    Copyright 2022 Milosch Meriac <milosch@meriac.com>
-    Copyright 2022 Jiaxun Yang <jiaxun.yang@flygoat.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holder nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without specific prior written permission.
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-    HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-module flygoat_tt02_play_tune #( parameter MAX_COUNT = 100 ) (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-    wire [1:0] db_sel_in = io_in[3:2];
-
-    wire [10:0] db_entry;
-
-    wire [10:0] flygoat_db_entry;
-    wire [10:0] bh5hso_db_entry;
-    wire [10:0] gm3hso_db_entry;
-    wire [10:0] planetes_db_entry;
-
-    reg [6:0] note_address;
-    reg [12:0] ticks;
-    reg [6:0] freq, counter;
-    reg [1:0] db_sel_r;
-    reg speaker;
-
-    reg [3:0] led_out;
-
-    assign io_out[0] = speaker;
-    assign io_out[1] = ~speaker;
-    assign io_out[5:2] = led_out;
-    assign io_out[7:6] = 2'bzz;
-
-    always @(posedge clk) begin
-
-        // if reset, set note_address to 0
-        if (reset) begin
-            note_address <= 0;
-            ticks <= 0;
-            freq <= 0;
-            counter <= 0;
-            speaker <= 0;
-            db_sel_r <= db_sel_in;
-        end else begin
-            if (!ticks) begin
-                if (note_address<MAX_COUNT) begin
-                    note_address <= note_address + 1'b1;
-                end else begin
-                    note_address <= 0;
-                end
-            end
-
-            // tone frequency divider
-            if (counter>0) begin
-                counter <= counter - 1'b1;
-                speaker <= counter >= (freq/2);
-            end else begin
-                counter <= freq;
-                speaker <= 1'b0;
-            end
-
-        end
-    end
-
-    always @(negedge clk) begin
-
-        if (!reset) begin
-            if (ticks>0) begin
-                ticks <= ticks - 1'b1;
-            end else begin
-                // update per-note delay
-                ticks[12:9] <= db_entry[3:0];
-                ticks[8:0] <= 0;
-
-                // reset tone generator
-                counter <= db_entry[10:4];
-                freq <= db_entry[10:4];
-            end
-
-        end
-
-    end
-
-    // instantiate tune database
-    flygoat_tune_db flygoat_tune_db(.address(note_address), .db_entry(flygoat_db_entry));
-    gm3hso_tune_db gm3hso_tune_db(.address(note_address), .db_entry(gm3hso_db_entry));
-    bh5hso_tune_db bh5hso_tune_db(.address(note_address), .db_entry(bh5hso_db_entry));
-    planetes_tune_db planetes_tune_db(.address(note_address), .db_entry(planetes_db_entry));
-
-    genvar i;
-    generate
-        for (i=0; i < 11; i=i+1) begin
-            mux4_cell tune_db_mux (
-                .a(flygoat_db_entry[i]),
-                .b(gm3hso_db_entry[i]),
-                .c(bh5hso_db_entry[i]),
-                .d(planetes_db_entry[i]),
-                .sel(db_sel_r),
-                .out(db_entry[i])
-            );
-        end
-    endgenerate
- 
-    reg [24:0] cnt;
-    always@(posedge clk) begin
-        if(reset) begin
-            cnt <= 25'd0;
-        // 10 khz clk, 1s led peroid
-        end else if(cnt>=(10000-1)) begin
-            cnt <= 25'd0;
-        end else begin
-            cnt <= cnt + 25'd1;
-        end
-    end
-
-    reg [1:0] led_cnt = 2'd0;
-    always@(posedge clk) begin
-        if(reset) begin
-            led_cnt <= 2'd0;
-        end else if(cnt==(10000-1)) begin
-            if(led_cnt==2'd3) led_cnt <= 2'd0;
-            else led_cnt <= led_cnt + 2'd1;
-        end
-    end
-
-    always@(*) begin
-        if (reset) begin
-            led_out = 4'b0000;
-        end else begin
-	        case(led_cnt)
-		        3'd0: led_out = 4'b1110;
-		        3'd1: led_out = 4'b1101;
-		        3'd2: led_out = 4'b1011;
-		        3'd3: led_out = 4'b0111;
-		    default: led_out = 4'b1111;
-	        endcase
-        end
-    end
-
-endmodule
diff --git a/verilog/rtl/054_jleightcap_top.v b/verilog/rtl/054_jleightcap_top.v
deleted file mode 100644
index 983ccf6..0000000
--- a/verilog/rtl/054_jleightcap_top.v
+++ /dev/null
@@ -1,19 +0,0 @@
-`timescale 100fs/100fs
-`define default_netname none
-
-// a small shim to get names lined up correctly.
-// - tinytapeout expects all named "io_{in,out}"; this is possible in clash but annoying for grabbing clock and reset
-// - tinytapeout expects unique name, here just prefixing with my github username
-// this is written with the constraint as to be doing basically nothing.
-
-module jleightcap_top( input wire  [7:0] io_in
-                     , output wire [7:0] io_out
-                     );
-
-    top _top( .clk(io_in[0])
-            , .rst(io_in[1])
-            , .instr(io_in[7:2])
-            , .io_out(io_out)
-            );
-
-endmodule
diff --git a/verilog/rtl/055_toplevel.v b/verilog/rtl/055_toplevel.v
deleted file mode 100644
index 0985ba2..0000000
--- a/verilog/rtl/055_toplevel.v
+++ /dev/null
@@ -1,44 +0,0 @@
-`default_nettype none
-
-module tt2_tholin_namebadge (
-	input [7:0] io_in,
-	output [7:0] io_out
-);
-	wire CLK = io_in[0];
-	wire RST = io_in[1];
-	wire EF0 = io_in[2];
-	wire EF1 = io_in[3];
-	wire EF2 = io_in[4];
-	wire RS;
-	wire E;
-	wire D4;
-	wire D5;
-	wire D6;
-	wire D7;
-	wire LED0;
-	wire LED1;
-	assign io_out[0] = RS;
-	assign io_out[1] = E;
-	assign io_out[2] = D4;
-	assign io_out[3] = D5;
-	assign io_out[4] = D6;
-	assign io_out[5] = D7;
-	assign io_out[6] = LED0;
-	assign io_out[7] = LED1;
-	
-	lcd lcd (
-		.CLK(CLK),
-		.RST(RST),
-		.EF0(EF0),
-		.EF1(EF1),
-		.EF2(EF2),
-		.RS(RS),
-		.E(E),
-		.D4(D4),
-		.D5(D5),
-		.D6(D6),
-		.D7(D7),
-		.LED0(LED0),
-		.LED1(LED1)
-		);
-endmodule
diff --git a/verilog/rtl/057_pwm.v b/verilog/rtl/057_pwm.v
deleted file mode 100644
index 8e57988..0000000
--- a/verilog/rtl/057_pwm.v
+++ /dev/null
@@ -1,99 +0,0 @@
-`default_nettype none
-
-module krasin_3_bit_8_channel_pwm_driver (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-  wire clk = io_in[0];
-  wire pset = io_in[1];
-  wire [2:0] addr = io_in[4:2];
-  wire [2:0] level = io_in[7:5];
-
-  wire [7:0] pwm_out;
-  assign io_out[7:0] = pwm_out;
-
-  // This register is used to determine if the execution just started and we need to reset.
-  // It's a bullshit implementation and will most likely not work. I am curious to test it anyway.
-  // The idea is that initially this register has a somewhat random value. If it does not match what we expect,
-  // we're in a reset mode and set this register to the expected state + reset all other registers.
-  // This is not a great way, as it does not guarantee anything, but I already use all input pins and
-  // like to live dangerously.
-  reg[8:0] reset_canary = 0;
-
-  // 3-bit PWM counter that goes from 0 to 7.
-  reg [2:0] counter;
-
-  function is_reset (input [8:0] a);
-    begin
-      is_reset = (a != 8'b01010101);
-    end
-  endfunction
-
-  // PWM level for channel0.
-  // 0 means always off.
-  // 1 means that PWM will be on for just 1 clock cycle and then off for the other 6, giving 1/7 on average.
-  // 6 means 6/7 on.
-  // 7 means always on.
-  reg [2:0] pwm0_level;
-  // The rest of the channels.
-  reg [2:0] pwm1_level;
-  reg [2:0] pwm2_level;
-  reg [2:0] pwm3_level;
-  reg [2:0] pwm4_level;
-  reg [2:0] pwm5_level;
-  reg [2:0] pwm6_level;
-  reg [2:0] pwm7_level;
-
-  function is_on(input [3:0] level, input[3:0] counter);
-    begin
-      is_on = (counter < level);
-    end
-  endfunction // is_on
-
-  assign pwm_out[0] = is_on(pwm0_level, counter);
-  assign pwm_out[1] = is_on(pwm1_level, counter);
-  assign pwm_out[2] = is_on(pwm2_level, counter);
-  assign pwm_out[3] = is_on(pwm3_level, counter);
-  assign pwm_out[4] = is_on(pwm4_level, counter);
-  assign pwm_out[5] = is_on(pwm5_level, counter);
-  assign pwm_out[6] = is_on(pwm6_level, counter);
-  assign pwm_out[7] = is_on(pwm7_level, counter);
-
-  // external clock is 1000Hz.
-  always @(posedge clk) begin
-    // if reset, set counter and pwm levels to 0
-    if (is_reset(reset_canary)) begin
-      reset_canary = 8'b01010101;
-      counter <= 0;
-      pwm0_level <= 0;
-      pwm1_level <= 0;
-      pwm2_level <= 0;
-      pwm3_level <= 0;
-      pwm4_level <= 0;
-      pwm5_level <= 0;
-      pwm6_level <= 0;
-      pwm7_level <= 0;
-    end else begin // if (is_reset(reset_canary))
-      if (counter == 6) begin
-        // Roll over.
-        counter <= 0;
-      end else begin
-        // increment counter
-        counter <= counter + 1'b1;
-      end
-      if (pset) begin
-        case (addr)
-          0: pwm0_level <= level;
-          1: pwm1_level <= level;
-          2: pwm2_level <= level;
-          3: pwm3_level <= level;
-          4: pwm4_level <= level;
-          5: pwm5_level <= level;
-          6: pwm6_level <= level;
-          7: pwm7_level <= level;
-        endcase
-      end // if (set)
-    end
-  end // always @ (posedge clk)
-endmodule
diff --git a/verilog/rtl/058_user_module_nickoe.v b/verilog/rtl/058_user_module_nickoe.v
deleted file mode 100644
index 87b5524..0000000
--- a/verilog/rtl/058_user_module_nickoe.v
+++ /dev/null
@@ -1,137 +0,0 @@
-// -----------------------------------------------------------------------------
-// Auto-Generated by:        __   _ __      _  __
-//                          / /  (_) /____ | |/_/
-//                         / /__/ / __/ -_)>  <
-//                        /____/_/\__/\__/_/|_|
-//                     Build your hardware, easily!
-//                   https://github.com/enjoy-digital/litex
-//
-// Filename   : user_module_nickoe.v
-// Device     : tapeout
-// LiteX sha1 : 5b8d3651
-// Date       : 2022-11-16 16:11:17
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-// Module
-//------------------------------------------------------------------------------
-
-module user_module_nickoe (
-	input  wire [7:0] io_in,
-	output reg  [7:0] io_out
-);
-
-
-//------------------------------------------------------------------------------
-// Signals
-//------------------------------------------------------------------------------
-
-wire sys_clk;
-wire sys_rst;
-wire por_clk;
-reg  int_rst = 1'd1;
-reg  [7:0] storage = 8'd0;
-reg  re = 1'd0;
-reg  [7:0] chaser = 8'd0;
-reg  mode = 1'd0;
-wire wait_1;
-wire done;
-reg  [9:0] count = 10'd625;
-reg  [7:0] leds = 8'd0;
-reg  pwm = 1'd0;
-reg  enable = 1'd1;
-reg  [31:0] width = 32'd25;
-reg  [31:0] period = 32'd31;
-reg  [31:0] counter = 32'd0;
-wire [7:0] comb_slice_proxy0;
-wire [7:0] comb_slice_proxy1;
-wire [7:0] sync_slice_proxy0;
-wire [7:0] sync_slice_proxy1;
-
-//------------------------------------------------------------------------------
-// Combinatorial Logic
-//------------------------------------------------------------------------------
-
-assign sys_clk = comb_slice_proxy0[0];
-assign por_clk = comb_slice_proxy1[0];
-assign sys_rst = int_rst;
-assign wait_1 = (~done);
-always @(*) begin
-	leds <= 8'd0;
-	if ((mode == 1'd1)) begin
-		leds <= storage;
-	end else begin
-		leds <= chaser;
-	end
-end
-always @(*) begin
-	io_out <= 8'd0;
-	{io_out} <= (leds ^ 1'd0);
-	if ((~pwm)) begin
-		{io_out} <= 1'd0;
-	end
-end
-assign done = (count == 1'd0);
-assign comb_slice_proxy0 = {io_in};
-assign comb_slice_proxy1 = {io_in};
-assign sync_slice_proxy0 = {io_in};
-assign sync_slice_proxy1 = {io_in};
-
-
-//------------------------------------------------------------------------------
-// Synchronous Logic
-//------------------------------------------------------------------------------
-
-always @(posedge por_clk) begin
-	int_rst <= sync_slice_proxy0[1];
-end
-
-always @(posedge sys_clk) begin
-	width <= sync_slice_proxy1[7:2];
-	if (done) begin
-		chaser <= {chaser, (~chaser[7])};
-	end
-	if (re) begin
-		mode <= 1'd1;
-	end
-	if (wait_1) begin
-		if ((~done)) begin
-			count <= (count - 1'd1);
-		end
-	end else begin
-		count <= 10'd625;
-	end
-	if (enable) begin
-		counter <= (counter + 1'd1);
-		if ((counter < width)) begin
-			pwm <= 1'd1;
-		end else begin
-			pwm <= 1'd0;
-		end
-		if ((counter >= (period - 1'd1))) begin
-			counter <= 1'd0;
-		end
-	end else begin
-		counter <= 1'd0;
-		pwm <= 1'd0;
-	end
-	if (sys_rst) begin
-		chaser <= 8'd0;
-		mode <= 1'd0;
-		count <= 10'd625;
-		pwm <= 1'd0;
-		width <= 32'd25;
-	end
-end
-
-
-//------------------------------------------------------------------------------
-// Specialized Logic
-//------------------------------------------------------------------------------
-
-endmodule
-
-// -----------------------------------------------------------------------------
-//  Auto-Generated by LiteX on 2022-11-16 16:11:17.
-//------------------------------------------------------------------------------
diff --git a/verilog/rtl/059_fp8.v b/verilog/rtl/059_fp8.v
deleted file mode 100644
index 4edd434..0000000
--- a/verilog/rtl/059_fp8.v
+++ /dev/null
@@ -1,83 +0,0 @@
-module cchan_fp8_multiplier (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    wire clk = io_in[0];
-    wire [2:0] ctrl = io_in[3:1];
-    wire [3:0] data = io_in[7:4];
-    // wire [6:0] led_out;
-    // assign io_out[6:0] = led_out;
-    // wire [5:0] seed_input = io_in[7:2];
-
-    reg [8:0] operand1;
-    reg [8:0] operand2;
-    // For now we're commenting this out and leaving the results unbuffered.
-    // reg [8:0] result_out;
-    // assign io_out = result_out;
-
-    always @(posedge clk) begin
-        if (!ctrl[0]) begin  // if first CTRL bit is off, we're in STORE mode
-            if (!ctrl[1]) begin  // second CTRL bit controls whether it's the first or second operand
-                if (!ctrl[2]) begin  // third CTRL bit controls whether it's the upper or lower half
-                    operand1[3:0] <= data;
-                end else begin
-                    operand1[7:4] <= data;
-                end
-            end else begin
-                if (!ctrl[2]) begin
-                    operand2[3:0] <= data;
-                end else begin
-                    operand2[7:4] <= data;
-                end
-            end
-        end else begin  // if first CTRL bit is on, this is reserved.
-            // TODO
-            // if (!ctrl[1] && !ctrl[2]) begin
-            //     result_out[7:0] <= 0;
-            // end
-        end
-    end
-
-    // Compute result_out in terms of operand1, operand2
-    fp8mul mul1(
-        .sign1(operand1[7]),
-        .exp1(operand1[6:3]),
-        .mant1(operand1[2:0]),
-        .sign2(operand2[7]),
-        .exp2(operand2[6:3]),
-        .mant2(operand2[2:0]),
-        .sign_out(io_out[7]),
-        .exp_out(io_out[6:3]),
-        .mant_out(io_out[2:0])
-    );
-endmodule
-
-module fp8mul (
-  input sign1,
-  input [3:0] exp1,
-  input [2:0] mant1,
-
-  input sign2,
-  input [3:0] exp2,
-  input [2:0] mant2,
-
-  output sign_out,
-  output [3:0] exp_out,
-  output [2:0] mant_out
-);
-    parameter EXP_BIAS = 7;
-    wire isnan = (sign1 == 1 && exp1 == 0 && mant1 == 0) || (sign2 == 1 && exp2 == 0 && mant2 == 0);
-    wire [7:0] full_mant = ({exp1 != 0, mant1} * {exp2 != 0, mant2});
-    wire overflow_mant = full_mant[7];
-    wire [6:0] shifted_mant = overflow_mant ? full_mant[6:0] : {full_mant[5:0], 1'b0};
-    // is the mantissa overflowing up to the next exponent?
-    wire roundup = (exp1 + exp2 + overflow_mant < 1 + EXP_BIAS) && (shifted_mant[6:0] != 0)
-                   || (shifted_mant[6:4] == 3'b111 && shifted_mant[3]);
-    wire underflow = (exp1 + exp2 + overflow_mant) < 1 - roundup + EXP_BIAS;
-    wire is_zero = exp1 == 0 || exp2 == 0 || isnan || underflow;
-    // note: you can't use negative numbers reliably. just keep things positive during compares.
-    wire [4:0] exp_out_tmp = (exp1 + exp2 + overflow_mant + roundup) < EXP_BIAS ? 0 : (exp1 + exp2 + overflow_mant + roundup - EXP_BIAS);
-    assign exp_out = exp_out_tmp > 15 ? 4'b1111 : (is_zero) ? 0 : exp_out_tmp[3:0];  // Exponent bias is 7
-    assign mant_out = exp_out_tmp > 15 ? 3'b111 : (is_zero || roundup) ? 0 : (shifted_mant[6:4] + (shifted_mant[3:0] > 8 || (shifted_mant[3:0] == 8 && shifted_mant[4])));
-    assign sign_out = ((sign1 ^ sign2) && !(is_zero)) || isnan;
-endmodule
diff --git a/verilog/rtl/060_toplevel.v b/verilog/rtl/060_toplevel.v
deleted file mode 100644
index 514c5ef..0000000
--- a/verilog/rtl/060_toplevel.v
+++ /dev/null
@@ -1,20 +0,0 @@
-`default_nettype none
-
-module tt2_tholin_diceroll(
-	input [7:0] io_in,
-	output [7:0] io_out
-);
-	wire CLK = io_in[0];
-	wire RST = io_in[1];
-	wire ROLL = io_in[2];
-	wire [7:0] LEDS;
-	assign io_out[7:0] = LEDS;
-	
-	dice dice (
-		.CLK(CLK),
-		.RST(RST),
-		.ROLL(ROLL),
-		.LEDS(LEDS)
-	);
-
-endmodule
diff --git a/verilog/rtl/065_sqrt.v b/verilog/rtl/065_sqrt.v
deleted file mode 100644
index 91c4589..0000000
--- a/verilog/rtl/065_sqrt.v
+++ /dev/null
@@ -1,128 +0,0 @@
-// TinyTapeout Square Root Engine
-// Copyright (C) 2022 Davit Margarian
-
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module udxs_sqrt_top(
-	input [7:0] io_in, 
-	output [7:0] io_out
-);
-
-	wire [10:0] result;
-	assign io_out = result[7:0];
-
-  	udxs_sqrt sqrt_core(
-		.clk(io_in[0]),
-		.query({io_in[7:1], 4'b0}),
-		.result(result)
-  	);
-
-endmodule
-
-
-// SQRT Iteration Unit
-// Copyright (C) 2022 Davit Margarian
-
-module udxs_sqrtiu (
-	input [10:0] prev_att,
-	input [10:0] prev_eps,
-	input [10:0] prev_res,
-
-	output [10:0] this_att,
-	output [10:0] this_eps,
-	output [10:0] this_res
-);
-
-	assign this_att = {1'b0, prev_att[10:1]};
-
-	wire [10:0] this_delta_term1_half;
-	wire [10:0] this_delta;
-	reg [3:0] this_att_msb;
-	wire [4:0] this_att_sq_exp;
-	wire [10:0] this_att_sq;
-
-	assign this_att_sq_exp = {this_att_msb, 1'b0};
-	assign this_att_sq = 11'b1 << this_att_sq_exp;
-
-	assign this_delta_term1_half = prev_res << this_att_msb;
-	assign this_delta = {this_delta_term1_half[9:0], 1'b0} + this_att_sq;
-
-	wire cond_met;
-	assign cond_met = this_delta <= prev_eps;
-	assign this_eps = cond_met ? prev_eps - this_delta : prev_eps; 
-	assign this_res = cond_met ? prev_res | this_att : prev_res; 
-
-	integer msb_idx;
-	always @* begin
-		this_att_msb = 0;
-
-		for (msb_idx=0; msb_idx < 11; msb_idx++) begin
-			if(this_att == (1 << msb_idx))
-				this_att_msb = msb_idx[3:0];
-		end
-
-	end
-
-endmodule
-
-// SQRT Control Logic
-// Copyright (C) 2022 Davit Margarian
-
-module udxs_sqrt(
-	input clk,
-	input [10:0] query,
-	output reg [10:0] result
-);
-
-	reg [10:0] att;
-	reg [10:0] eps;
-	reg [10:0] res;
-
-	wire [10:0] att_mid;
-	wire [10:0] res_mid;
-	wire [10:0] eps_mid;
-
-	wire [10:0] att_next;
-	wire [10:0] res_next;
-	wire [10:0] eps_next;
-
-	udxs_sqrtiu iteratorA(
-						.prev_att(att),
-						.prev_eps(eps), 
-						.prev_res(res),
-						.this_att(att_mid),
-						.this_eps(eps_mid),
-						.this_res(res_mid)
-						);
-
-	udxs_sqrtiu iteratorB(
-						.prev_att(att_mid),
-						.prev_eps(eps_mid), 
-						.prev_res(res_mid),
-						.this_att(att_next),
-						.this_eps(eps_next),
-						.this_res(res_next)
-						);
-
-	reg [1:0] iteration;
-	
-	always @(posedge clk) begin
-		if (iteration != 3) begin
-				att <= att_next;
-				eps <= eps_next;
-				res <= res_next;
-				iteration <= iteration + 1;
-			end else begin
-				result <= res;
-				eps <= query;
-				att <= 1 << 6;
-				res <= 0;
-				iteration <= 0;
-			end
-	end
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/066_pwm_gen.v b/verilog/rtl/066_pwm_gen.v
deleted file mode 100644
index 81ddb25..0000000
--- a/verilog/rtl/066_pwm_gen.v
+++ /dev/null
@@ -1,69 +0,0 @@
-`default_nettype none
-
-module pwm_gen (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  
-wire clk = io_in[0];
-wire reset = io_in[1];
-reg counter_state;
-reg [5:0] pwm_counter;
-reg [6:0] duty;
-reg pwm;
-assign io_out = {duty, pwm};
-
-  //upcounter which determines pwm period 
-always @(posedge clk) begin
-    if (reset)
-        pwm_counter <= 0;
-    else
-        pwm_counter <= pwm_counter + 1;
-end
-  //duty state machine to determine countup or countdown
-always @(posedge clk) begin
-    if (reset) begin
-        counter_state = 0;
-    end else begin
-            case (counter_state)
-                0:
-                    if (duty == 8'b111110)
-                        counter_state = 1;
-                    else
-                        counter_state = 0;
-                1:
-                    if (duty == 8'b000001)
-                        counter_state = 0;
-                    else
-                        counter_state = 1;
-            endcase
-    end
-end
-  //generate duty
-always @(posedge clk) begin
-    if (reset) begin
-        duty <= 0;
-    end else begin
-        if (pwm_counter == 6'b000000) begin
-            if (counter_state == 0) begin
-                duty <= duty + 1;
-            end else if(counter_state == 1) begin
-                duty <= duty - 1;
-            end
-        end
-    end
-end
-  //generate pwm where duty determines it's duty cycle
-always @(posedge clk) begin
-    if(reset) begin
-        pwm <= 0;
-    end else begin
-        if (pwm_counter == 6'b000000) begin
-            pwm <= 1;
-        end else if (pwm_counter == duty[6:0]) begin
-            pwm <= 0;
-        end
-    end
-end
-
-endmodule
diff --git a/verilog/rtl/066_sqrt.v b/verilog/rtl/066_sqrt.v
deleted file mode 100644
index 91c4589..0000000
--- a/verilog/rtl/066_sqrt.v
+++ /dev/null
@@ -1,128 +0,0 @@
-// TinyTapeout Square Root Engine
-// Copyright (C) 2022 Davit Margarian
-
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module udxs_sqrt_top(
-	input [7:0] io_in, 
-	output [7:0] io_out
-);
-
-	wire [10:0] result;
-	assign io_out = result[7:0];
-
-  	udxs_sqrt sqrt_core(
-		.clk(io_in[0]),
-		.query({io_in[7:1], 4'b0}),
-		.result(result)
-  	);
-
-endmodule
-
-
-// SQRT Iteration Unit
-// Copyright (C) 2022 Davit Margarian
-
-module udxs_sqrtiu (
-	input [10:0] prev_att,
-	input [10:0] prev_eps,
-	input [10:0] prev_res,
-
-	output [10:0] this_att,
-	output [10:0] this_eps,
-	output [10:0] this_res
-);
-
-	assign this_att = {1'b0, prev_att[10:1]};
-
-	wire [10:0] this_delta_term1_half;
-	wire [10:0] this_delta;
-	reg [3:0] this_att_msb;
-	wire [4:0] this_att_sq_exp;
-	wire [10:0] this_att_sq;
-
-	assign this_att_sq_exp = {this_att_msb, 1'b0};
-	assign this_att_sq = 11'b1 << this_att_sq_exp;
-
-	assign this_delta_term1_half = prev_res << this_att_msb;
-	assign this_delta = {this_delta_term1_half[9:0], 1'b0} + this_att_sq;
-
-	wire cond_met;
-	assign cond_met = this_delta <= prev_eps;
-	assign this_eps = cond_met ? prev_eps - this_delta : prev_eps; 
-	assign this_res = cond_met ? prev_res | this_att : prev_res; 
-
-	integer msb_idx;
-	always @* begin
-		this_att_msb = 0;
-
-		for (msb_idx=0; msb_idx < 11; msb_idx++) begin
-			if(this_att == (1 << msb_idx))
-				this_att_msb = msb_idx[3:0];
-		end
-
-	end
-
-endmodule
-
-// SQRT Control Logic
-// Copyright (C) 2022 Davit Margarian
-
-module udxs_sqrt(
-	input clk,
-	input [10:0] query,
-	output reg [10:0] result
-);
-
-	reg [10:0] att;
-	reg [10:0] eps;
-	reg [10:0] res;
-
-	wire [10:0] att_mid;
-	wire [10:0] res_mid;
-	wire [10:0] eps_mid;
-
-	wire [10:0] att_next;
-	wire [10:0] res_next;
-	wire [10:0] eps_next;
-
-	udxs_sqrtiu iteratorA(
-						.prev_att(att),
-						.prev_eps(eps), 
-						.prev_res(res),
-						.this_att(att_mid),
-						.this_eps(eps_mid),
-						.this_res(res_mid)
-						);
-
-	udxs_sqrtiu iteratorB(
-						.prev_att(att_mid),
-						.prev_eps(eps_mid), 
-						.prev_res(res_mid),
-						.this_att(att_next),
-						.this_eps(eps_next),
-						.this_res(res_next)
-						);
-
-	reg [1:0] iteration;
-	
-	always @(posedge clk) begin
-		if (iteration != 3) begin
-				att <= att_next;
-				eps <= eps_next;
-				res <= res_next;
-				iteration <= iteration + 1;
-			end else begin
-				result <= res;
-				eps <= query;
-				att <= 1 << 6;
-				res <= 0;
-				iteration <= 0;
-			end
-	end
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/067_pwm_gen.v b/verilog/rtl/067_pwm_gen.v
deleted file mode 100644
index 81ddb25..0000000
--- a/verilog/rtl/067_pwm_gen.v
+++ /dev/null
@@ -1,69 +0,0 @@
-`default_nettype none
-
-module pwm_gen (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  
-wire clk = io_in[0];
-wire reset = io_in[1];
-reg counter_state;
-reg [5:0] pwm_counter;
-reg [6:0] duty;
-reg pwm;
-assign io_out = {duty, pwm};
-
-  //upcounter which determines pwm period 
-always @(posedge clk) begin
-    if (reset)
-        pwm_counter <= 0;
-    else
-        pwm_counter <= pwm_counter + 1;
-end
-  //duty state machine to determine countup or countdown
-always @(posedge clk) begin
-    if (reset) begin
-        counter_state = 0;
-    end else begin
-            case (counter_state)
-                0:
-                    if (duty == 8'b111110)
-                        counter_state = 1;
-                    else
-                        counter_state = 0;
-                1:
-                    if (duty == 8'b000001)
-                        counter_state = 0;
-                    else
-                        counter_state = 1;
-            endcase
-    end
-end
-  //generate duty
-always @(posedge clk) begin
-    if (reset) begin
-        duty <= 0;
-    end else begin
-        if (pwm_counter == 6'b000000) begin
-            if (counter_state == 0) begin
-                duty <= duty + 1;
-            end else if(counter_state == 1) begin
-                duty <= duty - 1;
-            end
-        end
-    end
-end
-  //generate pwm where duty determines it's duty cycle
-always @(posedge clk) begin
-    if(reset) begin
-        pwm <= 0;
-    end else begin
-        if (pwm_counter == 6'b000000) begin
-            pwm <= 1;
-        end else if (pwm_counter == duty[6:0]) begin
-            pwm <= 0;
-        end
-    end
-end
-
-endmodule
diff --git a/verilog/rtl/067_user_module_341164910646919762.v b/verilog/rtl/067_user_module_341164910646919762.v
deleted file mode 100644
index 8a57b27..0000000
--- a/verilog/rtl/067_user_module_341164910646919762.v
+++ /dev/null
@@ -1,297 +0,0 @@
-/* Custom verilog based on the template automatically generated from
-/* https://wokwi.com/projects/341164910646919762 */
-
-`ifdef SIM
-`define UNIT_DELAY #1
-`define FUNCTIONAL
-`define USE_POWER_PINS
-`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
-`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
-`endif
-
-`default_nettype none
-
-module user_module_341164910646919762
-  (
-   input wire [7:0]  io_in,
-   output wire [7:0] io_out
-   );
-   wire              clk = io_in[0];
-   wire              output_select = io_in[1];
-   wire              gold_out;
-
-   gold_code_module_341164910646919762 gold_code_generator
-     (.clk(clk), .loadn(io_in[3]), .b_load({io_in[7:4], io_in[2:1]}),
-      .gold(gold_out));
-
-   wire [7:0]        io_out_fibonacci;
-   wire              fib_clk;
-   wire              fib_rstn;
-
-   // Buffers to fix slew failures
-   sky130_fd_sc_hd__buf_2 fib_clk_buf
-     (.A(clk), .X(fib_clk),
-      .VPWR(1'b1), .VGND(1'b0));
-
-   sky130_fd_sc_hd__buf_2 fib_rstn_buf
-     (.A(io_in[2]), .X(fib_rstn),
-      .VPWR(1'b1), .VGND(1'b0));
-
-   fibonacci_module_341164910646919762 #(.DIGITS(7)) fibonacci_inst
-     (.clk(fib_clk), .rstn(fib_rstn), .io_out(io_out_fibonacci));
-
-   assign io_out[7] = output_select ? gold_out : io_out_fibonacci[7];
-   assign io_out[6:0] = io_out_fibonacci[6:0];
-endmodule // user_module_341164910646919762
-
-module gold_code_module_341164910646919762
-  (
-   input wire clk,
-   input wire loadn,
-   input wire [5:0] b_load,
-   output wire gold
-   );
-
-   reg [12:0]   a;
-   reg [6:0]    b_async;
-   reg [5:0]    b_sync;
-   wire [12:0]  b = {b_async, b_sync};
-
-   always @(posedge clk or negedge loadn) begin
-      a <= {a[0] ^ a[1] ^ a[3] ^ a[4], a[12:1]};
-      b_async <= {b[0] ^ b[4] ^ b[5] ^ b[7] ^ b[9] ^ b[10], b[12:7]};
-
-      if (!loadn) begin
-         a <= {1'b1, 12'b0};
-         b_async <= {1'b0, 1'b1, 5'b0};
-      end
-   end
-
-   always @(posedge clk) b_sync <= loadn ? b[6:1] : b_load;
-
-   assign gold = a[0] ^ b[0];
-endmodule // gold_code_module_341164910646919762
-
-module fibonacci_module_341164910646919762
-  #(
-    parameter DIGITS = 7
-    )
-   (
-    input wire        clk,
-    input wire        rstn,
-    output wire [7:0] io_out
-    );
-
-   wire [3:0]         digit;
-   wire               lsb_marker;
-
-   fibonacci_341164910646919762 #(.DIGITS(DIGITS)) fib
-     (.clk(clk), .rstn(rstn), .digit(digit),
-      .lsb_marker(lsb_marker));
-
-   wire [7:0]         seven_segment_out;
-   
-   seven_segment_341164910646919762 seven_segment_encoder
-     (.digit(digit), .dot(lsb_marker), .seven_segment(seven_segment_out));
-
-   assign io_out = clk ? seven_segment_out : 8'b0;
-endmodule // fibonacci_module_341164910646919762
-
-module fibonacci_341164910646919762
-  #(
-    parameter DIGITS = 7
-    )
-   (
-    input wire        clk,
-    input wire        rstn,
-    output wire [3:0] digit,
-    output wire       lsb_marker
-    );
-
-   localparam         WIDTH = 4 * DIGITS;
-
-   reg [WIDTH-1:0]    a;
-   assign digit = a[3:0];
-   reg [WIDTH-1:0]    b;
-   reg                carry;
-
-   wire [3:0]         digit_sum;
-   wire               cout;
-
-   reg [DIGITS-1:0]   lsb_control;
-   wire               lsb_marker_prev;
-   assign lsb_marker_prev = lsb_control[DIGITS-1];
-   assign lsb_marker = lsb_control[0];
-
-   adder4_341164910646919762 adder
-     (.a(a[3:0]), .b(b[3:0]), .cin(carry),
-      .sum(digit_sum), .cout(cout));
-
-   always @(posedge clk or negedge rstn) begin
-      a <= {b[3:0], a[WIDTH-1:4]};
-      b <= {digit_sum, b[WIDTH-1:4]};
-      carry <= lsb_marker_prev ? 1'b0 : cout;
-      lsb_control <= {lsb_control[DIGITS-2:0], lsb_control[DIGITS-1]};
-
-      if (!rstn) begin
-         a <= 1'b0;
-         b <= 1'b1;
-         carry <= 1'b0;
-         lsb_control <= 1'b1;
-      end
-   end
-endmodule // fibonacci_341164910646919762
-
-module adder4_341164910646919762
-  (
-   input wire [3:0]  a,
-   input wire [3:0]  b,
-   input wire        cin,
-   output wire [3:0] sum,
-   output wire       cout
-   );
-
-   wire [3:0]        adder_cin;
-   wire [3:0]        adder_cout;
-   assign cout = adder_cout[3];
-   assign adder_cin = {adder_cout[2:0], cin};
-
-   sky130_fd_sc_hd__fa_1 adder [3:0]
-     (.A(a), .B(b), .CIN(adder_cin),
-      .COUT(adder_cout), .SUM(sum),
-      .VPWR(1'b1), .VGND(1'b0));
-endmodule // adder4_341164910646919762
-
-module seven_segment_341164910646919762
-  (
-   input wire [3:0]  digit,
-   input wire        dot,
-   output wire [7:0] seven_segment
-   );
-
-   reg               up, mid, down, left_up,
-                     left_down, right_up, right_down;
-   assign seven_segment = {dot, mid, left_up, left_down,
-                           down, right_down, right_up, up};
-
-   always @(*) begin
-      up = 1'b0;
-      mid = 1'b0;
-      down = 1'b0;
-      left_up = 1'b0;
-      left_down = 1'b0;
-      right_up = 1'b0;
-      right_down = 1'b0;
-      case (digit)
-        4'h0: begin
-           up = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h1: begin
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h2: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           right_up = 1'b1;
-           left_down = 1'b1;
-        end
-        4'h3: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h4: begin
-           left_up = 1'b1;
-           right_up = 1'b1;
-           mid = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h5: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h6: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h7: begin
-           up = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h8: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h9: begin
-           up = 1'b1;
-           mid = 1'b1;
-           left_up = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'ha: begin
-           up = 1'b1;
-           mid = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'hb: begin
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_down = 1'b1;
-        end
-        4'hc: begin
-           up = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-        end
-        4'hd: begin
-           mid = 1'b1;
-           down = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'he: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-        end
-        4'hf: begin
-           up = 1'b1;
-           mid = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-        end
-      endcase // case (digit)
-   end // always @ (*)
-endmodule // seven_segment_341164910646919762
diff --git a/verilog/rtl/068_user_module_341164910646919762.v b/verilog/rtl/068_user_module_341164910646919762.v
deleted file mode 100644
index 8a57b27..0000000
--- a/verilog/rtl/068_user_module_341164910646919762.v
+++ /dev/null
@@ -1,297 +0,0 @@
-/* Custom verilog based on the template automatically generated from
-/* https://wokwi.com/projects/341164910646919762 */
-
-`ifdef SIM
-`define UNIT_DELAY #1
-`define FUNCTIONAL
-`define USE_POWER_PINS
-`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
-`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
-`endif
-
-`default_nettype none
-
-module user_module_341164910646919762
-  (
-   input wire [7:0]  io_in,
-   output wire [7:0] io_out
-   );
-   wire              clk = io_in[0];
-   wire              output_select = io_in[1];
-   wire              gold_out;
-
-   gold_code_module_341164910646919762 gold_code_generator
-     (.clk(clk), .loadn(io_in[3]), .b_load({io_in[7:4], io_in[2:1]}),
-      .gold(gold_out));
-
-   wire [7:0]        io_out_fibonacci;
-   wire              fib_clk;
-   wire              fib_rstn;
-
-   // Buffers to fix slew failures
-   sky130_fd_sc_hd__buf_2 fib_clk_buf
-     (.A(clk), .X(fib_clk),
-      .VPWR(1'b1), .VGND(1'b0));
-
-   sky130_fd_sc_hd__buf_2 fib_rstn_buf
-     (.A(io_in[2]), .X(fib_rstn),
-      .VPWR(1'b1), .VGND(1'b0));
-
-   fibonacci_module_341164910646919762 #(.DIGITS(7)) fibonacci_inst
-     (.clk(fib_clk), .rstn(fib_rstn), .io_out(io_out_fibonacci));
-
-   assign io_out[7] = output_select ? gold_out : io_out_fibonacci[7];
-   assign io_out[6:0] = io_out_fibonacci[6:0];
-endmodule // user_module_341164910646919762
-
-module gold_code_module_341164910646919762
-  (
-   input wire clk,
-   input wire loadn,
-   input wire [5:0] b_load,
-   output wire gold
-   );
-
-   reg [12:0]   a;
-   reg [6:0]    b_async;
-   reg [5:0]    b_sync;
-   wire [12:0]  b = {b_async, b_sync};
-
-   always @(posedge clk or negedge loadn) begin
-      a <= {a[0] ^ a[1] ^ a[3] ^ a[4], a[12:1]};
-      b_async <= {b[0] ^ b[4] ^ b[5] ^ b[7] ^ b[9] ^ b[10], b[12:7]};
-
-      if (!loadn) begin
-         a <= {1'b1, 12'b0};
-         b_async <= {1'b0, 1'b1, 5'b0};
-      end
-   end
-
-   always @(posedge clk) b_sync <= loadn ? b[6:1] : b_load;
-
-   assign gold = a[0] ^ b[0];
-endmodule // gold_code_module_341164910646919762
-
-module fibonacci_module_341164910646919762
-  #(
-    parameter DIGITS = 7
-    )
-   (
-    input wire        clk,
-    input wire        rstn,
-    output wire [7:0] io_out
-    );
-
-   wire [3:0]         digit;
-   wire               lsb_marker;
-
-   fibonacci_341164910646919762 #(.DIGITS(DIGITS)) fib
-     (.clk(clk), .rstn(rstn), .digit(digit),
-      .lsb_marker(lsb_marker));
-
-   wire [7:0]         seven_segment_out;
-   
-   seven_segment_341164910646919762 seven_segment_encoder
-     (.digit(digit), .dot(lsb_marker), .seven_segment(seven_segment_out));
-
-   assign io_out = clk ? seven_segment_out : 8'b0;
-endmodule // fibonacci_module_341164910646919762
-
-module fibonacci_341164910646919762
-  #(
-    parameter DIGITS = 7
-    )
-   (
-    input wire        clk,
-    input wire        rstn,
-    output wire [3:0] digit,
-    output wire       lsb_marker
-    );
-
-   localparam         WIDTH = 4 * DIGITS;
-
-   reg [WIDTH-1:0]    a;
-   assign digit = a[3:0];
-   reg [WIDTH-1:0]    b;
-   reg                carry;
-
-   wire [3:0]         digit_sum;
-   wire               cout;
-
-   reg [DIGITS-1:0]   lsb_control;
-   wire               lsb_marker_prev;
-   assign lsb_marker_prev = lsb_control[DIGITS-1];
-   assign lsb_marker = lsb_control[0];
-
-   adder4_341164910646919762 adder
-     (.a(a[3:0]), .b(b[3:0]), .cin(carry),
-      .sum(digit_sum), .cout(cout));
-
-   always @(posedge clk or negedge rstn) begin
-      a <= {b[3:0], a[WIDTH-1:4]};
-      b <= {digit_sum, b[WIDTH-1:4]};
-      carry <= lsb_marker_prev ? 1'b0 : cout;
-      lsb_control <= {lsb_control[DIGITS-2:0], lsb_control[DIGITS-1]};
-
-      if (!rstn) begin
-         a <= 1'b0;
-         b <= 1'b1;
-         carry <= 1'b0;
-         lsb_control <= 1'b1;
-      end
-   end
-endmodule // fibonacci_341164910646919762
-
-module adder4_341164910646919762
-  (
-   input wire [3:0]  a,
-   input wire [3:0]  b,
-   input wire        cin,
-   output wire [3:0] sum,
-   output wire       cout
-   );
-
-   wire [3:0]        adder_cin;
-   wire [3:0]        adder_cout;
-   assign cout = adder_cout[3];
-   assign adder_cin = {adder_cout[2:0], cin};
-
-   sky130_fd_sc_hd__fa_1 adder [3:0]
-     (.A(a), .B(b), .CIN(adder_cin),
-      .COUT(adder_cout), .SUM(sum),
-      .VPWR(1'b1), .VGND(1'b0));
-endmodule // adder4_341164910646919762
-
-module seven_segment_341164910646919762
-  (
-   input wire [3:0]  digit,
-   input wire        dot,
-   output wire [7:0] seven_segment
-   );
-
-   reg               up, mid, down, left_up,
-                     left_down, right_up, right_down;
-   assign seven_segment = {dot, mid, left_up, left_down,
-                           down, right_down, right_up, up};
-
-   always @(*) begin
-      up = 1'b0;
-      mid = 1'b0;
-      down = 1'b0;
-      left_up = 1'b0;
-      left_down = 1'b0;
-      right_up = 1'b0;
-      right_down = 1'b0;
-      case (digit)
-        4'h0: begin
-           up = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h1: begin
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h2: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           right_up = 1'b1;
-           left_down = 1'b1;
-        end
-        4'h3: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h4: begin
-           left_up = 1'b1;
-           right_up = 1'b1;
-           mid = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h5: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h6: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h7: begin
-           up = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h8: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'h9: begin
-           up = 1'b1;
-           mid = 1'b1;
-           left_up = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'ha: begin
-           up = 1'b1;
-           mid = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'hb: begin
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-           right_down = 1'b1;
-        end
-        4'hc: begin
-           up = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-        end
-        4'hd: begin
-           mid = 1'b1;
-           down = 1'b1;
-           left_down = 1'b1;
-           right_up = 1'b1;
-           right_down = 1'b1;
-        end
-        4'he: begin
-           up = 1'b1;
-           mid = 1'b1;
-           down = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-        end
-        4'hf: begin
-           up = 1'b1;
-           mid = 1'b1;
-           left_up = 1'b1;
-           left_down = 1'b1;
-        end
-      endcase // case (digit)
-   end // always @ (*)
-endmodule // seven_segment_341164910646919762
diff --git a/verilog/rtl/069_navray_top.sv b/verilog/rtl/069_navray_top.sv
deleted file mode 100644
index fa8f8d2..0000000
--- a/verilog/rtl/069_navray_top.sv
+++ /dev/null
@@ -1,45 +0,0 @@
-// Title:  Top-level wrapper in SystemVerilog
-// File:   navray_top.sv
-// Author: Wallace Everest
-// Date:   23-NOV-2022
-// URL:    https://github.com/navray/tt02-square-root
-//
-// Description:
-//   The square-root of an unsigned 7-bit input is displayed on a 7-segment output.
-//   The decimal point is unused.
-//   Pipeline delay is 5 clocks.
-// Implementation:
-//   TinyTapeout-02 constraints identify io_in[0] as a clock tree.
-//   FPGA synthesis reports 46 flip-flops
-// Stye Guide:
-//   https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md
-
-`default_nettype none
-
-localparam K_WIDTH = 8;  // size must be even
-
-module navray_top (
-  input  wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-  logic                 clk;
-  logic [K_WIDTH-1:0]   data_in;
-  logic [K_WIDTH/2-1:0] sqrt_val;
-  
-  assign clk = io_in[0];
-  assign data_in = {1'b0, io_in[7:1]};
-  
-  sqrt #(
-    .G_WIDTH(K_WIDTH)
-  ) sqrt_inst (
-    .clk     (clk),
-    .data_in (data_in),
-    .data_out(sqrt_val)
-  );
-
-  seg7 seg7_inst (
-    .clk     (clk),
-    .data_in (sqrt_val),
-    .segments(io_out)
-  );
-endmodule
diff --git a/verilog/rtl/070_navray_top.sv b/verilog/rtl/070_navray_top.sv
deleted file mode 100644
index fa8f8d2..0000000
--- a/verilog/rtl/070_navray_top.sv
+++ /dev/null
@@ -1,45 +0,0 @@
-// Title:  Top-level wrapper in SystemVerilog
-// File:   navray_top.sv
-// Author: Wallace Everest
-// Date:   23-NOV-2022
-// URL:    https://github.com/navray/tt02-square-root
-//
-// Description:
-//   The square-root of an unsigned 7-bit input is displayed on a 7-segment output.
-//   The decimal point is unused.
-//   Pipeline delay is 5 clocks.
-// Implementation:
-//   TinyTapeout-02 constraints identify io_in[0] as a clock tree.
-//   FPGA synthesis reports 46 flip-flops
-// Stye Guide:
-//   https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md
-
-`default_nettype none
-
-localparam K_WIDTH = 8;  // size must be even
-
-module navray_top (
-  input  wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-  logic                 clk;
-  logic [K_WIDTH-1:0]   data_in;
-  logic [K_WIDTH/2-1:0] sqrt_val;
-  
-  assign clk = io_in[0];
-  assign data_in = {1'b0, io_in[7:1]};
-  
-  sqrt #(
-    .G_WIDTH(K_WIDTH)
-  ) sqrt_inst (
-    .clk     (clk),
-    .data_in (data_in),
-    .data_out(sqrt_val)
-  );
-
-  seg7 seg7_inst (
-    .clk     (clk),
-    .data_in (sqrt_val),
-    .segments(io_out)
-  );
-endmodule
diff --git a/verilog/rtl/071_pwm.v b/verilog/rtl/071_pwm.v
deleted file mode 100644
index 6e43451..0000000
--- a/verilog/rtl/071_pwm.v
+++ /dev/null
@@ -1,139 +0,0 @@
-`default_nettype none
-
-module krasin_tt02_verilog_spi_7_channel_pwm_driver (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-  wire clk = io_in[0];
-  wire reset = io_in[1];
-  wire sclk = io_in[2];
-  wire cs = io_in[3];
-  wire mosi = io_in[4];
-
-  wire [6:0] pwm_out;
-  assign io_out[6:0] = pwm_out;
-  wire miso;
-  assign io_out[7] = miso;
-
-  // Previous value of sclk.
-  // This is to track SPI clock transitions within the main clock trigger.
-  reg prev_sclk;
-  // SPI counter that tracks 8 bit.
-  reg [2:0] spi_counter;
-  // is_writing is set if we received a write command.
-  reg is_writing;
-  reg is_reading;
-  reg [2:0] cur_addr;
-
-  // Buffer from mosi.
-  reg [7:0] in_buf;
-  // Buffer for miso.
-  reg [7:0] out_buf;
-
-  // out_buf is advanced on each falling sclk.
-  assign miso = out_buf[7];
-
-  // 8-bit PWM counter that goes from 0 to 254.
-  reg [7:0] counter;
-
-  // PWM levels for each channel.
-  // 0 means always off.
-  // 1 means that PWM will be on for just 1 clock cycle and then off for the other 254, giving 1/255 on average.
-  // 254 means 254/255 on.
-  // 255 means always on.
-  reg [7:0] pwm_level[6:0];
-
-  function is_on(input [7:0] level, input[7:0] counter);
-     begin
-       is_on = (counter < level);
-     end
-  endfunction // is_on
-
-  assign pwm_out[0] = is_on(pwm_level[0], counter);
-  assign pwm_out[1] = is_on(pwm_level[1], counter);
-  assign pwm_out[2] = is_on(pwm_level[2], counter);
-  assign pwm_out[3] = is_on(pwm_level[3], counter);
-  assign pwm_out[4] = is_on(pwm_level[4], counter);
-  assign pwm_out[5] = is_on(pwm_level[5], counter);
-  assign pwm_out[6] = is_on(pwm_level[6], counter);
-
-  // external clock is 1000Hz.
-  // PWM logic.
-  always @(posedge clk) begin
-    // if reset, set counter and pwm levels to 0
-    if (reset) begin
-      counter <= 0;
-      pwm_level[0] <= 0;
-      pwm_level[1] <= 0;
-      pwm_level[2] <= 0;
-      pwm_level[3] <= 0;
-      pwm_level[4] <= 0;
-      pwm_level[5] <= 0;
-      pwm_level[6] <= 0;
-    end else begin // if (reset)
-      if (counter == 254) begin
-        // Roll over.
-        counter <= 0;
-      end else begin
-        // increment counter
-        counter <= counter + 1'b1;
-      end
-    end // if (reset)
-
-    // SPI reset logic.
-    if (reset || cs) begin
-      // The chip is not selected or we are being reset. Reset all SPI registers.
-      in_buf <= 0;
-      out_buf <= 0;
-      prev_sclk <= 0;
-      spi_counter <= 0;
-      is_writing <= 0;
-      is_reading <= 0;
-      cur_addr <= 0;
-    end // if (reset || cs)
-
-    // regular SPI logic.
-    if (~reset && ~cs && (prev_sclk != sclk)) begin
-      // The chip is selected and the SPI clock changed.
-      // On rising edge we read from mosi, on falling edge, we write to miso.
-      if (sclk) begin
-        // Rising SCLK edge: reading from mosi.
-        in_buf <= (in_buf << 1) | mosi;
-        spi_counter <= spi_counter + 1'b1;
-      end else begin // if (sclk)
-        // Falling SCLK edge
-        if ((spi_counter == 0) && is_writing) begin
-          // Writing. We saved the cur_addr after reading the first byte.
-	  if (cur_addr <= 6) begin
-            pwm_level[cur_addr] <= in_buf;
-	  end
-          is_writing <= 0;
-          is_reading <= 1;
-        end // if ((spi_counter == 0) && is_writing
-	if ((spi_counter == 0) && ~is_writing) begin
-          if (in_buf[7]) begin
-            // We're writing, but the value will come as the next byte.
-            is_writing <= 1;
-	  end else begin
-            is_reading <= 1;
-	  end
-          cur_addr <= in_buf[2:0];
-	end // ((spi_counter == 0) && ~is_writing)
-	if ((spi_counter == 1) && is_reading) begin
-          if (cur_addr <= 6) begin
-            out_buf <= pwm_level[cur_addr];
-	  end else begin
-            out_buf <= 0;
-	  end
-          is_reading <= 0;
-          cur_addr <= 0;
-        end else begin // if ((spi_counter == 1) && is_reading)
-          // Advancing out_buf, so that miso sees a new value.
-          out_buf <= out_buf << 1;
-	end
-      end
-      prev_sclk <= sclk;
-    end // if (~reset && ~cs && (prev_sclk != sclk))
-  end // always @ (posedge clk)
-endmodule
diff --git a/verilog/rtl/072_hex_sr.v b/verilog/rtl/072_hex_sr.v
deleted file mode 100644
index e66feeb..0000000
--- a/verilog/rtl/072_hex_sr.v
+++ /dev/null
@@ -1,31 +0,0 @@
-// Hex shift register
-// Copyright 2022 Eric Smith <spacewar@gmail.com>
-// SPDX-License-Identifier: Apache-2.0
-
-`default_nettype none
-
-module hex_sr #( parameter LENGTH = 40 ) (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-   wire clk;
-   wire recirc;
-   wire [5:0] data_in;
-
-   wire [5:0] data_out;
-
-   assign clk = io_in[0];
-   assign recirc = io_in[1];
-   assign data_in = io_in[7:2];
-
-   assign io_out[7:2] = data_out;
-   assign io_out[1:0] = 2'b0;
-
-   genvar i;
-   generate
-      for (i = 0; i < 6; i = i + 1)
-	sr_recirc #(.LENGTH(LENGTH)) sr0(clk, recirc, data_in[i], data_out[i]);
-   endgenerate
-
-endmodule
diff --git a/verilog/rtl/072_pwm.v b/verilog/rtl/072_pwm.v
deleted file mode 100644
index 6e43451..0000000
--- a/verilog/rtl/072_pwm.v
+++ /dev/null
@@ -1,139 +0,0 @@
-`default_nettype none
-
-module krasin_tt02_verilog_spi_7_channel_pwm_driver (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-  wire clk = io_in[0];
-  wire reset = io_in[1];
-  wire sclk = io_in[2];
-  wire cs = io_in[3];
-  wire mosi = io_in[4];
-
-  wire [6:0] pwm_out;
-  assign io_out[6:0] = pwm_out;
-  wire miso;
-  assign io_out[7] = miso;
-
-  // Previous value of sclk.
-  // This is to track SPI clock transitions within the main clock trigger.
-  reg prev_sclk;
-  // SPI counter that tracks 8 bit.
-  reg [2:0] spi_counter;
-  // is_writing is set if we received a write command.
-  reg is_writing;
-  reg is_reading;
-  reg [2:0] cur_addr;
-
-  // Buffer from mosi.
-  reg [7:0] in_buf;
-  // Buffer for miso.
-  reg [7:0] out_buf;
-
-  // out_buf is advanced on each falling sclk.
-  assign miso = out_buf[7];
-
-  // 8-bit PWM counter that goes from 0 to 254.
-  reg [7:0] counter;
-
-  // PWM levels for each channel.
-  // 0 means always off.
-  // 1 means that PWM will be on for just 1 clock cycle and then off for the other 254, giving 1/255 on average.
-  // 254 means 254/255 on.
-  // 255 means always on.
-  reg [7:0] pwm_level[6:0];
-
-  function is_on(input [7:0] level, input[7:0] counter);
-     begin
-       is_on = (counter < level);
-     end
-  endfunction // is_on
-
-  assign pwm_out[0] = is_on(pwm_level[0], counter);
-  assign pwm_out[1] = is_on(pwm_level[1], counter);
-  assign pwm_out[2] = is_on(pwm_level[2], counter);
-  assign pwm_out[3] = is_on(pwm_level[3], counter);
-  assign pwm_out[4] = is_on(pwm_level[4], counter);
-  assign pwm_out[5] = is_on(pwm_level[5], counter);
-  assign pwm_out[6] = is_on(pwm_level[6], counter);
-
-  // external clock is 1000Hz.
-  // PWM logic.
-  always @(posedge clk) begin
-    // if reset, set counter and pwm levels to 0
-    if (reset) begin
-      counter <= 0;
-      pwm_level[0] <= 0;
-      pwm_level[1] <= 0;
-      pwm_level[2] <= 0;
-      pwm_level[3] <= 0;
-      pwm_level[4] <= 0;
-      pwm_level[5] <= 0;
-      pwm_level[6] <= 0;
-    end else begin // if (reset)
-      if (counter == 254) begin
-        // Roll over.
-        counter <= 0;
-      end else begin
-        // increment counter
-        counter <= counter + 1'b1;
-      end
-    end // if (reset)
-
-    // SPI reset logic.
-    if (reset || cs) begin
-      // The chip is not selected or we are being reset. Reset all SPI registers.
-      in_buf <= 0;
-      out_buf <= 0;
-      prev_sclk <= 0;
-      spi_counter <= 0;
-      is_writing <= 0;
-      is_reading <= 0;
-      cur_addr <= 0;
-    end // if (reset || cs)
-
-    // regular SPI logic.
-    if (~reset && ~cs && (prev_sclk != sclk)) begin
-      // The chip is selected and the SPI clock changed.
-      // On rising edge we read from mosi, on falling edge, we write to miso.
-      if (sclk) begin
-        // Rising SCLK edge: reading from mosi.
-        in_buf <= (in_buf << 1) | mosi;
-        spi_counter <= spi_counter + 1'b1;
-      end else begin // if (sclk)
-        // Falling SCLK edge
-        if ((spi_counter == 0) && is_writing) begin
-          // Writing. We saved the cur_addr after reading the first byte.
-	  if (cur_addr <= 6) begin
-            pwm_level[cur_addr] <= in_buf;
-	  end
-          is_writing <= 0;
-          is_reading <= 1;
-        end // if ((spi_counter == 0) && is_writing
-	if ((spi_counter == 0) && ~is_writing) begin
-          if (in_buf[7]) begin
-            // We're writing, but the value will come as the next byte.
-            is_writing <= 1;
-	  end else begin
-            is_reading <= 1;
-	  end
-          cur_addr <= in_buf[2:0];
-	end // ((spi_counter == 0) && ~is_writing)
-	if ((spi_counter == 1) && is_reading) begin
-          if (cur_addr <= 6) begin
-            out_buf <= pwm_level[cur_addr];
-	  end else begin
-            out_buf <= 0;
-	  end
-          is_reading <= 0;
-          cur_addr <= 0;
-        end else begin // if ((spi_counter == 1) && is_reading)
-          // Advancing out_buf, so that miso sees a new value.
-          out_buf <= out_buf << 1;
-	end
-      end
-      prev_sclk <= sclk;
-    end // if (~reset && ~cs && (prev_sclk != sclk))
-  end // always @ (posedge clk)
-endmodule
diff --git a/verilog/rtl/073_hex_sr.v b/verilog/rtl/073_hex_sr.v
deleted file mode 100644
index e66feeb..0000000
--- a/verilog/rtl/073_hex_sr.v
+++ /dev/null
@@ -1,31 +0,0 @@
-// Hex shift register
-// Copyright 2022 Eric Smith <spacewar@gmail.com>
-// SPDX-License-Identifier: Apache-2.0
-
-`default_nettype none
-
-module hex_sr #( parameter LENGTH = 40 ) (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-   wire clk;
-   wire recirc;
-   wire [5:0] data_in;
-
-   wire [5:0] data_out;
-
-   assign clk = io_in[0];
-   assign recirc = io_in[1];
-   assign data_in = io_in[7:2];
-
-   assign io_out[7:2] = data_out;
-   assign io_out[1:0] = 2'b0;
-
-   genvar i;
-   generate
-      for (i = 0; i < 6; i = i + 1)
-	sr_recirc #(.LENGTH(LENGTH)) sr0(clk, recirc, data_in[i], data_out[i]);
-   endgenerate
-
-endmodule
diff --git a/verilog/rtl/073_speed_test.v b/verilog/rtl/073_speed_test.v
deleted file mode 100644
index 8510d6b..0000000
--- a/verilog/rtl/073_speed_test.v
+++ /dev/null
@@ -1,209 +0,0 @@
-`timescale 1ns/10ps
-
-//`define COCOTB_SIM
-
-module rdffe(input clk,d,en,rst, output q);
-  `ifdef COCOTB_SIM
-    reg rq;
-    assign #0.1 q = rq;
-    always @(posedge clk or posedge rst)
-      rq <= rst ? 1'b0 : ( en ? d : q);
-  `else
-    wire b;
-    assign b = en ? d : q;
-    sky130_fd_sc_hd__dfrtp_4 dfrtp(
-        .D(b),
-        .RESET_B(~rst),
-        .CLK(clk),
-        .Q(q)
-    );
-  `endif
-endmodule
-
-module sdffe(input clk,d,en,pre, output q);
-  `ifdef COCOTB_SIM 
-    reg rq;
-    assign #0.1 q = rq;
-    always @(posedge clk or posedge pre)
-      rq <= pre ? 1'b1 : ( en ? d : q);
-  `else
-    wire b;
-    assign b = en ? d : q;
-    sky130_fd_sc_hd__dfstp_4 dfstp(
-        .D(b),
-        .SET_B(~pre),
-        .CLK(clk),
-        .Q(q)
-    );
-  `endif
-endmodule
-
-module inv_with_delay(input A,output Y);
-  `ifdef COCOTB_SIM
-  assign #0.02 Y = ~A; // pick a fairly quick delay from the tt_025C_1v80 liberty file
-                       // the actualy delay per stage is going to be slower
-  `else
-  sky130_fd_sc_hd__inv_2 inv(.A(A),.Y(Y));
-  `endif
-endmodule
-
-module nand2_with_delay(input A,input B,output Y);
-  `ifdef COCOTB_SIM
-  assign #0.05 Y = ~(A & B);
-  `else
-  sky130_fd_sc_hd__nand2_2 nand2(.A(A),.B(B),.Y(Y));
-  `endif
-endmodule
-
-module ring_osc(input nrst,output osc);
-  // We count for 1 scan_clk period which expected at 166uS (6KHz).
-  // If the delay of one inverter is 20ps and the ring is 150 inverters long,
-  // then the ring period is 6nS (2*150inv*20pS/inv)
-  // This is 166MHz so expect a count of 166*166 nominally. 
-  // For more time resolution make scan_clk slower but that requires more
-  // counter depth. 
-  // scan clk slowing can be done externally to the TT IC or with the clk div. 
-
-  localparam NUM_INVERTERS = 150; //  must be an even number
-  
-  // setup loop of inverters
-  // http://svn.clairexen.net/handicraft/2015/ringosc/ringosc.v
-  wire [NUM_INVERTERS-1:0] delay_in, delay_out;
-  wire osc_out;
-  inv_with_delay idelay [NUM_INVERTERS-1:0] (
-        .A(delay_in),
-        .Y(delay_out)
-    );
-  assign delay_in = {delay_out[NUM_INVERTERS-2:0], osc_out};
-  nand2_with_delay nand2_with_delay(.A(nrst),.B(delay_out[NUM_INVERTERS-1]),.Y(osc_out));
-  assign osc = osc_out;
-endmodule
-
-module  ring_with_counter #(parameter WIDTH=24) (input nrst, ring_en, count_en, output [WIDTH-1:0] count);
-
-  wire [WIDTH:0] value;
-  wire rst,count_en_s0,count_en_s1,osc,nosc_buf;
-  genvar i;
-
-  ring_osc ring_osc(.nrst(ring_en),.osc(osc));
-
-  inv_with_delay inv_r(.A(nrst),.Y(rst));
-
-  // logic in this module should minimize loading the ring, so buffer the ring output
-  inv_with_delay inv_b(.A(osc),.Y(nosc_buf)); 
-
-  // synchronize the counter enable time to the ring oscillator frequency 
-  // so metastability doesnt corrupt the count.  note: we count on the ring frequency domain
-
-  rdffe ds0(.clk(nosc_buf),.rst(rst),.en(1'b1), .d(count_en),    .q(count_en_s0));
-  rdffe ds1(.clk(nosc_buf),.rst(rst),.en(1'b1), .d(count_en_s0), .q(count_en_s1));
-
-  // Count down toward zero from (signed)-1
-
-  assign value[0] = nosc_buf;
-
-  generate
-		for (i = 1; i < WIDTH; i = i + 1) 
-          sdffe dcg(.clk(value[i-1]),.pre(rst),.en(count_en_s1),.d(~value[i]),.q(value[i]));
-  endgenerate
-
-  // value[WIDTH] is the overflow bit.  Make it sticky.  
-  // This bit should never be cleared if the measurement is designed correctly.
-
-  sdffe dcg(.clk(value[WIDTH-1]),.pre(rst),.en(count_en_s1),.d(1'b0),.q(value[WIDTH]));
-
-  assign count[WIDTH-1:0] = value[WIDTH:1];
-  
-endmodule
-
-module ericsmi_speed_test(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-parameter WIDTH=24;
-localparam COUNTER_WIDTH = 23; // TinyTapeout is small, so find a value that fits by trial and error
-
-wire force_trig, fired, count_en;
-wire [2:0] sel;
-wire [2:0] trig_q;
-wire [1:0] ring_en;
-wire [WIDTH-1:0] value0,value1;
-wire [COUNTER_WIDTH-1:0] count0,count1;
-
-wire clk  = io_in[0];
-wire nrst = io_in[1];
-wire trig = io_in[2];
-
-assign sel[2:0]     = io_in[5:3];
-assign ring_en[1:0] = io_in[7:6];
-
-assign force_trig = &sel; // force the oscillators and counters to run to test their operation
-                          // not really a controlled measurement.  Only for debug. 
-
-inv_with_delay inv_r(.A(nrst),.Y(rst));
-
-// Enable the counters for one clk period upon trig rising edge. 
-// Asserting nrst arms the measurements.  Clear nrst before fire. 
-
-rdffe dt0(.clk(clk),.rst(rst),.en(1'b1), .d(trig ),     .q(trig_q[0]));
-rdffe dt1(.clk(clk),.rst(rst),.en(1'b1), .d(trig_q[0]), .q(trig_q[1]));
-
-rdffe dt2(
-    .clk(clk),
-    .rst(rst),
-    .en(1'b1),
-    .d((trig_q[0] & ~trig_q[1])),
-    .q(trig_q[2])
-);
-
-rdffe dt3(
-    .clk(clk),
-    .rst(rst),
-    .en(1'b1),
-    .d(trig_q[2] | fired),
-    .q(fired)
-);
-
-assign count_en = force_trig | trig_q[2];
-
-ring_with_counter #(.WIDTH(COUNTER_WIDTH)) ring0(
-    .nrst(nrst),
-    .ring_en(ring_en[0]),
-    .count_en(count_en),
-    .count(count0[COUNTER_WIDTH-1:0])
-);
-
-assign value0[WIDTH-1:0] = {{WIDTH-COUNTER_WIDTH{count0[COUNTER_WIDTH-1]}},count0[COUNTER_WIDTH-1:0]};
-
-ring_with_counter #(.WIDTH(COUNTER_WIDTH)) ring1(
-    .nrst(nrst),
-    .ring_en(ring_en[1]),
-    .count_en(count_en),
-    .count(count1[COUNTER_WIDTH-1:0])
-);
-
-assign value1[WIDTH-1:0] = {{WIDTH-COUNTER_WIDTH{count1[COUNTER_WIDTH-1]}},count1[COUNTER_WIDTH-1:0]};
-
-wire [7:0] status;
-
-// when force_trigger is asserted put the status byte on the output, everything is free running. 
-assign status[7:0] = {1'b1, 
-                      fired, 
-                      value1[COUNTER_WIDTH-1], // overflow
-                      value0[COUNTER_WIDTH-1], // overflow
-                      value1[COUNTER_WIDTH-2],
-                      value0[COUNTER_WIDTH-2],
-                      value1[16], // 16=Ceiling@Log2[166*166]+1
-                      value0[16]};
-
-assign io_out[7:0] = sel[2:0] == 3'b000 ? 8'd0 : 
-                     sel[2:0] == 3'b001 ? {value0[7:0]} :
-                     sel[2:0] == 3'b010 ? {value0[15:8]} :
-                     sel[2:0] == 3'b011 ? {value0[23:16]} : 
-                     sel[2:0] == 3'b100 ? {value1[7:0]} :
-                     sel[2:0] == 3'b101 ? {value1[15:8]} :
-                     sel[2:0] == 3'b110 ? {value1[23:16]} :
-                                          status[7:0] ;
-
-endmodule
diff --git a/verilog/rtl/074_speed_test.v b/verilog/rtl/074_speed_test.v
deleted file mode 100644
index 8510d6b..0000000
--- a/verilog/rtl/074_speed_test.v
+++ /dev/null
@@ -1,209 +0,0 @@
-`timescale 1ns/10ps
-
-//`define COCOTB_SIM
-
-module rdffe(input clk,d,en,rst, output q);
-  `ifdef COCOTB_SIM
-    reg rq;
-    assign #0.1 q = rq;
-    always @(posedge clk or posedge rst)
-      rq <= rst ? 1'b0 : ( en ? d : q);
-  `else
-    wire b;
-    assign b = en ? d : q;
-    sky130_fd_sc_hd__dfrtp_4 dfrtp(
-        .D(b),
-        .RESET_B(~rst),
-        .CLK(clk),
-        .Q(q)
-    );
-  `endif
-endmodule
-
-module sdffe(input clk,d,en,pre, output q);
-  `ifdef COCOTB_SIM 
-    reg rq;
-    assign #0.1 q = rq;
-    always @(posedge clk or posedge pre)
-      rq <= pre ? 1'b1 : ( en ? d : q);
-  `else
-    wire b;
-    assign b = en ? d : q;
-    sky130_fd_sc_hd__dfstp_4 dfstp(
-        .D(b),
-        .SET_B(~pre),
-        .CLK(clk),
-        .Q(q)
-    );
-  `endif
-endmodule
-
-module inv_with_delay(input A,output Y);
-  `ifdef COCOTB_SIM
-  assign #0.02 Y = ~A; // pick a fairly quick delay from the tt_025C_1v80 liberty file
-                       // the actualy delay per stage is going to be slower
-  `else
-  sky130_fd_sc_hd__inv_2 inv(.A(A),.Y(Y));
-  `endif
-endmodule
-
-module nand2_with_delay(input A,input B,output Y);
-  `ifdef COCOTB_SIM
-  assign #0.05 Y = ~(A & B);
-  `else
-  sky130_fd_sc_hd__nand2_2 nand2(.A(A),.B(B),.Y(Y));
-  `endif
-endmodule
-
-module ring_osc(input nrst,output osc);
-  // We count for 1 scan_clk period which expected at 166uS (6KHz).
-  // If the delay of one inverter is 20ps and the ring is 150 inverters long,
-  // then the ring period is 6nS (2*150inv*20pS/inv)
-  // This is 166MHz so expect a count of 166*166 nominally. 
-  // For more time resolution make scan_clk slower but that requires more
-  // counter depth. 
-  // scan clk slowing can be done externally to the TT IC or with the clk div. 
-
-  localparam NUM_INVERTERS = 150; //  must be an even number
-  
-  // setup loop of inverters
-  // http://svn.clairexen.net/handicraft/2015/ringosc/ringosc.v
-  wire [NUM_INVERTERS-1:0] delay_in, delay_out;
-  wire osc_out;
-  inv_with_delay idelay [NUM_INVERTERS-1:0] (
-        .A(delay_in),
-        .Y(delay_out)
-    );
-  assign delay_in = {delay_out[NUM_INVERTERS-2:0], osc_out};
-  nand2_with_delay nand2_with_delay(.A(nrst),.B(delay_out[NUM_INVERTERS-1]),.Y(osc_out));
-  assign osc = osc_out;
-endmodule
-
-module  ring_with_counter #(parameter WIDTH=24) (input nrst, ring_en, count_en, output [WIDTH-1:0] count);
-
-  wire [WIDTH:0] value;
-  wire rst,count_en_s0,count_en_s1,osc,nosc_buf;
-  genvar i;
-
-  ring_osc ring_osc(.nrst(ring_en),.osc(osc));
-
-  inv_with_delay inv_r(.A(nrst),.Y(rst));
-
-  // logic in this module should minimize loading the ring, so buffer the ring output
-  inv_with_delay inv_b(.A(osc),.Y(nosc_buf)); 
-
-  // synchronize the counter enable time to the ring oscillator frequency 
-  // so metastability doesnt corrupt the count.  note: we count on the ring frequency domain
-
-  rdffe ds0(.clk(nosc_buf),.rst(rst),.en(1'b1), .d(count_en),    .q(count_en_s0));
-  rdffe ds1(.clk(nosc_buf),.rst(rst),.en(1'b1), .d(count_en_s0), .q(count_en_s1));
-
-  // Count down toward zero from (signed)-1
-
-  assign value[0] = nosc_buf;
-
-  generate
-		for (i = 1; i < WIDTH; i = i + 1) 
-          sdffe dcg(.clk(value[i-1]),.pre(rst),.en(count_en_s1),.d(~value[i]),.q(value[i]));
-  endgenerate
-
-  // value[WIDTH] is the overflow bit.  Make it sticky.  
-  // This bit should never be cleared if the measurement is designed correctly.
-
-  sdffe dcg(.clk(value[WIDTH-1]),.pre(rst),.en(count_en_s1),.d(1'b0),.q(value[WIDTH]));
-
-  assign count[WIDTH-1:0] = value[WIDTH:1];
-  
-endmodule
-
-module ericsmi_speed_test(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-parameter WIDTH=24;
-localparam COUNTER_WIDTH = 23; // TinyTapeout is small, so find a value that fits by trial and error
-
-wire force_trig, fired, count_en;
-wire [2:0] sel;
-wire [2:0] trig_q;
-wire [1:0] ring_en;
-wire [WIDTH-1:0] value0,value1;
-wire [COUNTER_WIDTH-1:0] count0,count1;
-
-wire clk  = io_in[0];
-wire nrst = io_in[1];
-wire trig = io_in[2];
-
-assign sel[2:0]     = io_in[5:3];
-assign ring_en[1:0] = io_in[7:6];
-
-assign force_trig = &sel; // force the oscillators and counters to run to test their operation
-                          // not really a controlled measurement.  Only for debug. 
-
-inv_with_delay inv_r(.A(nrst),.Y(rst));
-
-// Enable the counters for one clk period upon trig rising edge. 
-// Asserting nrst arms the measurements.  Clear nrst before fire. 
-
-rdffe dt0(.clk(clk),.rst(rst),.en(1'b1), .d(trig ),     .q(trig_q[0]));
-rdffe dt1(.clk(clk),.rst(rst),.en(1'b1), .d(trig_q[0]), .q(trig_q[1]));
-
-rdffe dt2(
-    .clk(clk),
-    .rst(rst),
-    .en(1'b1),
-    .d((trig_q[0] & ~trig_q[1])),
-    .q(trig_q[2])
-);
-
-rdffe dt3(
-    .clk(clk),
-    .rst(rst),
-    .en(1'b1),
-    .d(trig_q[2] | fired),
-    .q(fired)
-);
-
-assign count_en = force_trig | trig_q[2];
-
-ring_with_counter #(.WIDTH(COUNTER_WIDTH)) ring0(
-    .nrst(nrst),
-    .ring_en(ring_en[0]),
-    .count_en(count_en),
-    .count(count0[COUNTER_WIDTH-1:0])
-);
-
-assign value0[WIDTH-1:0] = {{WIDTH-COUNTER_WIDTH{count0[COUNTER_WIDTH-1]}},count0[COUNTER_WIDTH-1:0]};
-
-ring_with_counter #(.WIDTH(COUNTER_WIDTH)) ring1(
-    .nrst(nrst),
-    .ring_en(ring_en[1]),
-    .count_en(count_en),
-    .count(count1[COUNTER_WIDTH-1:0])
-);
-
-assign value1[WIDTH-1:0] = {{WIDTH-COUNTER_WIDTH{count1[COUNTER_WIDTH-1]}},count1[COUNTER_WIDTH-1:0]};
-
-wire [7:0] status;
-
-// when force_trigger is asserted put the status byte on the output, everything is free running. 
-assign status[7:0] = {1'b1, 
-                      fired, 
-                      value1[COUNTER_WIDTH-1], // overflow
-                      value0[COUNTER_WIDTH-1], // overflow
-                      value1[COUNTER_WIDTH-2],
-                      value0[COUNTER_WIDTH-2],
-                      value1[16], // 16=Ceiling@Log2[166*166]+1
-                      value0[16]};
-
-assign io_out[7:0] = sel[2:0] == 3'b000 ? 8'd0 : 
-                     sel[2:0] == 3'b001 ? {value0[7:0]} :
-                     sel[2:0] == 3'b010 ? {value0[15:8]} :
-                     sel[2:0] == 3'b011 ? {value0[23:16]} : 
-                     sel[2:0] == 3'b100 ? {value1[7:0]} :
-                     sel[2:0] == 3'b101 ? {value1[15:8]} :
-                     sel[2:0] == 3'b110 ? {value1[23:16]} :
-                                          status[7:0] ;
-
-endmodule
diff --git a/verilog/rtl/074_tt2.v b/verilog/rtl/074_tt2.v
deleted file mode 100644
index c32b838..0000000
--- a/verilog/rtl/074_tt2.v
+++ /dev/null
@@ -1,151 +0,0 @@
-/** tt2.v
- * Author: Aidan Medcalf
- * 
- * Top-level TinyTapeout 2 wrapper
- */
-
-`default_nettype none
-
-module AidanMedcalf_pid_controller (
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-    wire clk;
-    wire reset;
-    //wire enable;
-    wire cfg_clk;
-    wire cfg_mosi;
-    wire cfg_cs;
-    wire pv_in_miso;
-
-    assign clk        = io_in[0];
-    assign reset      = io_in[1];
-    // io_in[2] not used
-    //assign enable     = io_in[2];
-    assign cfg_clk    = io_in[3];
-    assign cfg_mosi   = io_in[4];
-    // io_in[5] not used
-    assign cfg_cs     = io_in[6];
-    assign pv_in_miso = io_in[7];
-
-    wire pv_in_clk;
-    wire pv_in_cs;
-    reg  [1:0] pv_in_cs_hist;
-    wire out_clk, out_cs, out_mosi;
-
-    assign io_out[0] = pv_in_clk;
-    assign io_out[1] = pv_in_cs;
-    //assign io_out[2] = 1'b0; // io_out[2] not used
-    //assign io_out[3] = pid_stb_d1;
-    //assign io_out[7:4] = out;
-    assign io_out[2] = out_clk;
-    assign io_out[3] = out_mosi;
-    assign io_out[4] = out_cs;
-    assign io_out[7:5] = 1'b0; // not used
-
-    // Configuration registers
-    //reg  [7:0] cfg_buf[4];
-    wire [7:0] sp;
-    wire [7:0] kp;
-    wire [7:0] ki;
-    //wire [7:0] kd;
-
-    //assign sp = cfg_buf[0][3:0];
-    //assign kp = cfg_buf[0][7:4];
-    //assign ki = cfg_buf[1][3:0];
-    //assign kd = cfg_buf[1][7:4];
-    //assign stb_level[7:0] = cfg_buf[2];
-    //assign stb_level[15:8] = cfg_buf[3];
-
-    assign sp = cfg_spi_buffer[7:0];
-    assign kp = cfg_spi_buffer[15:8];
-    assign ki = cfg_spi_buffer[23:16];
-    //assign kd = cfg_spi_buffer[31:24];
-
-    wire pv_stb;
-    wire pid_stb;
-    reg pid_stb_d1;
-
-    wire pid_rst;
-    assign pid_rst = reset || !cfg_cs;
-
-    // I/O registers
-    reg [7:0] in_pv;
-    reg [7:0] out;
-
-    // Slave SPI for configuration
-    //wire cfg_spi_done;
-    wire [23:0] cfg_spi_buffer;
-    spi_slave_in #(.BITS(24)) cfg_spi(.reset(reset), .clk(clk), .cs(cfg_cs), .sck(cfg_clk), .mosi(cfg_mosi), .out_buf(cfg_spi_buffer));
-
-    // Shift input in
-    spi_master_in spi_in(.reset(pid_rst), .clk(clk),
-                           .miso(pv_in_miso), .start(pv_stb),
-                           .out_buf(in_pv), .sck(pv_in_clk), .cs(pv_in_cs));
-
-    // Shift output out
-    spi_master_out spi_out(.reset(pid_rst), .clk(clk), .in_buf(out),
-                           .start(pid_stb_d1),
-                           .sck(out_clk), .cs(out_cs), .mosi(out_mosi));
-
-    // PID core
-    pid pid (.reset(pid_rst), .clk(clk), .pv_stb(pid_stb),
-             .sp(sp), .pv(in_pv),
-             .kp(kp), .ki(ki),
-             .stimulus(out));
-    
-    strobe #(.BITS(16)) pv_stb_gen(.reset(reset), .clk(clk), .out(pv_stb));
-
-    assign pid_stb = pv_in_cs_hist[0] && !pv_in_cs_hist[1];
-
-    always @(posedge clk) begin
-        if (reset) begin
-            pid_stb_d1 <= 'b0;
-            pv_in_cs_hist <= 'b0;
-        end else begin
-            pv_in_cs_hist <= { pv_in_cs_hist[0], pv_in_cs };
-            pid_stb_d1 <= pid_stb;
-        end
-    end
-
-endmodule
-
-/*
-module edge_detect (
-    input  reset,
-    input  clk,
-    input  sig,
-    input  pol,
-    output out
-);
-    reg sigin;
-    reg siglast;
-    assign out = reset ? 1'b0 : (pol ? ((!siglast) && sigin) : (siglast && (!sigin)));
-    always @(posedge clk) begin
-        { siglast, sigin } <= { sigin, sig };
-        //sigin <= sig;
-        //siglast <= sigin;
-    end
-endmodule
-*/
-
-module strobe #(
-    parameter BITS=8
-) (
-    input reset,
-    input clk,
-    output out
-);
-    reg  [BITS-1:0] count;
-    wire [BITS-1:0] next;
-    assign next = count + 'b1;
-    assign out = next == 'b0;
-    always @(posedge clk) begin
-        if (reset) begin
-            count <= 'b0;
-        end else begin
-            count <= next;
-        end
-    end
-endmodule
diff --git a/verilog/rtl/075_TrainLED2_top.v b/verilog/rtl/075_TrainLED2_top.v
deleted file mode 100644
index c122685..0000000
--- a/verilog/rtl/075_TrainLED2_top.v
+++ /dev/null
@@ -1,19 +0,0 @@
-module cpldcpu_TrainLED2top(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-// Instance 1
-TrainLED2 TrainLED2_top1 (
-  .clk(io_in[0]),
-  .rst(io_in[1]),
-  .din(io_in[2]),
-  .dout(io_out[0]),
-  .led1(io_out[1]),
-  .led2(io_out[2]),
-  .led3(io_out[3])
-  );
-
-
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/075_tt2.v b/verilog/rtl/075_tt2.v
deleted file mode 100644
index c32b838..0000000
--- a/verilog/rtl/075_tt2.v
+++ /dev/null
@@ -1,151 +0,0 @@
-/** tt2.v
- * Author: Aidan Medcalf
- * 
- * Top-level TinyTapeout 2 wrapper
- */
-
-`default_nettype none
-
-module AidanMedcalf_pid_controller (
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-    wire clk;
-    wire reset;
-    //wire enable;
-    wire cfg_clk;
-    wire cfg_mosi;
-    wire cfg_cs;
-    wire pv_in_miso;
-
-    assign clk        = io_in[0];
-    assign reset      = io_in[1];
-    // io_in[2] not used
-    //assign enable     = io_in[2];
-    assign cfg_clk    = io_in[3];
-    assign cfg_mosi   = io_in[4];
-    // io_in[5] not used
-    assign cfg_cs     = io_in[6];
-    assign pv_in_miso = io_in[7];
-
-    wire pv_in_clk;
-    wire pv_in_cs;
-    reg  [1:0] pv_in_cs_hist;
-    wire out_clk, out_cs, out_mosi;
-
-    assign io_out[0] = pv_in_clk;
-    assign io_out[1] = pv_in_cs;
-    //assign io_out[2] = 1'b0; // io_out[2] not used
-    //assign io_out[3] = pid_stb_d1;
-    //assign io_out[7:4] = out;
-    assign io_out[2] = out_clk;
-    assign io_out[3] = out_mosi;
-    assign io_out[4] = out_cs;
-    assign io_out[7:5] = 1'b0; // not used
-
-    // Configuration registers
-    //reg  [7:0] cfg_buf[4];
-    wire [7:0] sp;
-    wire [7:0] kp;
-    wire [7:0] ki;
-    //wire [7:0] kd;
-
-    //assign sp = cfg_buf[0][3:0];
-    //assign kp = cfg_buf[0][7:4];
-    //assign ki = cfg_buf[1][3:0];
-    //assign kd = cfg_buf[1][7:4];
-    //assign stb_level[7:0] = cfg_buf[2];
-    //assign stb_level[15:8] = cfg_buf[3];
-
-    assign sp = cfg_spi_buffer[7:0];
-    assign kp = cfg_spi_buffer[15:8];
-    assign ki = cfg_spi_buffer[23:16];
-    //assign kd = cfg_spi_buffer[31:24];
-
-    wire pv_stb;
-    wire pid_stb;
-    reg pid_stb_d1;
-
-    wire pid_rst;
-    assign pid_rst = reset || !cfg_cs;
-
-    // I/O registers
-    reg [7:0] in_pv;
-    reg [7:0] out;
-
-    // Slave SPI for configuration
-    //wire cfg_spi_done;
-    wire [23:0] cfg_spi_buffer;
-    spi_slave_in #(.BITS(24)) cfg_spi(.reset(reset), .clk(clk), .cs(cfg_cs), .sck(cfg_clk), .mosi(cfg_mosi), .out_buf(cfg_spi_buffer));
-
-    // Shift input in
-    spi_master_in spi_in(.reset(pid_rst), .clk(clk),
-                           .miso(pv_in_miso), .start(pv_stb),
-                           .out_buf(in_pv), .sck(pv_in_clk), .cs(pv_in_cs));
-
-    // Shift output out
-    spi_master_out spi_out(.reset(pid_rst), .clk(clk), .in_buf(out),
-                           .start(pid_stb_d1),
-                           .sck(out_clk), .cs(out_cs), .mosi(out_mosi));
-
-    // PID core
-    pid pid (.reset(pid_rst), .clk(clk), .pv_stb(pid_stb),
-             .sp(sp), .pv(in_pv),
-             .kp(kp), .ki(ki),
-             .stimulus(out));
-    
-    strobe #(.BITS(16)) pv_stb_gen(.reset(reset), .clk(clk), .out(pv_stb));
-
-    assign pid_stb = pv_in_cs_hist[0] && !pv_in_cs_hist[1];
-
-    always @(posedge clk) begin
-        if (reset) begin
-            pid_stb_d1 <= 'b0;
-            pv_in_cs_hist <= 'b0;
-        end else begin
-            pv_in_cs_hist <= { pv_in_cs_hist[0], pv_in_cs };
-            pid_stb_d1 <= pid_stb;
-        end
-    end
-
-endmodule
-
-/*
-module edge_detect (
-    input  reset,
-    input  clk,
-    input  sig,
-    input  pol,
-    output out
-);
-    reg sigin;
-    reg siglast;
-    assign out = reset ? 1'b0 : (pol ? ((!siglast) && sigin) : (siglast && (!sigin)));
-    always @(posedge clk) begin
-        { siglast, sigin } <= { sigin, sig };
-        //sigin <= sig;
-        //siglast <= sigin;
-    end
-endmodule
-*/
-
-module strobe #(
-    parameter BITS=8
-) (
-    input reset,
-    input clk,
-    output out
-);
-    reg  [BITS-1:0] count;
-    wire [BITS-1:0] next;
-    assign next = count + 'b1;
-    assign out = next == 'b0;
-    always @(posedge clk) begin
-        if (reset) begin
-            count <= 'b0;
-        end else begin
-            count <= next;
-        end
-    end
-endmodule
diff --git a/verilog/rtl/076_TrainLED2_top.v b/verilog/rtl/076_TrainLED2_top.v
deleted file mode 100644
index c122685..0000000
--- a/verilog/rtl/076_TrainLED2_top.v
+++ /dev/null
@@ -1,19 +0,0 @@
-module cpldcpu_TrainLED2top(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-// Instance 1
-TrainLED2 TrainLED2_top1 (
-  .clk(io_in[0]),
-  .rst(io_in[1]),
-  .din(io_in[2]),
-  .dout(io_out[0]),
-  .led1(io_out[1]),
-  .led2(io_out[2]),
-  .led3(io_out[3])
-  );
-
-
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/076_mcpu5plus.v b/verilog/rtl/076_mcpu5plus.v
deleted file mode 100644
index 61b42cc..0000000
--- a/verilog/rtl/076_mcpu5plus.v
+++ /dev/null
@@ -1,76 +0,0 @@
-
-`default_nettype none
-
-module cpldcpu_MCPU5plus(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-MCPU5plus MCPU5plus_top (
-  .clk(io_in[0]),
-  .rst(io_in[1]),
-  .inst_in(io_in[7:2]),
-  .cpu_out(io_out[7:0])
-);
-
-endmodule
-
-
-module MCPU5plus(inst_in,cpu_out,rst,clk);
-
-input [5:0] inst_in;
-output [7:0] cpu_out;
-input rst;
-input clk;
-
-localparam OP_BCC  = 2'b00;      //00IIII
-localparam OP_STA  = 3'b101;     //101RRR
-localparam OP_JMPA = 6'b111010;  //111010
-
-reg [8:0] accu; // accu(6) is carry !
-reg [7:0] pc;
-reg [7:0] regfile [0:8];
-reg iflag;
-integer i;
-
-    //handle register file writes (STA)
-    always @(*)
-        if ((inst_in[5:3] == OP_STA) && ~rst && ~clk)
-            regfile[inst_in[2:0]] <= accu;
-
-	always @(posedge clk)
-		if (rst) begin
-			accu <= 0;	
-			pc <= 0;
-            iflag <= 0;
-		end
-		else begin
-            // PC
-            if ((inst_in[5:4] == OP_BCC) && ~accu[8])            // conditional branch (BCC)            
-                pc <= pc + (iflag ? { inst_in[3:0], accu[3:0]}: {{4{inst_in[3]}}, inst_in[3:0]});  
-            else
-                pc <= pc + 1'b1;
-                       
-            // ALU path + carry flag
-            casex(inst_in)
-                6'b00????: accu[8]   <= 1'b0;                                                                     // BCC #imm4
-                6'b01????: accu[7:0] <= iflag ? { inst_in[3:0], accu[3:0]}: {{4{inst_in[3]}}, inst_in[3:0]}  ;    // LDI #simm4
-                6'b100???: accu[8:0] <= {1'b0,regfile[inst_in[2:0]]} + {1'b0,accu[7:0]};                          // ADD reg8
-                6'b101???: ;                                                                                      // STA reg8
-                6'b110???: accu[7:0] <= regfile[inst_in[2:0]];                                                    // LDA reg8
-                6'b11100?: accu[8:0] <= {~inst_in[0] & accu[8], ~accu[7:0]} + inst_in[0];                         // NEG / NOT
-                6'b111010: ;                                                                                      // Free
-                6'b111011: ;                                                                                      // OUT
-                6'b1111??: ;                                                                                      // Free imm2
-            endcase
-
-            // Flags
-            casex(inst_in)
-                6'b01????: iflag <= 1'b1;           // LDI #simm4
-                default:   iflag <= 1'b0;           // all others
-            endcase		
-        end
-
-    assign cpu_out = clk ? {pc[7:0]} :  accu[7:0] ; 
-
-endmodule
diff --git a/verilog/rtl/077_cpu.v b/verilog/rtl/077_cpu.v
deleted file mode 100644
index c025225..0000000
--- a/verilog/rtl/077_cpu.v
+++ /dev/null
@@ -1,273 +0,0 @@
-
-//
-//	(C) Copyright Paul Campbell 2022 taniwha@gmail.com
-//	Released under an Apache License 2.0
-//
-
-`default_nettype none
-
-module moonbase_cpu_4bit #(parameter MAX_COUNT=1000) (input [7:0] io_in, output [7:0] io_out);
-   
-	//
-	//	External interfacex
-	//
-	//	external address latch
-	//		the external 7 bit address latch is loaded from io_out[6:0] when io_out[7] is 1	
-	//	external SRAM (eg MWS5101AEL3):
-	//		the external RAM always produces what is at the latch's addresses on io_in[5:2]
-	//		the external SRAM is written when io_out[7] is 0 and io_out[5] is 0
-	//		io_out[6] can be used as an extra address bit to split the address space between
-	//			code (1) and data (0) to use a 256-nibble sram (woot!)
-	//  external devices:
-	//		external devices can be read from io_in[7:6] (at address pointed to by the address latch)
-	//		external devices can be written from io_out[3:0] (at address pointed to by the address latch)
-	//			when io_out[7] is 0 and io_out[4] is 0
-	//
-	//
-	//	SRAM address space (data accesses):
-	//		0-127	external
-	//		128-131 internal	(internal ram cells, for filling up the die :-)
-	//
-
-	localparam N_LOCAL_RAM = 24;
-     
-    wire clk			= io_in[0];
-    wire reset			= io_in[1];
-    wire [3:0]ram_in	= io_in[5:2];
-    wire [1:0]data_in	= io_in[7:6];
-    
-    reg       strobe_out;	// address strobe		- designed to be wired to a 7 bit latch and a MWS5101AEL3
-    reg       write_data_n;	// write enable for data
-    reg       write_ram_n;	// write enable for ram
-    reg	      addr_pc;
-    reg	      data_pc;
-	wire [6:0]data_addr = ((r_tmp[3]?r_y[6:0]:r_x[6:0])+{4'b000, r_tmp[2:0]});
-	wire	  is_local_ram = (r_tmp[3]?r_y[7]:r_x[7]);
-	wire	  write_local_ram = is_local_ram & !write_ram_n;
-	wire [$clog2(N_LOCAL_RAM)-1:0]local_ram_addr = data_addr[$clog2(N_LOCAL_RAM)-1:0];
-    wire [6:0]addr_out = addr_pc ? r_pc : data_addr;							// address out mux (PC or X/Y+off)
-    assign    io_out   = {strobe_out, strobe_out? addr_out : {data_pc, write_ram_n|is_local_ram, write_data_n, r_a}};  // mux address and data out
-
-    reg  [6:0]r_pc, c_pc;	// program counter	// actual flops in the system 
-    reg  [7:0]r_x, c_x;		// x index register	// by convention r_* is a flop, c_* is the combinatorial that feeds it
-    reg  [7:0]r_y, c_y;		// y index register
-    reg  [3:0]r_a, c_a;		// accumulator
-    reg       r_c, c_c;		// carry flag
-    reg  [3:0]r_tmp2, c_tmp2;// operand temp (high)
-    reg  [3:0]r_tmp,  c_tmp;// operand temp (low)
-	reg  [6:0]r_s0,   c_s0;	// call stack
-	reg  [6:0]r_s1,   c_s1;
-	reg  [6:0]r_s2,   c_s2;
-	reg  [6:0]r_s3,   c_s3;
-
-    //
-    //	phase:
-    //		0 - instruction fetch addr
-    //		1 - instruction fetch data
-    //		2 - const fetch addr 
-    //		3 - const fetch data 
-    //		4 - data/const fetch addr 
-    //		5 - data/const fetch data 
-    //		6 - execute/data store addr
-    //		7 - data store data (might not do this)
-    //
-    reg [2:0]r_phase, c_phase;	// CPU internal state machine
-	
-
-    // instructions
-    //
-    //  0 v:	add a, v(x/y)	- sets C
-    //  1 v: 	sub a, v(x/y)	- sets C
-    //  2 v:	or a, v(x/y)
-    //  3 v:	and a, v(x/y)
-    //  4 v:	xor a, v(x/y)
-    //  5 v:	mov a, v(x/y)
-    //  6 v:	movd a, v(x/y)
-    //  7 0:	swap x, y
-    //	  1:    add a, c
-    //	  2:    mov x.l, a
-    //	  3:    ret
-	//    4:    add y, a
-    //	  5:    add x, a
-	//    6:    add y, #1
-	//    7:    add x, #1
-    //	8 v:	mov a, #v
-    //  9 v:	add a, #v 
-    //  a v:	movd v(x/y), a
-    //  b v:	mov  v(x/y), a
-    //  c h l:	mov x, #hl
-    //  d h l:	jne a/c, hl	if h[3] the test c otherwise test a
-    //  e h l:	jeq a/c, hl	if h[3] the test c otherwise test a
-    //  f h l:	jmp/call hl
-    //
-    //  Memory access - addresses are 7 bits - v(X/y) is a 3-bit offset v[2:0]
-    //  	if  v[3] it's Y+v[2:0]
-    //  	if !v[3] it's X+v[2:0]
-    //
-    //	The general idea is that X normally points to a bank of in sram 8 'registers',
-    //		a bit like an 8051's r0-7, while X is a more general index register
-	//		(but you can use both if you need to do	some copying)
-    //		
-
-    reg  [3:0]r_ins, c_ins;	// fetched instruction
-
-	wire [4:0]c_add = {1'b0, r_a}+{1'b0, r_tmp};	// ALUs
-	wire [4:0]c_sub = {1'b0, r_a}-{1'b0, r_tmp};
-	wire [6:0]c_i_add = (r_tmp[0]?r_x:r_y)+(r_tmp[1]?7'b1:{3'b0, r_a});
-	wire [6:0]c_pc_inc = r_pc+1;
-
-	
-	reg	 [3:0] r_local_ram[0:N_LOCAL_RAM-1];
-
-	wire [3:0] local_ram = r_local_ram[local_ram_addr];
-	always @(posedge clk)
-	if (write_local_ram)
-		r_local_ram[local_ram_addr] <= r_a;
-
-    always @(*) begin
-		c_ins  = r_ins;	
-		c_x    = r_x;
-		c_y    = r_y;
-		c_a    = r_a;
-		c_s0   = r_s0;
-		c_s1   = r_s1;
-		c_s2   = r_s2;
-		c_s3   = r_s3;
-		c_tmp  = r_tmp;
-		c_tmp2 = r_tmp2;
-		c_pc   = r_pc;
-		c_c    = r_c;
-		write_data_n = 1;
-		write_ram_n = 1;
-		addr_pc = 'bx;
-		data_pc = 'bx;
-    	if (reset) begin	// reset clears the state machine and sets PC to 0
-			c_pc = 0;
-			c_phase = 0;
-			strobe_out = 1;
-    	end else 
-    	case (r_phase) // synthesis full_case parallel_case
-    	0:	begin					// 0: address latch instruction PC
-				strobe_out = 1;
-				addr_pc = 1;
-				c_phase = 1;
-			end
-    	1:	begin					// 1: read data in
-				strobe_out = 0;
-				data_pc = 1;
-				c_ins = ram_in;
-				c_pc = c_pc_inc;
-				c_phase = 2;
-			end
-		2:	begin
-				strobe_out = 1;			// 2: address latch operand PC
-				addr_pc = 1;
-				c_phase = 3;
-			end
-		3:	begin
-				strobe_out = 0;			// 3: read operand
-				c_tmp = ram_in;
-				c_pc = c_pc_inc;
-				data_pc = 1;
-				case (r_ins) // synthesis full_case parallel_case
-				7, 8, 9, 10, 11: c_phase = 6;// some instructions don't have a 2nd fetch
-				default:	     c_phase = 4;
-				endcase
-			end
-		4:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = r_ins[3:2] == 3;	// some instructions read a 2nd operand, the rest the come here read a memory location
-				c_phase = 5;
-			end
-		5:	begin						// 5 read next operand
-				strobe_out = 0;
-				data_pc = r_ins[3:2] == 3;
-				c_tmp2 = r_tmp;				// low->high for 2 byte cases
-				c_tmp = (r_ins[3:1] == 3?{2'b0,data_in}:is_local_ram&&r_ins[3:2] != 3?local_ram:ram_in);	// read the actial data, movd comes from upper bits
-				if (r_ins[3:2] == 3)		// if we fetched from PC increment it
-					c_pc = c_pc_inc;
-				c_phase = 6;
-			end
-		6:	begin						// 6 execute stage 
-				strobe_out = r_ins[3:1] == 5;	// if writing to anything latch address
-				addr_pc = 0;
-				c_phase = 0;					// if not writing go back
-				case (r_ins)// synthesis full_case parallel_case
-				0,												// add  a, v(x)
-				9:	begin c_c = c_add[4]; c_a = c_add[3:0]; end	// add  a, #v
-				1:	begin c_c = c_sub[4]; c_a = c_sub[3:0]; end	// sub  a, v(x)
-				2:	c_a = r_a|r_tmp;							// or   a, v(x)
-				3:	c_a = r_a&r_tmp;							// sub  a, v(x)
-				4:	c_a = r_a^r_tmp;							// xor  a, v(x)
-				5,												// mov  a, v(x)
-				6,												// movd a, v(x)
-				8:	c_a = r_tmp;								// mov  a, #v
-				7:	case (r_tmp) // synthesis full_case parallel_case
-    				0: begin c_x = r_y; c_y = r_x; end			// 0    swap  y, x
-					1: c_a = r_a+{3'b000, r_c};					// 1	add   a, c
-    				2: c_x[3:0] = r_a;							// 2    mov   x.l, a
-    				3: begin									// 3    ret
-							c_pc = r_s0;
-							c_s0 = r_s1;
-							c_s1 = r_s2;
-							c_s2 = r_s3;
-					   end
-					4: c_y = c_i_add;							// 4    add   y, a
-					5: c_x = c_i_add;							// 5    add   x, a
-					6: c_y = c_i_add;							// 6    add   y, #1
-					7: c_x = c_i_add;							// 7    add   y, #1
-					default: ;
-					endcase
-				10,												// movd v(x), a
-				11:	c_phase = 7;								// mov  v(x), a
-				12:	c_x  = {r_tmp2, r_tmp};						// mov  x, #VV
-				13:	c_pc = (r_tmp2[3]?!r_c : r_a != 0) ? {r_tmp2[2:0], r_tmp} : r_pc; // jne	a/c, VV
-				14:	c_pc = (r_tmp2[3]? r_c : r_a == 0) ? {r_tmp2[2:0], r_tmp} : r_pc; // jeq        a/c, VV
-				15:	begin c_pc = {r_tmp2[2:0], r_tmp};				// jmp  VV
-						if (r_tmp2[3]) begin	// call
-							c_s0 = r_pc;
-							c_s1 = r_s0;
-							c_s2 = r_s1;
-							c_s3 = r_s2;
-						end
-					end
-				endcase
-			end
-		7:	begin						// 7 write data stage - assert appropriate write strobe
-				strobe_out = 0;
-				data_pc = 0;
-				write_data_n =  r_ins[0];
-				write_ram_n  = ~r_ins[0];
-				c_phase = 0;
-			end
-    	endcase
-    end
-
-    always @(posedge clk) begin
-		r_a     <= c_a;
-		r_c     <= c_c;
-		r_x     <= c_x;
-		r_y     <= c_y;
-		r_ins   <= c_ins;
-		r_tmp   <= c_tmp;
-		r_tmp2  <= c_tmp2;
-		r_pc    <= c_pc;
-		r_phase <= c_phase;
-		r_s0    <= c_s0;
-		r_s1    <= c_s1;
-		r_s2    <= c_s2;
-		r_s3    <= c_s3;
-    end
-
-endmodule
-
-/* For Emacs:   
- * Local Variables:
- * mode:c       
- * indent-tabs-mode:t
- * tab-width:4  
- * c-basic-offset:4
- * End: 
- * For VIM:
- * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
- */
diff --git a/verilog/rtl/077_mcpu5plus.v b/verilog/rtl/077_mcpu5plus.v
deleted file mode 100644
index 61b42cc..0000000
--- a/verilog/rtl/077_mcpu5plus.v
+++ /dev/null
@@ -1,76 +0,0 @@
-
-`default_nettype none
-
-module cpldcpu_MCPU5plus(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-MCPU5plus MCPU5plus_top (
-  .clk(io_in[0]),
-  .rst(io_in[1]),
-  .inst_in(io_in[7:2]),
-  .cpu_out(io_out[7:0])
-);
-
-endmodule
-
-
-module MCPU5plus(inst_in,cpu_out,rst,clk);
-
-input [5:0] inst_in;
-output [7:0] cpu_out;
-input rst;
-input clk;
-
-localparam OP_BCC  = 2'b00;      //00IIII
-localparam OP_STA  = 3'b101;     //101RRR
-localparam OP_JMPA = 6'b111010;  //111010
-
-reg [8:0] accu; // accu(6) is carry !
-reg [7:0] pc;
-reg [7:0] regfile [0:8];
-reg iflag;
-integer i;
-
-    //handle register file writes (STA)
-    always @(*)
-        if ((inst_in[5:3] == OP_STA) && ~rst && ~clk)
-            regfile[inst_in[2:0]] <= accu;
-
-	always @(posedge clk)
-		if (rst) begin
-			accu <= 0;	
-			pc <= 0;
-            iflag <= 0;
-		end
-		else begin
-            // PC
-            if ((inst_in[5:4] == OP_BCC) && ~accu[8])            // conditional branch (BCC)            
-                pc <= pc + (iflag ? { inst_in[3:0], accu[3:0]}: {{4{inst_in[3]}}, inst_in[3:0]});  
-            else
-                pc <= pc + 1'b1;
-                       
-            // ALU path + carry flag
-            casex(inst_in)
-                6'b00????: accu[8]   <= 1'b0;                                                                     // BCC #imm4
-                6'b01????: accu[7:0] <= iflag ? { inst_in[3:0], accu[3:0]}: {{4{inst_in[3]}}, inst_in[3:0]}  ;    // LDI #simm4
-                6'b100???: accu[8:0] <= {1'b0,regfile[inst_in[2:0]]} + {1'b0,accu[7:0]};                          // ADD reg8
-                6'b101???: ;                                                                                      // STA reg8
-                6'b110???: accu[7:0] <= regfile[inst_in[2:0]];                                                    // LDA reg8
-                6'b11100?: accu[8:0] <= {~inst_in[0] & accu[8], ~accu[7:0]} + inst_in[0];                         // NEG / NOT
-                6'b111010: ;                                                                                      // Free
-                6'b111011: ;                                                                                      // OUT
-                6'b1111??: ;                                                                                      // Free imm2
-            endcase
-
-            // Flags
-            casex(inst_in)
-                6'b01????: iflag <= 1'b1;           // LDI #simm4
-                default:   iflag <= 1'b0;           // all others
-            endcase		
-        end
-
-    assign cpu_out = clk ? {pc[7:0]} :  accu[7:0] ; 
-
-endmodule
diff --git a/verilog/rtl/078_cpu.v b/verilog/rtl/078_cpu.v
deleted file mode 100644
index c025225..0000000
--- a/verilog/rtl/078_cpu.v
+++ /dev/null
@@ -1,273 +0,0 @@
-
-//
-//	(C) Copyright Paul Campbell 2022 taniwha@gmail.com
-//	Released under an Apache License 2.0
-//
-
-`default_nettype none
-
-module moonbase_cpu_4bit #(parameter MAX_COUNT=1000) (input [7:0] io_in, output [7:0] io_out);
-   
-	//
-	//	External interfacex
-	//
-	//	external address latch
-	//		the external 7 bit address latch is loaded from io_out[6:0] when io_out[7] is 1	
-	//	external SRAM (eg MWS5101AEL3):
-	//		the external RAM always produces what is at the latch's addresses on io_in[5:2]
-	//		the external SRAM is written when io_out[7] is 0 and io_out[5] is 0
-	//		io_out[6] can be used as an extra address bit to split the address space between
-	//			code (1) and data (0) to use a 256-nibble sram (woot!)
-	//  external devices:
-	//		external devices can be read from io_in[7:6] (at address pointed to by the address latch)
-	//		external devices can be written from io_out[3:0] (at address pointed to by the address latch)
-	//			when io_out[7] is 0 and io_out[4] is 0
-	//
-	//
-	//	SRAM address space (data accesses):
-	//		0-127	external
-	//		128-131 internal	(internal ram cells, for filling up the die :-)
-	//
-
-	localparam N_LOCAL_RAM = 24;
-     
-    wire clk			= io_in[0];
-    wire reset			= io_in[1];
-    wire [3:0]ram_in	= io_in[5:2];
-    wire [1:0]data_in	= io_in[7:6];
-    
-    reg       strobe_out;	// address strobe		- designed to be wired to a 7 bit latch and a MWS5101AEL3
-    reg       write_data_n;	// write enable for data
-    reg       write_ram_n;	// write enable for ram
-    reg	      addr_pc;
-    reg	      data_pc;
-	wire [6:0]data_addr = ((r_tmp[3]?r_y[6:0]:r_x[6:0])+{4'b000, r_tmp[2:0]});
-	wire	  is_local_ram = (r_tmp[3]?r_y[7]:r_x[7]);
-	wire	  write_local_ram = is_local_ram & !write_ram_n;
-	wire [$clog2(N_LOCAL_RAM)-1:0]local_ram_addr = data_addr[$clog2(N_LOCAL_RAM)-1:0];
-    wire [6:0]addr_out = addr_pc ? r_pc : data_addr;							// address out mux (PC or X/Y+off)
-    assign    io_out   = {strobe_out, strobe_out? addr_out : {data_pc, write_ram_n|is_local_ram, write_data_n, r_a}};  // mux address and data out
-
-    reg  [6:0]r_pc, c_pc;	// program counter	// actual flops in the system 
-    reg  [7:0]r_x, c_x;		// x index register	// by convention r_* is a flop, c_* is the combinatorial that feeds it
-    reg  [7:0]r_y, c_y;		// y index register
-    reg  [3:0]r_a, c_a;		// accumulator
-    reg       r_c, c_c;		// carry flag
-    reg  [3:0]r_tmp2, c_tmp2;// operand temp (high)
-    reg  [3:0]r_tmp,  c_tmp;// operand temp (low)
-	reg  [6:0]r_s0,   c_s0;	// call stack
-	reg  [6:0]r_s1,   c_s1;
-	reg  [6:0]r_s2,   c_s2;
-	reg  [6:0]r_s3,   c_s3;
-
-    //
-    //	phase:
-    //		0 - instruction fetch addr
-    //		1 - instruction fetch data
-    //		2 - const fetch addr 
-    //		3 - const fetch data 
-    //		4 - data/const fetch addr 
-    //		5 - data/const fetch data 
-    //		6 - execute/data store addr
-    //		7 - data store data (might not do this)
-    //
-    reg [2:0]r_phase, c_phase;	// CPU internal state machine
-	
-
-    // instructions
-    //
-    //  0 v:	add a, v(x/y)	- sets C
-    //  1 v: 	sub a, v(x/y)	- sets C
-    //  2 v:	or a, v(x/y)
-    //  3 v:	and a, v(x/y)
-    //  4 v:	xor a, v(x/y)
-    //  5 v:	mov a, v(x/y)
-    //  6 v:	movd a, v(x/y)
-    //  7 0:	swap x, y
-    //	  1:    add a, c
-    //	  2:    mov x.l, a
-    //	  3:    ret
-	//    4:    add y, a
-    //	  5:    add x, a
-	//    6:    add y, #1
-	//    7:    add x, #1
-    //	8 v:	mov a, #v
-    //  9 v:	add a, #v 
-    //  a v:	movd v(x/y), a
-    //  b v:	mov  v(x/y), a
-    //  c h l:	mov x, #hl
-    //  d h l:	jne a/c, hl	if h[3] the test c otherwise test a
-    //  e h l:	jeq a/c, hl	if h[3] the test c otherwise test a
-    //  f h l:	jmp/call hl
-    //
-    //  Memory access - addresses are 7 bits - v(X/y) is a 3-bit offset v[2:0]
-    //  	if  v[3] it's Y+v[2:0]
-    //  	if !v[3] it's X+v[2:0]
-    //
-    //	The general idea is that X normally points to a bank of in sram 8 'registers',
-    //		a bit like an 8051's r0-7, while X is a more general index register
-	//		(but you can use both if you need to do	some copying)
-    //		
-
-    reg  [3:0]r_ins, c_ins;	// fetched instruction
-
-	wire [4:0]c_add = {1'b0, r_a}+{1'b0, r_tmp};	// ALUs
-	wire [4:0]c_sub = {1'b0, r_a}-{1'b0, r_tmp};
-	wire [6:0]c_i_add = (r_tmp[0]?r_x:r_y)+(r_tmp[1]?7'b1:{3'b0, r_a});
-	wire [6:0]c_pc_inc = r_pc+1;
-
-	
-	reg	 [3:0] r_local_ram[0:N_LOCAL_RAM-1];
-
-	wire [3:0] local_ram = r_local_ram[local_ram_addr];
-	always @(posedge clk)
-	if (write_local_ram)
-		r_local_ram[local_ram_addr] <= r_a;
-
-    always @(*) begin
-		c_ins  = r_ins;	
-		c_x    = r_x;
-		c_y    = r_y;
-		c_a    = r_a;
-		c_s0   = r_s0;
-		c_s1   = r_s1;
-		c_s2   = r_s2;
-		c_s3   = r_s3;
-		c_tmp  = r_tmp;
-		c_tmp2 = r_tmp2;
-		c_pc   = r_pc;
-		c_c    = r_c;
-		write_data_n = 1;
-		write_ram_n = 1;
-		addr_pc = 'bx;
-		data_pc = 'bx;
-    	if (reset) begin	// reset clears the state machine and sets PC to 0
-			c_pc = 0;
-			c_phase = 0;
-			strobe_out = 1;
-    	end else 
-    	case (r_phase) // synthesis full_case parallel_case
-    	0:	begin					// 0: address latch instruction PC
-				strobe_out = 1;
-				addr_pc = 1;
-				c_phase = 1;
-			end
-    	1:	begin					// 1: read data in
-				strobe_out = 0;
-				data_pc = 1;
-				c_ins = ram_in;
-				c_pc = c_pc_inc;
-				c_phase = 2;
-			end
-		2:	begin
-				strobe_out = 1;			// 2: address latch operand PC
-				addr_pc = 1;
-				c_phase = 3;
-			end
-		3:	begin
-				strobe_out = 0;			// 3: read operand
-				c_tmp = ram_in;
-				c_pc = c_pc_inc;
-				data_pc = 1;
-				case (r_ins) // synthesis full_case parallel_case
-				7, 8, 9, 10, 11: c_phase = 6;// some instructions don't have a 2nd fetch
-				default:	     c_phase = 4;
-				endcase
-			end
-		4:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = r_ins[3:2] == 3;	// some instructions read a 2nd operand, the rest the come here read a memory location
-				c_phase = 5;
-			end
-		5:	begin						// 5 read next operand
-				strobe_out = 0;
-				data_pc = r_ins[3:2] == 3;
-				c_tmp2 = r_tmp;				// low->high for 2 byte cases
-				c_tmp = (r_ins[3:1] == 3?{2'b0,data_in}:is_local_ram&&r_ins[3:2] != 3?local_ram:ram_in);	// read the actial data, movd comes from upper bits
-				if (r_ins[3:2] == 3)		// if we fetched from PC increment it
-					c_pc = c_pc_inc;
-				c_phase = 6;
-			end
-		6:	begin						// 6 execute stage 
-				strobe_out = r_ins[3:1] == 5;	// if writing to anything latch address
-				addr_pc = 0;
-				c_phase = 0;					// if not writing go back
-				case (r_ins)// synthesis full_case parallel_case
-				0,												// add  a, v(x)
-				9:	begin c_c = c_add[4]; c_a = c_add[3:0]; end	// add  a, #v
-				1:	begin c_c = c_sub[4]; c_a = c_sub[3:0]; end	// sub  a, v(x)
-				2:	c_a = r_a|r_tmp;							// or   a, v(x)
-				3:	c_a = r_a&r_tmp;							// sub  a, v(x)
-				4:	c_a = r_a^r_tmp;							// xor  a, v(x)
-				5,												// mov  a, v(x)
-				6,												// movd a, v(x)
-				8:	c_a = r_tmp;								// mov  a, #v
-				7:	case (r_tmp) // synthesis full_case parallel_case
-    				0: begin c_x = r_y; c_y = r_x; end			// 0    swap  y, x
-					1: c_a = r_a+{3'b000, r_c};					// 1	add   a, c
-    				2: c_x[3:0] = r_a;							// 2    mov   x.l, a
-    				3: begin									// 3    ret
-							c_pc = r_s0;
-							c_s0 = r_s1;
-							c_s1 = r_s2;
-							c_s2 = r_s3;
-					   end
-					4: c_y = c_i_add;							// 4    add   y, a
-					5: c_x = c_i_add;							// 5    add   x, a
-					6: c_y = c_i_add;							// 6    add   y, #1
-					7: c_x = c_i_add;							// 7    add   y, #1
-					default: ;
-					endcase
-				10,												// movd v(x), a
-				11:	c_phase = 7;								// mov  v(x), a
-				12:	c_x  = {r_tmp2, r_tmp};						// mov  x, #VV
-				13:	c_pc = (r_tmp2[3]?!r_c : r_a != 0) ? {r_tmp2[2:0], r_tmp} : r_pc; // jne	a/c, VV
-				14:	c_pc = (r_tmp2[3]? r_c : r_a == 0) ? {r_tmp2[2:0], r_tmp} : r_pc; // jeq        a/c, VV
-				15:	begin c_pc = {r_tmp2[2:0], r_tmp};				// jmp  VV
-						if (r_tmp2[3]) begin	// call
-							c_s0 = r_pc;
-							c_s1 = r_s0;
-							c_s2 = r_s1;
-							c_s3 = r_s2;
-						end
-					end
-				endcase
-			end
-		7:	begin						// 7 write data stage - assert appropriate write strobe
-				strobe_out = 0;
-				data_pc = 0;
-				write_data_n =  r_ins[0];
-				write_ram_n  = ~r_ins[0];
-				c_phase = 0;
-			end
-    	endcase
-    end
-
-    always @(posedge clk) begin
-		r_a     <= c_a;
-		r_c     <= c_c;
-		r_x     <= c_x;
-		r_y     <= c_y;
-		r_ins   <= c_ins;
-		r_tmp   <= c_tmp;
-		r_tmp2  <= c_tmp2;
-		r_pc    <= c_pc;
-		r_phase <= c_phase;
-		r_s0    <= c_s0;
-		r_s1    <= c_s1;
-		r_s2    <= c_s2;
-		r_s3    <= c_s3;
-    end
-
-endmodule
-
-/* For Emacs:   
- * Local Variables:
- * mode:c       
- * indent-tabs-mode:t
- * tab-width:4  
- * c-basic-offset:4
- * End: 
- * For VIM:
- * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
- */
diff --git a/verilog/rtl/078_top.v b/verilog/rtl/078_top.v
deleted file mode 100644
index 01583e2..0000000
--- a/verilog/rtl/078_top.v
+++ /dev/null
@@ -1,9 +0,0 @@
-
-`default_nettype none
-
-module davidsiaw_stackcalc (
-  input wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-  stack_cpu cpu(.io_in(io_in), .io_out(io_out));
-endmodule
diff --git a/verilog/rtl/079_top.v b/verilog/rtl/079_top.v
deleted file mode 100644
index 01583e2..0000000
--- a/verilog/rtl/079_top.v
+++ /dev/null
@@ -1,9 +0,0 @@
-
-`default_nettype none
-
-module davidsiaw_stackcalc (
-  input wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-  stack_cpu cpu(.io_in(io_in), .io_out(io_out));
-endmodule
diff --git a/verilog/rtl/083_cpu.v b/verilog/rtl/083_cpu.v
deleted file mode 100644
index 451fe33..0000000
--- a/verilog/rtl/083_cpu.v
+++ /dev/null
@@ -1,369 +0,0 @@
-
-//
-//	(C) Copyright Paul Campbell 2022 taniwha@gmail.com
-//	Released under an Apache License 2.0
-//
-
-`default_nettype none
-
-module moonbase_cpu_8bit #(parameter MAX_COUNT=1000) (input [7:0] io_in, output [7:0] io_out);
-   
-	//
-	//	External interface
-	//
-	//	external address latch
-	//		the external 12 bit address latch is loaded [5:0] from io_out[5:0] when io_out[7:6] is 10
-	//		the external 12 bit address latch is loaded [11:6] from io_out[5:0] when io_out[7:6] is 11
-	//	external SRAM (eg MWS5101AEL3) when io_out[7] is 0
-	//	    which nibble is from io_out[6]
-	//		the external RAM always produces what is at the latch's addresses on io_in[5:2] when 
-	//		the external SRAM is written when io_out[7] is 0 and io_out[5] is 0
-	//		io_out[6] can be used as an extra address bit to split the address space between
-	//			code (1) and data (0) to use a 256-nibble sram (woot!)
-	//  external devices when io_out[7] is 0:
-	//	    which nibble is from io_out[6]
-	//		external devices can be read from io_in[7:6] (at address pointed to by the address latch)
-	//		external devices can be written from io_out[3:0] (at address pointed to by the address latch)
-	//			when io_out[4] is 0
-	//
-	//	SRAM address space (data accesses):
-	//		0-0xfff	   external
-	//		0x1000-131 internal	(internal ram cells, for filling up the die :-)
-	//
-
-	localparam N_LOCAL_RAM = 4;
-     
-    wire clk			= io_in[0];
-    wire reset			= io_in[1];
-    wire [3:0]ram_in	= io_in[5:2];
-    wire [1:0]data_in	= io_in[7:6];
-    
-    reg       strobe_out;	// address strobe		- designed to be wired to a 7 bit latch and a MWS5101AEL3
-	reg		  nibble;	    // address/data nibble
-    reg       write_data_n;	// write enable for data
-    reg       write_ram_n;	// write enable for ram
-    reg	      addr_pc;
-	wire [11:0]data_addr = ((r_v[3]?r_y[11:0]:r_x[11:0])+{8'b000, r_v[2:0]});
-	wire	  is_local_ram = (r_v[3]?r_y[12]:r_x[12]);
-	wire	  write_local_ram = is_local_ram & !write_ram_n;
-	wire	  write_ext_ram_n = is_local_ram | write_ram_n;
-	wire [$clog2(N_LOCAL_RAM)-1:0]local_ram_addr = data_addr[$clog2(N_LOCAL_RAM)-1:0];
-    wire [11:0]addr_out = addr_pc ? r_pc : data_addr;							// address out mux (PC or X/Y+off)
-    wire [5:0]addr_out_mux = (nibble?addr_out[11:6]:addr_out[5:0]);			// mux-d by portion
-    assign    io_out   = {strobe_out, nibble, strobe_out? addr_out_mux : {write_ext_ram_n, write_data_n, !nibble?r_a[7:4]:r_a[3:0]}};  // mux address and data out
-
-    reg  [11:0]r_pc, c_pc;	// program counter	// actual flops in the system 
-    reg  [12:0]r_x,  c_x;	// x index register	// by convention r_* is a flop, c_* is the combinatorial that feeds it
-    reg  [12:0]r_y,  c_y;	// y index register
-    reg  [7:0]r_a,  c_a;	// accumulator
-    reg  [7:0]r_b,  c_b;	// temp accumulator
-    reg       r_c,  c_c;	// carry flag
-    reg  [3:0]r_h,  c_h;	// operand temp (high)
-    reg  [3:0]r_l,  c_l;	// operand temp (low)
-	reg  [4:0]r_ee, c_ee;	// extended const (bits 12:4)
-    reg  [3:0]r_v,  c_v;	// operand temp (low)
-	reg  [11:0]r_s0, c_s0;	// call stack
-	reg  [11:0]r_s1, c_s1;
-
-    //
-    //	phase:
-    //		0 - instruction fetch addr
-    //		1 - instruction fetch dataL		ins
-    //		2 - instruction fetch dataH		V
-    //		4 - data/const fetch addr		
-    //		5 - data/const fetch dataL		tmp
-    //		6 - data/const fetch dataH		tmp2
-    //		8 - execute/data store addr
-    //		9 - data store dataL (might not do this)
-    //		a - data store dataH (might not do this)
-    //
-    reg [3:0]r_phase, c_phase;	// CPU internal state machine
-
-    // instructions
-	//
-	//	Registers:  a,b 8 bit, x,y 13 bits, pc 12 bits
-    //
-    //  0v:		add a, v(x/y)	- sets C
-    //  1v: 	sub a, v(x/y)	- sets C
-    //  2v:		or  a, v(x/y)
-    //  3v:		and a, v(x/y)
-    //  4v:		xor a, v(x/y)
-    //  5v:		mov a, v(x/y)
-    //  6v:		movd a, v(x/y)
-    //	70:		add a, c
-    //	71:		inc a
-    //  72:		swap x, y
-    //	73:		ret
-	//  74:		add y, a
-    //	75:		add x, a
-	//  76:		inc y
-	//  77:		inc x
-	//	78:		mov a, y
-	//	79:		mov a, x
-	//	7a:		mov b, a
-	//	7b:		swap b, a
-	//	7c:		mov y, a
-	//	7d:		mov x, a
-	//	7e:		clr a
-	//	7f:		mov a, pc
-	//	8v:		nop
-	//	9v:		nop
-    //  av:		movd v(x/y), a
-    //  bv:		mov  v(x/y), a
-	//	cv:		nop
-	//	dv:		nop
-	//	ev:		nop
-    //	f0 HL:	mov a, #HL
-    //  f1 HL:	add a, #HL
-    //  f2 HL:	mov y, #EELL
-    //  f3 HL:	mov x, #EEHL
-    //  f4 HL:	jne a/c, EEHL	if EE[4] then test c otherwise test a
-    //  f5 HL:	jeq a/c, EEHL	if EE[4] then test c otherwise test a
-    //  f6 HL:	jmp/call EEHL   if EE[4] call else jmp
-	//	f7 HL:	nop
-    //
-    //  Memory access - addresses are 7 bits - v(X/y) is a 3-bit offset v[2:0]
-    //  	if  v[3] it's Y+v[2:0]
-    //  	if !v[3] it's X+v[2:0]
-    //
-    //	The general idea is that X normally points to a bank of in sram 8 'registers',
-    //		a bit like an 8051's r0-7, while X is a more general index register
-	//		(but you can use both if you need to do	some copying)
-    //		
-
-    reg  [3:0]r_ins, c_ins;	// fetched instruction
-
-	wire [8:0]c_add = {1'b0, r_a}+{1'b0, r_h, r_l};	// ALUs
-	wire [8:0]c_sub = {1'b0, r_a}-{1'b0, r_h, r_l};
-	wire [12:0]c_i_add = {r_v[0]?r_x[12]:r_y[12], (r_v[0]?r_x[11:0]:r_y[11:0])+(r_v[1]?12'b1:{4'b0,r_a})};
-	wire [11:0]c_pc_inc = r_pc+1;
-	wire [7:0]c_a_inc = r_a + {7'b0, r_c|r_v[0]};
-	
-	reg	 [7:0]r_local_ram[0:N_LOCAL_RAM-1];
-
-	wire [7:0]local_ram = r_local_ram[local_ram_addr];
-	always @(posedge clk)
-	if (write_local_ram)
-		r_local_ram[local_ram_addr] <= r_a;
-
-    always @(*) begin
-		c_ins  = r_ins;	
-		c_x    = r_x;
-		c_y    = r_y;
-		c_a    = r_a;
-		c_b    = r_b;
-		c_s0   = r_s0;
-		c_s1   = r_s1;
-		c_l    = r_l;
-		c_h	   = r_h;
-		c_ee   = r_ee;
-		c_pc   = r_pc;
-		c_c    = r_c;
-		c_v    = r_v;
-		write_data_n = 1;
-		write_ram_n = 1;
-		addr_pc = 'bx;
-		nibble = 'bx;
-    	if (reset) begin	// reset clears the state machine and sets PC to 0
-			c_y = 13'h1000;	// point at internal sram
-			c_pc = 0;
-			c_phase = 0;
-			strobe_out = 1;
-    	end else 
-    	case (r_phase) // synthesis full_case parallel_case
-    	0:	begin					// 0: address latch instruction PC
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 0;
-				c_phase = 1;
-			end
-    	1:	begin					// 0: address latch instruction PC
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 1;
-				c_phase = 2;
-			end
-    	2:	begin					// 1: read data in r_ins
-				strobe_out = 0;
-				c_ins = ram_in;
-				nibble = 0;
-				c_phase = 3;
-			end
-    	3:	begin					// 3: read data in r_v
-				strobe_out = 0;
-				c_v = ram_in;
-				nibble = 1;
-				c_pc = c_pc_inc;
-				case (r_ins) // synthesis full_case parallel_case
-				7, 8, 9, 10, 11, 12, 13, 14: c_phase = 12;// some instructions don't have a 2nd fetch
-				default:	     c_phase = 4;
-				endcase
-			end
-		4:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = r_ins[3:2] == 3;	// some instructions read a 2nd operand, the rest the come here read a memory location
-				nibble = 0;
-				c_phase = r_ins[3:2] != 3 && is_local_ram ? 7 : 5;
-			end
-		5:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = r_ins[3:2] == 3;	// some instructions read a 2nd operand, the rest the come here read a memory location
-				nibble = 1;
-				c_phase = 6;
-			end
-		6:	begin						// 5 read next operand	r_hi
-				strobe_out = 0;
-				nibble = 0;
-				c_h = ((r_ins[3:1] == 3)? 4'b0 : ram_in);
-				c_phase = 7;
-			end
-		7:	begin						// 5 read next operand	r_lo
-				strobe_out = 0;
-				nibble = 1;
-				if (is_local_ram&&r_ins != 4'hf) begin
-					c_h = local_ram[7:4];
-					c_l = local_ram[3:0];
-				end else begin
-					c_l = ((r_ins[3:1] == 3)?{2'b0,data_in}:ram_in);	// read the actial data, movd comes from upper bits
-				end
-				if (r_ins == 4'hf)		// if we fetched from PC increment it
-					c_pc = c_pc_inc;
-				c_phase = (r_ins == 4'hf && r_v[3:1] != 0) ? 8: 12;
-			end
-		8:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 0;
-				c_phase = 9;
-			end
-		9:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 1;
-				c_phase = 10;
-			end
-		10:	begin						// 5 read next operand	r_hi
-				strobe_out = 0;
-				nibble = 0;
-				c_ee[4] = ram_in[0];
-				c_phase = 11;
-			end
-		11:	begin						// 5 read next operand	r_lo
-				strobe_out = 0;
-				nibble = 1;
-				c_ee[3:0] = ram_in;
-				c_pc = c_pc_inc;
-				c_phase = 12;
-			end
-		12:	begin						// 6 execute stage 
-				strobe_out = r_ins[3:1] == 5;	// if writing to anything latch address
-				addr_pc = 0;
-				c_phase = 0;					// if not writing go back
-				nibble = 0;
-				case (r_ins)// synthesis full_case parallel_case
-				0:	begin c_c = c_add[8]; c_a = c_add[7:0]; end	// add  a, v(x)
-				1:	begin c_c = c_sub[8]; c_a = c_sub[7:0]; end	// sub  a, v(x)
-				2:	c_a = r_a|{r_h, r_l};						// or   a, v(x)
-				3:	c_a = r_a&{r_h, r_l};						// sub  a, v(x)
-				4:	c_a = r_a^{r_h, r_l};						// xor  a, v(x)
-				5,												// mov  a, v(x)
-				6:	c_a = {r_h, r_l};							// movd a, v(x)
-				7:	case (r_v) // synthesis full_case parallel_case
-					0: c_a = c_a_inc;							// 0	add   a, c
-    				1: c_a = c_a_inc;							// 1    inc   a
-    				2: begin c_x = r_y; c_y = r_x; end			// 2    swap  y, x
-    				3: begin									// 3    ret
-							c_pc = r_s0;
-							c_s0 = r_s1;
-					   end
-					4: c_y = c_i_add;							// 4    add   y, a
-					5: c_x = c_i_add;							// 5    add   x, a
-					6: c_y = c_i_add;							// 6    add   y, #1
-					7: c_x = c_i_add;							// 7    add   y, #1
-					8:	c_a = r_y[7:0];							// 8	mov a, y
-					9:	c_a = r_x[7:0];							// 9	mov a, x
-					10:	c_b = r_a;								// a	mov b, a
-					11:	begin c_b = r_a; c_a = r_b; end			// b	swap b, a
-					12:	c_y[7:0] = r_a;							// c	mov y, a
-					13:	c_x[7:0] = r_a;							// d 	mov x, a
-					14:	c_a = 0;								// e	clr a
-					15:	c_a = r_pc;								// f	mov a, pc
-					default: ;
-					endcase
-				8:   ;  // noop
-				9:   ;  // noop
-				10,												// movd v(x), a
-				11:	c_phase = is_local_ram ? 15:13;				// mov  v(x), a
-				12:  ;  // noop
-				13:  ;  // noop
-				14:  ;  // noop
-
-				15: case (r_v) // synthesis full_case parallel_case
-					0:	c_a  = {r_h, r_l};								// mov  a, #HL
-					1:	begin c_c = c_add[8]; c_a = c_add[7:0]; end		// add  a, #HL
-					2:	c_y  = {r_ee, r_h, r_l};						// mov  y, #VV
-					3:	c_x  = {r_ee, r_h, r_l};						// mov  x, #VV
-					4:	c_pc = (r_ee[4]?!r_c : r_a != 0) ? {r_ee[3:0], r_h, r_l} : r_pc; // jne	a/c, VV
-					5:	c_pc = (r_ee[4]? r_c : r_a == 0) ? {r_ee[3:0], r_h, r_l} : r_pc; // jeq        a/c, VV
-					6:	begin c_pc = {r_ee[3:0], r_h, r_l};				// jmp  VV
-							if (r_ee[4]) begin	// call
-								c_s0 = r_pc;
-								c_s1 = r_s0;
-							end
-						 end
-					default: ;
-					endcase
-				endcase
-			end
-		13:	begin
-				strobe_out = 1;
-				addr_pc = 0;
-				nibble = 1;
-				c_phase = 14;
-			end
-		14:	begin						// 7 write data stage - assert appropriate write strobe
-				strobe_out = 0;
-				write_data_n =  r_ins[0];
-				write_ram_n  = ~r_ins[0];
-				nibble = 0;
-				c_phase = 15;
-			end
-		15:	begin						// 7 write data stage - assert appropriate write strobe
-				strobe_out = 0;
-				nibble = 1;
-				write_data_n =  r_ins[0];
-				write_ram_n  = ~r_ins[0];
-				c_phase = 0;
-			end
-    	endcase
-    end
-
-    always @(posedge clk) begin
-		r_a     <= c_a;
-		r_b     <= c_b;
-		r_c     <= c_c;
-		r_x     <= c_x;
-		r_y     <= c_y;
-		r_ins   <= c_ins;
-		r_v		<= c_v;
-		r_l		<= c_l;
-		r_h		<= c_h;
-		r_ee	<= c_ee;
-		r_pc    <= c_pc;
-		r_phase <= c_phase;
-		r_s0    <= c_s0;
-		r_s1    <= c_s1;
-    end
-
-endmodule
-
-/* For Emacs:   
- * Local Variables:
- * mode:c       
- * indent-tabs-mode:t
- * tab-width:4  
- * c-basic-offset:4
- * End: 
- * For VIM:
- * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
- */
diff --git a/verilog/rtl/084_cpu.v b/verilog/rtl/084_cpu.v
deleted file mode 100644
index 451fe33..0000000
--- a/verilog/rtl/084_cpu.v
+++ /dev/null
@@ -1,369 +0,0 @@
-
-//
-//	(C) Copyright Paul Campbell 2022 taniwha@gmail.com
-//	Released under an Apache License 2.0
-//
-
-`default_nettype none
-
-module moonbase_cpu_8bit #(parameter MAX_COUNT=1000) (input [7:0] io_in, output [7:0] io_out);
-   
-	//
-	//	External interface
-	//
-	//	external address latch
-	//		the external 12 bit address latch is loaded [5:0] from io_out[5:0] when io_out[7:6] is 10
-	//		the external 12 bit address latch is loaded [11:6] from io_out[5:0] when io_out[7:6] is 11
-	//	external SRAM (eg MWS5101AEL3) when io_out[7] is 0
-	//	    which nibble is from io_out[6]
-	//		the external RAM always produces what is at the latch's addresses on io_in[5:2] when 
-	//		the external SRAM is written when io_out[7] is 0 and io_out[5] is 0
-	//		io_out[6] can be used as an extra address bit to split the address space between
-	//			code (1) and data (0) to use a 256-nibble sram (woot!)
-	//  external devices when io_out[7] is 0:
-	//	    which nibble is from io_out[6]
-	//		external devices can be read from io_in[7:6] (at address pointed to by the address latch)
-	//		external devices can be written from io_out[3:0] (at address pointed to by the address latch)
-	//			when io_out[4] is 0
-	//
-	//	SRAM address space (data accesses):
-	//		0-0xfff	   external
-	//		0x1000-131 internal	(internal ram cells, for filling up the die :-)
-	//
-
-	localparam N_LOCAL_RAM = 4;
-     
-    wire clk			= io_in[0];
-    wire reset			= io_in[1];
-    wire [3:0]ram_in	= io_in[5:2];
-    wire [1:0]data_in	= io_in[7:6];
-    
-    reg       strobe_out;	// address strobe		- designed to be wired to a 7 bit latch and a MWS5101AEL3
-	reg		  nibble;	    // address/data nibble
-    reg       write_data_n;	// write enable for data
-    reg       write_ram_n;	// write enable for ram
-    reg	      addr_pc;
-	wire [11:0]data_addr = ((r_v[3]?r_y[11:0]:r_x[11:0])+{8'b000, r_v[2:0]});
-	wire	  is_local_ram = (r_v[3]?r_y[12]:r_x[12]);
-	wire	  write_local_ram = is_local_ram & !write_ram_n;
-	wire	  write_ext_ram_n = is_local_ram | write_ram_n;
-	wire [$clog2(N_LOCAL_RAM)-1:0]local_ram_addr = data_addr[$clog2(N_LOCAL_RAM)-1:0];
-    wire [11:0]addr_out = addr_pc ? r_pc : data_addr;							// address out mux (PC or X/Y+off)
-    wire [5:0]addr_out_mux = (nibble?addr_out[11:6]:addr_out[5:0]);			// mux-d by portion
-    assign    io_out   = {strobe_out, nibble, strobe_out? addr_out_mux : {write_ext_ram_n, write_data_n, !nibble?r_a[7:4]:r_a[3:0]}};  // mux address and data out
-
-    reg  [11:0]r_pc, c_pc;	// program counter	// actual flops in the system 
-    reg  [12:0]r_x,  c_x;	// x index register	// by convention r_* is a flop, c_* is the combinatorial that feeds it
-    reg  [12:0]r_y,  c_y;	// y index register
-    reg  [7:0]r_a,  c_a;	// accumulator
-    reg  [7:0]r_b,  c_b;	// temp accumulator
-    reg       r_c,  c_c;	// carry flag
-    reg  [3:0]r_h,  c_h;	// operand temp (high)
-    reg  [3:0]r_l,  c_l;	// operand temp (low)
-	reg  [4:0]r_ee, c_ee;	// extended const (bits 12:4)
-    reg  [3:0]r_v,  c_v;	// operand temp (low)
-	reg  [11:0]r_s0, c_s0;	// call stack
-	reg  [11:0]r_s1, c_s1;
-
-    //
-    //	phase:
-    //		0 - instruction fetch addr
-    //		1 - instruction fetch dataL		ins
-    //		2 - instruction fetch dataH		V
-    //		4 - data/const fetch addr		
-    //		5 - data/const fetch dataL		tmp
-    //		6 - data/const fetch dataH		tmp2
-    //		8 - execute/data store addr
-    //		9 - data store dataL (might not do this)
-    //		a - data store dataH (might not do this)
-    //
-    reg [3:0]r_phase, c_phase;	// CPU internal state machine
-
-    // instructions
-	//
-	//	Registers:  a,b 8 bit, x,y 13 bits, pc 12 bits
-    //
-    //  0v:		add a, v(x/y)	- sets C
-    //  1v: 	sub a, v(x/y)	- sets C
-    //  2v:		or  a, v(x/y)
-    //  3v:		and a, v(x/y)
-    //  4v:		xor a, v(x/y)
-    //  5v:		mov a, v(x/y)
-    //  6v:		movd a, v(x/y)
-    //	70:		add a, c
-    //	71:		inc a
-    //  72:		swap x, y
-    //	73:		ret
-	//  74:		add y, a
-    //	75:		add x, a
-	//  76:		inc y
-	//  77:		inc x
-	//	78:		mov a, y
-	//	79:		mov a, x
-	//	7a:		mov b, a
-	//	7b:		swap b, a
-	//	7c:		mov y, a
-	//	7d:		mov x, a
-	//	7e:		clr a
-	//	7f:		mov a, pc
-	//	8v:		nop
-	//	9v:		nop
-    //  av:		movd v(x/y), a
-    //  bv:		mov  v(x/y), a
-	//	cv:		nop
-	//	dv:		nop
-	//	ev:		nop
-    //	f0 HL:	mov a, #HL
-    //  f1 HL:	add a, #HL
-    //  f2 HL:	mov y, #EELL
-    //  f3 HL:	mov x, #EEHL
-    //  f4 HL:	jne a/c, EEHL	if EE[4] then test c otherwise test a
-    //  f5 HL:	jeq a/c, EEHL	if EE[4] then test c otherwise test a
-    //  f6 HL:	jmp/call EEHL   if EE[4] call else jmp
-	//	f7 HL:	nop
-    //
-    //  Memory access - addresses are 7 bits - v(X/y) is a 3-bit offset v[2:0]
-    //  	if  v[3] it's Y+v[2:0]
-    //  	if !v[3] it's X+v[2:0]
-    //
-    //	The general idea is that X normally points to a bank of in sram 8 'registers',
-    //		a bit like an 8051's r0-7, while X is a more general index register
-	//		(but you can use both if you need to do	some copying)
-    //		
-
-    reg  [3:0]r_ins, c_ins;	// fetched instruction
-
-	wire [8:0]c_add = {1'b0, r_a}+{1'b0, r_h, r_l};	// ALUs
-	wire [8:0]c_sub = {1'b0, r_a}-{1'b0, r_h, r_l};
-	wire [12:0]c_i_add = {r_v[0]?r_x[12]:r_y[12], (r_v[0]?r_x[11:0]:r_y[11:0])+(r_v[1]?12'b1:{4'b0,r_a})};
-	wire [11:0]c_pc_inc = r_pc+1;
-	wire [7:0]c_a_inc = r_a + {7'b0, r_c|r_v[0]};
-	
-	reg	 [7:0]r_local_ram[0:N_LOCAL_RAM-1];
-
-	wire [7:0]local_ram = r_local_ram[local_ram_addr];
-	always @(posedge clk)
-	if (write_local_ram)
-		r_local_ram[local_ram_addr] <= r_a;
-
-    always @(*) begin
-		c_ins  = r_ins;	
-		c_x    = r_x;
-		c_y    = r_y;
-		c_a    = r_a;
-		c_b    = r_b;
-		c_s0   = r_s0;
-		c_s1   = r_s1;
-		c_l    = r_l;
-		c_h	   = r_h;
-		c_ee   = r_ee;
-		c_pc   = r_pc;
-		c_c    = r_c;
-		c_v    = r_v;
-		write_data_n = 1;
-		write_ram_n = 1;
-		addr_pc = 'bx;
-		nibble = 'bx;
-    	if (reset) begin	// reset clears the state machine and sets PC to 0
-			c_y = 13'h1000;	// point at internal sram
-			c_pc = 0;
-			c_phase = 0;
-			strobe_out = 1;
-    	end else 
-    	case (r_phase) // synthesis full_case parallel_case
-    	0:	begin					// 0: address latch instruction PC
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 0;
-				c_phase = 1;
-			end
-    	1:	begin					// 0: address latch instruction PC
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 1;
-				c_phase = 2;
-			end
-    	2:	begin					// 1: read data in r_ins
-				strobe_out = 0;
-				c_ins = ram_in;
-				nibble = 0;
-				c_phase = 3;
-			end
-    	3:	begin					// 3: read data in r_v
-				strobe_out = 0;
-				c_v = ram_in;
-				nibble = 1;
-				c_pc = c_pc_inc;
-				case (r_ins) // synthesis full_case parallel_case
-				7, 8, 9, 10, 11, 12, 13, 14: c_phase = 12;// some instructions don't have a 2nd fetch
-				default:	     c_phase = 4;
-				endcase
-			end
-		4:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = r_ins[3:2] == 3;	// some instructions read a 2nd operand, the rest the come here read a memory location
-				nibble = 0;
-				c_phase = r_ins[3:2] != 3 && is_local_ram ? 7 : 5;
-			end
-		5:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = r_ins[3:2] == 3;	// some instructions read a 2nd operand, the rest the come here read a memory location
-				nibble = 1;
-				c_phase = 6;
-			end
-		6:	begin						// 5 read next operand	r_hi
-				strobe_out = 0;
-				nibble = 0;
-				c_h = ((r_ins[3:1] == 3)? 4'b0 : ram_in);
-				c_phase = 7;
-			end
-		7:	begin						// 5 read next operand	r_lo
-				strobe_out = 0;
-				nibble = 1;
-				if (is_local_ram&&r_ins != 4'hf) begin
-					c_h = local_ram[7:4];
-					c_l = local_ram[3:0];
-				end else begin
-					c_l = ((r_ins[3:1] == 3)?{2'b0,data_in}:ram_in);	// read the actial data, movd comes from upper bits
-				end
-				if (r_ins == 4'hf)		// if we fetched from PC increment it
-					c_pc = c_pc_inc;
-				c_phase = (r_ins == 4'hf && r_v[3:1] != 0) ? 8: 12;
-			end
-		8:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 0;
-				c_phase = 9;
-			end
-		9:	begin						// 4 address latch for next operand  
-				strobe_out = 1;
-				addr_pc = 1;
-				nibble = 1;
-				c_phase = 10;
-			end
-		10:	begin						// 5 read next operand	r_hi
-				strobe_out = 0;
-				nibble = 0;
-				c_ee[4] = ram_in[0];
-				c_phase = 11;
-			end
-		11:	begin						// 5 read next operand	r_lo
-				strobe_out = 0;
-				nibble = 1;
-				c_ee[3:0] = ram_in;
-				c_pc = c_pc_inc;
-				c_phase = 12;
-			end
-		12:	begin						// 6 execute stage 
-				strobe_out = r_ins[3:1] == 5;	// if writing to anything latch address
-				addr_pc = 0;
-				c_phase = 0;					// if not writing go back
-				nibble = 0;
-				case (r_ins)// synthesis full_case parallel_case
-				0:	begin c_c = c_add[8]; c_a = c_add[7:0]; end	// add  a, v(x)
-				1:	begin c_c = c_sub[8]; c_a = c_sub[7:0]; end	// sub  a, v(x)
-				2:	c_a = r_a|{r_h, r_l};						// or   a, v(x)
-				3:	c_a = r_a&{r_h, r_l};						// sub  a, v(x)
-				4:	c_a = r_a^{r_h, r_l};						// xor  a, v(x)
-				5,												// mov  a, v(x)
-				6:	c_a = {r_h, r_l};							// movd a, v(x)
-				7:	case (r_v) // synthesis full_case parallel_case
-					0: c_a = c_a_inc;							// 0	add   a, c
-    				1: c_a = c_a_inc;							// 1    inc   a
-    				2: begin c_x = r_y; c_y = r_x; end			// 2    swap  y, x
-    				3: begin									// 3    ret
-							c_pc = r_s0;
-							c_s0 = r_s1;
-					   end
-					4: c_y = c_i_add;							// 4    add   y, a
-					5: c_x = c_i_add;							// 5    add   x, a
-					6: c_y = c_i_add;							// 6    add   y, #1
-					7: c_x = c_i_add;							// 7    add   y, #1
-					8:	c_a = r_y[7:0];							// 8	mov a, y
-					9:	c_a = r_x[7:0];							// 9	mov a, x
-					10:	c_b = r_a;								// a	mov b, a
-					11:	begin c_b = r_a; c_a = r_b; end			// b	swap b, a
-					12:	c_y[7:0] = r_a;							// c	mov y, a
-					13:	c_x[7:0] = r_a;							// d 	mov x, a
-					14:	c_a = 0;								// e	clr a
-					15:	c_a = r_pc;								// f	mov a, pc
-					default: ;
-					endcase
-				8:   ;  // noop
-				9:   ;  // noop
-				10,												// movd v(x), a
-				11:	c_phase = is_local_ram ? 15:13;				// mov  v(x), a
-				12:  ;  // noop
-				13:  ;  // noop
-				14:  ;  // noop
-
-				15: case (r_v) // synthesis full_case parallel_case
-					0:	c_a  = {r_h, r_l};								// mov  a, #HL
-					1:	begin c_c = c_add[8]; c_a = c_add[7:0]; end		// add  a, #HL
-					2:	c_y  = {r_ee, r_h, r_l};						// mov  y, #VV
-					3:	c_x  = {r_ee, r_h, r_l};						// mov  x, #VV
-					4:	c_pc = (r_ee[4]?!r_c : r_a != 0) ? {r_ee[3:0], r_h, r_l} : r_pc; // jne	a/c, VV
-					5:	c_pc = (r_ee[4]? r_c : r_a == 0) ? {r_ee[3:0], r_h, r_l} : r_pc; // jeq        a/c, VV
-					6:	begin c_pc = {r_ee[3:0], r_h, r_l};				// jmp  VV
-							if (r_ee[4]) begin	// call
-								c_s0 = r_pc;
-								c_s1 = r_s0;
-							end
-						 end
-					default: ;
-					endcase
-				endcase
-			end
-		13:	begin
-				strobe_out = 1;
-				addr_pc = 0;
-				nibble = 1;
-				c_phase = 14;
-			end
-		14:	begin						// 7 write data stage - assert appropriate write strobe
-				strobe_out = 0;
-				write_data_n =  r_ins[0];
-				write_ram_n  = ~r_ins[0];
-				nibble = 0;
-				c_phase = 15;
-			end
-		15:	begin						// 7 write data stage - assert appropriate write strobe
-				strobe_out = 0;
-				nibble = 1;
-				write_data_n =  r_ins[0];
-				write_ram_n  = ~r_ins[0];
-				c_phase = 0;
-			end
-    	endcase
-    end
-
-    always @(posedge clk) begin
-		r_a     <= c_a;
-		r_b     <= c_b;
-		r_c     <= c_c;
-		r_x     <= c_x;
-		r_y     <= c_y;
-		r_ins   <= c_ins;
-		r_v		<= c_v;
-		r_l		<= c_l;
-		r_h		<= c_h;
-		r_ee	<= c_ee;
-		r_pc    <= c_pc;
-		r_phase <= c_phase;
-		r_s0    <= c_s0;
-		r_s1    <= c_s1;
-    end
-
-endmodule
-
-/* For Emacs:   
- * Local Variables:
- * mode:c       
- * indent-tabs-mode:t
- * tab-width:4  
- * c-basic-offset:4
- * End: 
- * For VIM:
- * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
- */
diff --git a/verilog/rtl/086_freq_counter.v b/verilog/rtl/086_freq_counter.v
deleted file mode 100644
index 7881e09..0000000
--- a/verilog/rtl/086_freq_counter.v
+++ /dev/null
@@ -1,73 +0,0 @@
-`default_nettype none
-
-module aramsey118_freq_counter #(
-    parameter DEPTH = 200
-) (
-  input wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-
-    // Precalculate the boundaries
-    localparam integer freq_0 = $ceil(DEPTH * 0.0); // not used, here for completeness
-    localparam integer freq_1 = $ceil(DEPTH * 0.1);
-    localparam integer freq_2 = $ceil(DEPTH * 0.2);
-    localparam integer freq_3 = $ceil(DEPTH * 0.3);
-    localparam integer freq_4 = $ceil(DEPTH * 0.4);
-    localparam integer freq_5 = $ceil(DEPTH * 0.5);
-    localparam integer freq_6 = $ceil(DEPTH * 0.6);
-    localparam integer freq_7 = $ceil(DEPTH * 0.7);
-    localparam integer freq_8 = $ceil(DEPTH * 0.8);
-    localparam integer freq_9 = $ceil(DEPTH * 0.9);
-
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-    wire sig = io_in[2];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    assign io_out[7] = sig;
-
-    wire [$clog2(DEPTH)-1:0] avg;
-    reg sig_d1;
-    reg diff;
-    reg [3:0] digit;
-
-
-    always @(posedge clk) begin
-        // if reset, set counter to 0
-        if (reset) begin
-            sig_d1 <= 0;
-            diff <= 0;
-            digit <= 0;
-        end else begin
-            sig_d1 <= sig;
-            diff <= (sig ^ sig_d1);
-            if ((avg <= $unsigned(freq_1))) begin
-                digit <= 0;
-            end else if ((avg > $unsigned(freq_1)) && (avg <= $unsigned(freq_2))) begin
-                digit <= 1;
-            end else if ((avg > $unsigned(freq_2)) && (avg <= $unsigned(freq_3))) begin
-                digit <= 2;
-            end else if ((avg > $unsigned(freq_3)) && (avg <= $unsigned(freq_4))) begin
-                digit <= 3;
-            end else if ((avg > $unsigned(freq_4)) && (avg <= $unsigned(freq_5))) begin
-                digit <= 4;
-            end else if ((avg > $unsigned(freq_5)) && (avg <= $unsigned(freq_6))) begin
-                digit <= 5;
-            end else if ((avg > $unsigned(freq_6)) && (avg <= $unsigned(freq_7))) begin
-                digit <= 6;
-            end else if ((avg > $unsigned(freq_7)) && (avg <= $unsigned(freq_8))) begin
-                digit <= 7;
-            end else if ((avg > $unsigned(freq_8)) && (avg <= $unsigned(freq_9))) begin
-                digit <= 8;
-            end else begin
-                digit <= 9;
-            end
-        end
-    end
-
-    // instantiate segment display
-    seg7 seg7(.counter(digit), .segments(led_out));
-
-    // instantiate moving average
-    moving_avg #(.DEPTH(DEPTH)) moving_avg(.data_i(diff), .reset, .clk, .avg_o(avg));
-endmodule
diff --git a/verilog/rtl/087_freq_counter.v b/verilog/rtl/087_freq_counter.v
deleted file mode 100644
index 7881e09..0000000
--- a/verilog/rtl/087_freq_counter.v
+++ /dev/null
@@ -1,73 +0,0 @@
-`default_nettype none
-
-module aramsey118_freq_counter #(
-    parameter DEPTH = 200
-) (
-  input wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-
-    // Precalculate the boundaries
-    localparam integer freq_0 = $ceil(DEPTH * 0.0); // not used, here for completeness
-    localparam integer freq_1 = $ceil(DEPTH * 0.1);
-    localparam integer freq_2 = $ceil(DEPTH * 0.2);
-    localparam integer freq_3 = $ceil(DEPTH * 0.3);
-    localparam integer freq_4 = $ceil(DEPTH * 0.4);
-    localparam integer freq_5 = $ceil(DEPTH * 0.5);
-    localparam integer freq_6 = $ceil(DEPTH * 0.6);
-    localparam integer freq_7 = $ceil(DEPTH * 0.7);
-    localparam integer freq_8 = $ceil(DEPTH * 0.8);
-    localparam integer freq_9 = $ceil(DEPTH * 0.9);
-
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-    wire sig = io_in[2];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    assign io_out[7] = sig;
-
-    wire [$clog2(DEPTH)-1:0] avg;
-    reg sig_d1;
-    reg diff;
-    reg [3:0] digit;
-
-
-    always @(posedge clk) begin
-        // if reset, set counter to 0
-        if (reset) begin
-            sig_d1 <= 0;
-            diff <= 0;
-            digit <= 0;
-        end else begin
-            sig_d1 <= sig;
-            diff <= (sig ^ sig_d1);
-            if ((avg <= $unsigned(freq_1))) begin
-                digit <= 0;
-            end else if ((avg > $unsigned(freq_1)) && (avg <= $unsigned(freq_2))) begin
-                digit <= 1;
-            end else if ((avg > $unsigned(freq_2)) && (avg <= $unsigned(freq_3))) begin
-                digit <= 2;
-            end else if ((avg > $unsigned(freq_3)) && (avg <= $unsigned(freq_4))) begin
-                digit <= 3;
-            end else if ((avg > $unsigned(freq_4)) && (avg <= $unsigned(freq_5))) begin
-                digit <= 4;
-            end else if ((avg > $unsigned(freq_5)) && (avg <= $unsigned(freq_6))) begin
-                digit <= 5;
-            end else if ((avg > $unsigned(freq_6)) && (avg <= $unsigned(freq_7))) begin
-                digit <= 6;
-            end else if ((avg > $unsigned(freq_7)) && (avg <= $unsigned(freq_8))) begin
-                digit <= 7;
-            end else if ((avg > $unsigned(freq_8)) && (avg <= $unsigned(freq_9))) begin
-                digit <= 8;
-            end else begin
-                digit <= 9;
-            end
-        end
-    end
-
-    // instantiate segment display
-    seg7 seg7(.counter(digit), .segments(led_out));
-
-    // instantiate moving average
-    moving_avg #(.DEPTH(DEPTH)) moving_avg(.data_i(diff), .reset, .clk, .avg_o(avg));
-endmodule
diff --git a/verilog/rtl/087_thunderbird_taillight_ctrl.v b/verilog/rtl/087_thunderbird_taillight_ctrl.v
deleted file mode 100644
index d632a83..0000000
--- a/verilog/rtl/087_thunderbird_taillight_ctrl.v
+++ /dev/null
@@ -1,108 +0,0 @@
-`default_nettype none `timescale 1ns / 1ps
-// coded by Hirosh Dabui 2012
-// based on T-Bird tail-lights machine from digital design book
-// table 9-20 in VHDL
-/* verilator lint_off MULTITOP */
-module thunderbird_taillight_ctrl #(
-    parameter MAX_COUNT = 1000,
-    parameter SYSTEM_FREQ = 6250,
-    parameter HZ = 8
-) (
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-  wire clk = io_in[0];
-  wire reset = io_in[1];
-  wire left = io_in[2];
-  wire right = io_in[3];
-  wire haz = io_in[4];
-
-  wire [5:0] lights = state;
-  assign io_out[7:0] = {2'b00, lights};
-
-  wire div;
-  divider #(
-      .SYSTEM_FREQ(SYSTEM_FREQ),
-      .HZ         (HZ)
-  ) divider_i (
-      .clk    (clk),
-      .reset  (reset),
-      .divider(div)
-  );
-
-  localparam IDLE = 6'b000_000;
-  localparam L3 = 6'b111_000;
-  localparam L2 = 6'b011_000;
-  localparam L1 = 6'b001_000;
-  localparam R3 = 6'b000_111;
-  localparam R2 = 6'b000_110;
-  localparam R1 = 6'b000_100;
-  localparam LR3 = 6'b111_111;
-
-  reg [5:0] state, next_state;
-
-  always @(posedge clk) begin
-    if (reset) begin
-      state <= IDLE;
-    end else begin
-      if (div) begin
-        state <= next_state;
-      end
-    end
-  end
-
-  always @(*) begin
-    next_state = state;
-
-    case (state)
-      IDLE: begin
-        case (1'b1)
-          haz | (left & right): next_state = LR3;
-          left: next_state = L1;
-          right: next_state = R1;
-          default: next_state = IDLE;
-        endcase
-      end
-
-      L1: next_state = haz ? LR3 : L2;
-      L2: next_state = haz ? LR3 : L3;
-      L3: next_state = haz ? LR3 : IDLE;
-
-      R1: next_state = haz ? LR3 : R2;
-      R2: next_state = haz ? LR3 : R3;
-      R3: next_state = haz ? LR3 : IDLE;
-
-      LR3: next_state = IDLE;
-
-      default: next_state = state;
-    endcase
-  end
-
-endmodule
-
-module divider #(
-    parameter SYSTEM_FREQ = 6250,
-    parameter HZ = 8
-) (
-    input  clk,
-    input  reset,
-    output divider
-);
-  localparam CYCLES = SYSTEM_FREQ / HZ;
-  reg [$clog2(CYCLES) -1:0] cnt;
-  always @(posedge clk) begin
-    if (reset) begin
-      cnt <= 0;
-    end else begin
-      cnt <= cnt + 1;
-      /* verilator lint_off WIDTH */
-      if (cnt >= (CYCLES - 1)) begin
-        cnt <= 0;
-      end
-      /* verilator lint_on WIDTH */
-    end
-  end
-  assign divider = cnt == 0;
-endmodule
-/* verilator lint_on MULTITOP */
diff --git a/verilog/rtl/088_fpga.v b/verilog/rtl/088_fpga.v
deleted file mode 100644
index 2fb7e91..0000000
--- a/verilog/rtl/088_fpga.v
+++ /dev/null
@@ -1,180 +0,0 @@
-`default_nettype none
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module gatecat_fpga_top(
-  input [7:0] io_in, 
-  output [7:0] io_out
-);
-
-    wire cfg_mode, cfg_frameinc, cfg_framestrb, cfg_dataclk;
-    wire [3:0] cfg_sel;
-
-    sky130_fd_sc_hd__clkbuf_2 mode_clkbuf(.A(io_in[3]), .X(cfg_mode));
-    sky130_fd_sc_hd__clkbuf_2 frameinc_clkbuf(.A(io_in[1]), .X(cfg_frameinc));
-    sky130_fd_sc_hd__clkbuf_2 framestrb_clkbuf(.A(io_in[2]), .X(cfg_framestrb));
-    assign cfg_dataclk = io_in[0];
-
-    wire cfg_datain;
-    sky130_fd_sc_hd__buf_2 din_buf (.A(io_in[4]), .X(cfg_datain));
-
-    localparam W = 5;
-    localparam H = 6;
-    localparam FW = W * 4;
-    localparam FH = H * 2;
-
-    reg [$clog2(FH)-1:0] frame_ctr;
-    reg [FW-1:0] frame_sr;
-
-    always @(posedge cfg_frameinc, negedge cfg_mode)
-        if (~cfg_mode)
-            frame_ctr <= 0;
-        else
-            frame_ctr <= frame_ctr + 1'b1;
-
-    // avoid a shift register for the frame data because that's the highest hold risk
-    always @(posedge cfg_dataclk)
-        frame_sr <= {cfg_datain, frame_sr[FW-1:1]};
-
-    wire [FH-1:0] frame_strb;
-    wire gated_strobe = cfg_mode & cfg_framestrb;
-    generate;
-        genvar ii;
-        for (ii = 0; ii < FH; ii = ii + 1'b1) begin
-            //make sure this is glitch free
-            sky130_fd_sc_hd__nand2_2 cfg_nand (.A(gated_strobe), .B(frame_ctr == ii), .Y(frame_strb[ii]));
-        end
-    endgenerate
-
-    wire fab_clk = io_in[0];
-    wire [6:0] fab_din;
-    sky130_fd_sc_hd__buf_1 din_buf[6:0] (.A(io_in[7:1]), .X(fab_din));
-
-    wire [0:W-1] cell_q[0:H-1];
-    generate
-        genvar xx;
-        genvar yy;
-        for (yy = 0; yy < H; yy = yy + 1'b1) begin: y_c
-            for (xx = 0; xx < W; xx = xx + 1'b1) begin: x_c
-                wire ti, bi, li, ri;
-                if (yy > 0) assign ti = cell_q[yy-1][xx]; else assign ti = fab_din[xx];
-                if (yy < H-1) assign bi = cell_q[yy+1][xx]; else assign bi = cell_q[yy][xx];
-                if (xx > 0) assign li = cell_q[yy][xx-1]; else assign li = fab_din[yy + 1];
-                if (xx < W-1) assign ri = cell_q[yy][xx+1]; else assign ri = cell_q[yy][xx];
-                gatecat_logic_cell #(.has_ff(1'b1)) lc_i (
-                    .CLK(fab_clk),
-                    .cfg_mode(cfg_mode),
-                    .cfg_strb(frame_strb[yy * 2 +: 2]),
-                    .cfg_data(frame_sr[xx * 4 +: 4]),
-                    .T(ti), .B(bi), .L(li),. R(ri),
-                    .Q(cell_q[yy][xx])
-                );
-            end
-        end
-    endgenerate
-
-    assign io_out = {cell_q[5][W-1], cell_q[4][W-1], cell_q[3][W-1], cell_q[H-1]};
-
-
-endmodule
-
-module gatecat_logic_cell (
-    input CLK,
-    input cfg_mode,
-    input [1:0] cfg_strb,
-    input [3:0] cfg_data,
-    input T, L, R, B,
-    output Q
-);
-    parameter has_ff = 1'b0;
-    // config storage
-    wire [7:0] cfg;
-    generate
-    genvar ii, jj;
-        for (ii = 0; ii < 2; ii = ii + 1'b1)
-            for (jj = 0; jj < 4; jj = jj + 1'b1)
-                sky130_fd_sc_hd__dlxtn_1 cfg_lat_i (
-                    .D(cfg_data[jj]),
-                    .GATE_N(cfg_strb[ii]),
-                    .Q(cfg[ii*4 + jj])
-                );
-    endgenerate
-
-    wire i0, i1;
-    // I input muxes
-    wire i0a, i0b;
-    sky130_fd_sc_hd__nand2_1 i0muxa0 (
-        .A(T), .B(cfg[0]),
-        .Y(i0a)
-    );
-    sky130_fd_sc_hd__mux2i_1 i0muxa1 (
-        .A0(R), .A1(L), .S(cfg[0]),
-        .Y(i0b)
-    );
-
-    sky130_fd_sc_hd__mux2i_1 i0muxb (
-        .A0(i0a), .A1(i0b), .S(cfg[1]),
-        .Y(i0)
-    );
-
-    wire i1a, i1b;
-    sky130_fd_sc_hd__and2_1 i1muxa0 (
-        .A(cfg[2]), .B(L),
-        .X(i1a)
-    );
-    sky130_fd_sc_hd__mux2i_1 i1muxa1 (
-        .A0(B), .A1(R), .S(cfg[2]),
-        .Y(i1b)
-    );
-    sky130_fd_sc_hd__mux2i_1 i1muxb (
-        .A0(i1a), .A1(i1b), .S(cfg[3]),
-        .Y(i1)
-    );
-    // S input mux
-    wire s0s, s0, s0a, s0b;
-
-    sky130_fd_sc_hd__nand2_1 s0muxa0 (
-        .A(T), .B(cfg[4]),
-        .Y(s0a)
-    );
-    sky130_fd_sc_hd__mux2i_1 s0muxa1 (
-        .A0(R), .A1(L), .S(cfg[4]),
-        .Y(s0b)
-    );
-
-    sky130_fd_sc_hd__mux2i_1 s0muxb (
-        .A0(s0a), .A1(s0b), .S(cfg[5]),
-        .Y(s0s)
-    );
-    // S invert
-    sky130_fd_sc_hd__xnor2_1 sinv (
-        .A(s0s), .B(cfg[6]), .Y(s0)
-    );
-    // The logic element
-    wire muxo_n;
-    sky130_fd_sc_hd__mux2i_1 lmux (
-        .A0(i0), .A1(i1), .S(s0), .Y(muxo_n)
-    );
-    // The DFF
-    generate if (has_ff) begin: dff
-        wire dffo_n;
-        sky130_fd_sc_hd__dfsbp_1 dff(
-            .D(muxo_n),
-            .SET_B(~cfg_mode),
-            .CLK(CLK),
-            .Q(dffo_n)
-        );
-        // The final output mux
-        sky130_fd_sc_hd__mux2i_1 ffsel (
-            .A0(muxo_n), .A1(dffo_n), .S(cfg[7]), .Y(Q)
-        );
-    end else begin
-        sky130_fd_sc_hd__inv_1 linv (
-            .A(muxo_n), .Y(Q)
-        );
-    end
-    endgenerate
-endmodule
diff --git a/verilog/rtl/088_thunderbird_taillight_ctrl.v b/verilog/rtl/088_thunderbird_taillight_ctrl.v
deleted file mode 100644
index d632a83..0000000
--- a/verilog/rtl/088_thunderbird_taillight_ctrl.v
+++ /dev/null
@@ -1,108 +0,0 @@
-`default_nettype none `timescale 1ns / 1ps
-// coded by Hirosh Dabui 2012
-// based on T-Bird tail-lights machine from digital design book
-// table 9-20 in VHDL
-/* verilator lint_off MULTITOP */
-module thunderbird_taillight_ctrl #(
-    parameter MAX_COUNT = 1000,
-    parameter SYSTEM_FREQ = 6250,
-    parameter HZ = 8
-) (
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-  wire clk = io_in[0];
-  wire reset = io_in[1];
-  wire left = io_in[2];
-  wire right = io_in[3];
-  wire haz = io_in[4];
-
-  wire [5:0] lights = state;
-  assign io_out[7:0] = {2'b00, lights};
-
-  wire div;
-  divider #(
-      .SYSTEM_FREQ(SYSTEM_FREQ),
-      .HZ         (HZ)
-  ) divider_i (
-      .clk    (clk),
-      .reset  (reset),
-      .divider(div)
-  );
-
-  localparam IDLE = 6'b000_000;
-  localparam L3 = 6'b111_000;
-  localparam L2 = 6'b011_000;
-  localparam L1 = 6'b001_000;
-  localparam R3 = 6'b000_111;
-  localparam R2 = 6'b000_110;
-  localparam R1 = 6'b000_100;
-  localparam LR3 = 6'b111_111;
-
-  reg [5:0] state, next_state;
-
-  always @(posedge clk) begin
-    if (reset) begin
-      state <= IDLE;
-    end else begin
-      if (div) begin
-        state <= next_state;
-      end
-    end
-  end
-
-  always @(*) begin
-    next_state = state;
-
-    case (state)
-      IDLE: begin
-        case (1'b1)
-          haz | (left & right): next_state = LR3;
-          left: next_state = L1;
-          right: next_state = R1;
-          default: next_state = IDLE;
-        endcase
-      end
-
-      L1: next_state = haz ? LR3 : L2;
-      L2: next_state = haz ? LR3 : L3;
-      L3: next_state = haz ? LR3 : IDLE;
-
-      R1: next_state = haz ? LR3 : R2;
-      R2: next_state = haz ? LR3 : R3;
-      R3: next_state = haz ? LR3 : IDLE;
-
-      LR3: next_state = IDLE;
-
-      default: next_state = state;
-    endcase
-  end
-
-endmodule
-
-module divider #(
-    parameter SYSTEM_FREQ = 6250,
-    parameter HZ = 8
-) (
-    input  clk,
-    input  reset,
-    output divider
-);
-  localparam CYCLES = SYSTEM_FREQ / HZ;
-  reg [$clog2(CYCLES) -1:0] cnt;
-  always @(posedge clk) begin
-    if (reset) begin
-      cnt <= 0;
-    end else begin
-      cnt <= cnt + 1;
-      /* verilator lint_off WIDTH */
-      if (cnt >= (CYCLES - 1)) begin
-        cnt <= 0;
-      end
-      /* verilator lint_on WIDTH */
-    end
-  end
-  assign divider = cnt == 0;
-endmodule
-/* verilator lint_on MULTITOP */
diff --git a/verilog/rtl/089_fpga.v b/verilog/rtl/089_fpga.v
deleted file mode 100644
index 2fb7e91..0000000
--- a/verilog/rtl/089_fpga.v
+++ /dev/null
@@ -1,180 +0,0 @@
-`default_nettype none
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module gatecat_fpga_top(
-  input [7:0] io_in, 
-  output [7:0] io_out
-);
-
-    wire cfg_mode, cfg_frameinc, cfg_framestrb, cfg_dataclk;
-    wire [3:0] cfg_sel;
-
-    sky130_fd_sc_hd__clkbuf_2 mode_clkbuf(.A(io_in[3]), .X(cfg_mode));
-    sky130_fd_sc_hd__clkbuf_2 frameinc_clkbuf(.A(io_in[1]), .X(cfg_frameinc));
-    sky130_fd_sc_hd__clkbuf_2 framestrb_clkbuf(.A(io_in[2]), .X(cfg_framestrb));
-    assign cfg_dataclk = io_in[0];
-
-    wire cfg_datain;
-    sky130_fd_sc_hd__buf_2 din_buf (.A(io_in[4]), .X(cfg_datain));
-
-    localparam W = 5;
-    localparam H = 6;
-    localparam FW = W * 4;
-    localparam FH = H * 2;
-
-    reg [$clog2(FH)-1:0] frame_ctr;
-    reg [FW-1:0] frame_sr;
-
-    always @(posedge cfg_frameinc, negedge cfg_mode)
-        if (~cfg_mode)
-            frame_ctr <= 0;
-        else
-            frame_ctr <= frame_ctr + 1'b1;
-
-    // avoid a shift register for the frame data because that's the highest hold risk
-    always @(posedge cfg_dataclk)
-        frame_sr <= {cfg_datain, frame_sr[FW-1:1]};
-
-    wire [FH-1:0] frame_strb;
-    wire gated_strobe = cfg_mode & cfg_framestrb;
-    generate;
-        genvar ii;
-        for (ii = 0; ii < FH; ii = ii + 1'b1) begin
-            //make sure this is glitch free
-            sky130_fd_sc_hd__nand2_2 cfg_nand (.A(gated_strobe), .B(frame_ctr == ii), .Y(frame_strb[ii]));
-        end
-    endgenerate
-
-    wire fab_clk = io_in[0];
-    wire [6:0] fab_din;
-    sky130_fd_sc_hd__buf_1 din_buf[6:0] (.A(io_in[7:1]), .X(fab_din));
-
-    wire [0:W-1] cell_q[0:H-1];
-    generate
-        genvar xx;
-        genvar yy;
-        for (yy = 0; yy < H; yy = yy + 1'b1) begin: y_c
-            for (xx = 0; xx < W; xx = xx + 1'b1) begin: x_c
-                wire ti, bi, li, ri;
-                if (yy > 0) assign ti = cell_q[yy-1][xx]; else assign ti = fab_din[xx];
-                if (yy < H-1) assign bi = cell_q[yy+1][xx]; else assign bi = cell_q[yy][xx];
-                if (xx > 0) assign li = cell_q[yy][xx-1]; else assign li = fab_din[yy + 1];
-                if (xx < W-1) assign ri = cell_q[yy][xx+1]; else assign ri = cell_q[yy][xx];
-                gatecat_logic_cell #(.has_ff(1'b1)) lc_i (
-                    .CLK(fab_clk),
-                    .cfg_mode(cfg_mode),
-                    .cfg_strb(frame_strb[yy * 2 +: 2]),
-                    .cfg_data(frame_sr[xx * 4 +: 4]),
-                    .T(ti), .B(bi), .L(li),. R(ri),
-                    .Q(cell_q[yy][xx])
-                );
-            end
-        end
-    endgenerate
-
-    assign io_out = {cell_q[5][W-1], cell_q[4][W-1], cell_q[3][W-1], cell_q[H-1]};
-
-
-endmodule
-
-module gatecat_logic_cell (
-    input CLK,
-    input cfg_mode,
-    input [1:0] cfg_strb,
-    input [3:0] cfg_data,
-    input T, L, R, B,
-    output Q
-);
-    parameter has_ff = 1'b0;
-    // config storage
-    wire [7:0] cfg;
-    generate
-    genvar ii, jj;
-        for (ii = 0; ii < 2; ii = ii + 1'b1)
-            for (jj = 0; jj < 4; jj = jj + 1'b1)
-                sky130_fd_sc_hd__dlxtn_1 cfg_lat_i (
-                    .D(cfg_data[jj]),
-                    .GATE_N(cfg_strb[ii]),
-                    .Q(cfg[ii*4 + jj])
-                );
-    endgenerate
-
-    wire i0, i1;
-    // I input muxes
-    wire i0a, i0b;
-    sky130_fd_sc_hd__nand2_1 i0muxa0 (
-        .A(T), .B(cfg[0]),
-        .Y(i0a)
-    );
-    sky130_fd_sc_hd__mux2i_1 i0muxa1 (
-        .A0(R), .A1(L), .S(cfg[0]),
-        .Y(i0b)
-    );
-
-    sky130_fd_sc_hd__mux2i_1 i0muxb (
-        .A0(i0a), .A1(i0b), .S(cfg[1]),
-        .Y(i0)
-    );
-
-    wire i1a, i1b;
-    sky130_fd_sc_hd__and2_1 i1muxa0 (
-        .A(cfg[2]), .B(L),
-        .X(i1a)
-    );
-    sky130_fd_sc_hd__mux2i_1 i1muxa1 (
-        .A0(B), .A1(R), .S(cfg[2]),
-        .Y(i1b)
-    );
-    sky130_fd_sc_hd__mux2i_1 i1muxb (
-        .A0(i1a), .A1(i1b), .S(cfg[3]),
-        .Y(i1)
-    );
-    // S input mux
-    wire s0s, s0, s0a, s0b;
-
-    sky130_fd_sc_hd__nand2_1 s0muxa0 (
-        .A(T), .B(cfg[4]),
-        .Y(s0a)
-    );
-    sky130_fd_sc_hd__mux2i_1 s0muxa1 (
-        .A0(R), .A1(L), .S(cfg[4]),
-        .Y(s0b)
-    );
-
-    sky130_fd_sc_hd__mux2i_1 s0muxb (
-        .A0(s0a), .A1(s0b), .S(cfg[5]),
-        .Y(s0s)
-    );
-    // S invert
-    sky130_fd_sc_hd__xnor2_1 sinv (
-        .A(s0s), .B(cfg[6]), .Y(s0)
-    );
-    // The logic element
-    wire muxo_n;
-    sky130_fd_sc_hd__mux2i_1 lmux (
-        .A0(i0), .A1(i1), .S(s0), .Y(muxo_n)
-    );
-    // The DFF
-    generate if (has_ff) begin: dff
-        wire dffo_n;
-        sky130_fd_sc_hd__dfsbp_1 dff(
-            .D(muxo_n),
-            .SET_B(~cfg_mode),
-            .CLK(CLK),
-            .Q(dffo_n)
-        );
-        // The final output mux
-        sky130_fd_sc_hd__mux2i_1 ffsel (
-            .A0(muxo_n), .A1(dffo_n), .S(cfg[7]), .Y(Q)
-        );
-    end else begin
-        sky130_fd_sc_hd__inv_1 linv (
-            .A(muxo_n), .Y(Q)
-        );
-    end
-    endgenerate
-endmodule
diff --git a/verilog/rtl/091_whisk.v b/verilog/rtl/091_whisk.v
deleted file mode 100644
index b15d594..0000000
--- a/verilog/rtl/091_whisk.v
+++ /dev/null
@@ -1,1173 +0,0 @@
-// ============================================================================
-// Whisk: a 16-bit bit-serial RISC processor (c) Luke Wren 2022
-// SPDX-License-Identifier: Apache-2.0
-// ============================================================================
-
-// Whisk is a 16-bit bit-serial processor, with external SPI SRAM interface,
-// designed in a hurry for Tiny Tapeout 2. See README.md for an overview of
-// the instruction set. Supporting hardware:
-//
-// - SPI SRAM with sequential mode and 16-bit addressing, e.g. Microchip
-//   23K256T-I (32 kiB SRAM)
-//
-// - One 8-bit parallel-to-serial shift register, for input port
-//
-// - Two 8-bit serial-to-parallel shift registers, for output port
-//
-// - A host device capable of loading the SPI SRAM, setting it to sequential
-//   mode, and releasing Whisk's reset. I'll probably use a Pico.
-//
-// There will be a board with all of these components ready for bringup, and
-// it will be added to this repository (also I will probably make a few of
-// them, and will gladly send you one if you ask). However this will not be
-// done before tapeout, as I started this project a week before the
-// deadline!
-
-`ifdef WHISK_DEFAULT_NETTYPE_NONE
-`default_nettype none
-`endif
-
-`ifndef WHISK_NO_CELLS
-`define WHISK_CELLS_SKY130
-`endif
-
-// ============================================================================
-// Module wren6991_whisk_tt2_io_wrapper: Top level for TT2 synthesis.
-// instantiate whisk_top, and map named ports to numbered TT2 inputs/outputs
-// ============================================================================
-
-module wren6991_whisk_tt2_io_wrapper (
-	input  wire [7:0] io_in,
-	output wire [7:0] io_out
-);
-
-// Global signals
-wire io_clk = io_in[0];
-wire io_rst_n = io_in[1];
-
-// SPI memory interface
-wire io_mem_sdi = io_in[2];
-
-wire io_mem_csn;
-wire io_mem_sck;
-wire io_mem_sdo;
-
-assign io_out[0] = io_mem_csn;
-assign io_out[1] = io_mem_sck;
-assign io_out[2] = io_mem_sdo;
-
-wire       io_retime_mem_out = io_in[4];
-wire [1:0] io_retime_mem_in  = io_in[6:5];
-
-// IO port (shift register interface)
-wire io_ioport_sdi = io_in[3];
-
-wire io_ioport_sck;
-wire io_ioport_sdo;
-wire io_ioport_latch_i;
-wire io_ioport_latch_o;
-
-assign io_out[3] = io_ioport_sck;
-assign io_out[4] = io_ioport_sdo;
-assign io_out[5] = io_ioport_latch_i;
-assign io_out[6] = io_ioport_latch_o;
-
-// Be a good neighbour
-assign io_out[7] = 1'b0;
-
-whisk_top top_u (
-	.io_clk            (io_clk),
-	.io_rst_n          (io_rst_n),
-
-	.io_mem_sdi        (io_mem_sdi),
-	.io_mem_csn        (io_mem_csn),
-	.io_mem_sck        (io_mem_sck),
-	.io_mem_sdo        (io_mem_sdo),
-
-	.io_retime_mem_out (io_retime_mem_out),
-	.io_retime_mem_in  (io_retime_mem_in),
-
-	.io_ioport_sdi     (io_ioport_sdi),
-	.io_ioport_sck     (io_ioport_sck),
-	.io_ioport_sdo     (io_ioport_sdo),
-	.io_ioport_latch_i (io_ioport_latch_i),
-	.io_ioport_latch_o (io_ioport_latch_o)
-);
-
-endmodule
-
-// ============================================================================
-// Module whisk_top: instantiate the CPU core together with the SPI mem
-// serdes and IO port serdes.
-// ============================================================================
-
-module whisk_top (
-	input  wire       io_clk,
-	input  wire       io_rst_n,
-
-	input  wire       io_mem_sdi,
-	output wire       io_mem_csn,
-	output wire       io_mem_sck,
-	output wire       io_mem_sdo,
-
-	input  wire       io_retime_mem_out,
-	input  wire [1:0] io_retime_mem_in,
-
-	input  wire       io_ioport_sdi,
-	output wire       io_ioport_sck,
-	output wire       io_ioport_sdo,
-	output wire       io_ioport_latch_i,
-	output wire       io_ioport_latch_o
-);
-
-// ----------------------------------------------------------------------------
-// Clock/reset wrangling
-
-// Don't buffer the clock -- seems like the scripts define a clock on io_in[0]?
-wire clk = io_clk;
-
-// Synchronise reset removal to clk
-reg [1:0] reset_sync;
-wire rst_n = reset_sync[1];
-
-always @ (posedge clk or negedge io_rst_n) begin
-	if (!io_rst_n) begin
-		reset_sync <= 2'd00;
-	end else begin
-		reset_sync <= ~(~reset_sync << 1);
-	end
-end
-
-// ----------------------------------------------------------------------------
-// Processor instantiation
-
-wire mem_sck_en_next;
-wire mem_sdo_next;
-wire mem_csn_next;
-wire mem_sdi_prev;
-
-wire ioport_sck_en_next;
-wire ioport_sdo_next;
-wire ioport_sdi_prev;
-wire ioport_latch_i_next;
-wire ioport_latch_o_next;
-
-whisk_cpu cpu (
-	.clk                 (clk),
-	.rst_n               (rst_n),
-
-	.mem_sck_en_next     (mem_sck_en_next),
-	.mem_sdo_next        (mem_sdo_next),
-	.mem_csn_next        (mem_csn_next),
-	.mem_sdi_prev        (mem_sdi_prev),
-
-	.ioport_sck_en_next  (ioport_sck_en_next),
-	.ioport_sdo_next     (ioport_sdo_next),
-	.ioport_sdi_prev     (ioport_sdi_prev),
-	.ioport_latch_i_next (ioport_latch_i_next),
-	.ioport_latch_o_next (ioport_latch_o_next)
-);
-
-// ----------------------------------------------------------------------------
-// Serdes (IO registers)
-
-whisk_spi_serdes mem_serdes_u (
-	.clk                  (clk),
-	.rst_n                (rst_n),
-
-	.sdo                  (mem_sdo_next),
-	.sck_en               (mem_sck_en_next),
-	.csn                  (mem_csn_next),
-	.sdi                  (mem_sdi_prev),
-
-	.padout_sck           (io_mem_sck),
-	.padout_csn           (io_mem_csn),
-	.padout_sdo           (io_mem_sdo),
-	.padin_sdi            (io_mem_sdi),
-
-	.padin_retime_mem_out (io_retime_mem_out),
-	.padin_retime_mem_in  (io_retime_mem_in),
-);
-
-whisk_ioport_serdes io_serdes_u (
-	.clk             (clk),
-	.rst_n           (rst_n),
-
-	.sdo             (ioport_sdo_next),
-	.sck_en          (ioport_sck_en_next),
-	.latch_i         (ioport_latch_i_next),
-	.latch_o         (ioport_latch_o_next),
-	.sdi             (ioport_sdi_prev),
-
-	.padout_sdo      (io_ioport_sdo),
-	.padout_sck      (io_ioport_sck),
-	.padout_latch_i  (io_ioport_latch_i),
-	.padout_latch_o  (io_ioport_latch_o),
-	.padin_sdi       (io_ioport_sdi)
-);
-
-endmodule
-
-// ============================================================================
-// Module whisk_cpu: top-level for the Whisk processor, minus the IO wrapper
-// and the SPI/IOPORT serdes
-// ============================================================================
-
-module whisk_cpu (
-	input  wire       clk,
-	input  wire       rst_n,
-
-	// SPI SRAM interface
-	output wire       mem_sck_en_next,
-	output wire       mem_sdo_next,
-	output wire       mem_csn_next,
-	input  wire       mem_sdi_prev,
-
-	// Shift registers for IO port
-	output wire       ioport_sck_en_next,
-	output wire       ioport_sdo_next,
-	input  wire       ioport_sdi_prev,
-	output wire       ioport_latch_i_next,
-	output wire       ioport_latch_o_next
-);
-
-// ----------------------------------------------------------------------------
-// Constants
-
-// Machine size
-localparam       W_INSTR        = 16;
-localparam       W_DATA         = 16;
-localparam       N_REGS         = 6;
-
-// Instruction layout
-localparam       INSTR_OP_LSB   = 0;
-localparam       INSTR_OP_MSB   = 3;
-localparam       INSTR_COND_LSB = 4;
-localparam       INSTR_COND_MSB = 6;
-localparam       INSTR_RT_LSB   = 7;
-localparam       INSTR_RT_MSB   = 9;
-localparam       INSTR_RS_LSB   = 10;
-localparam       INSTR_RS_MSB   = 12;
-localparam       INSTR_RD_LSB   = 13;
-localparam       INSTR_RD_MSB   = 15;
-
-// Major opcodes (instr[3:0])
-localparam [3:0] OP_ADD         = 4'h0; // rd = rs +  rt
-localparam [3:0] OP_SUB         = 4'h1; // rd = rs -  rt
-localparam [3:0] OP_AND         = 4'h2; // rd = rs &  rt
-localparam [3:0] OP_ANDN        = 4'h3; // rd = rs & ~rt
-localparam [3:0] OP_OR          = 4'h4; // rd = rs |  rt
-localparam [3:0] OP_SHIFT       = 4'h5; // Minor opcode in rt
-localparam [3:0] OP_INOUT       = 4'h6; // Minor opcode in rs
-
-localparam [3:0] OP_LB          = 4'h8; // rd = mem[rs     ];
-localparam [3:0] OP_LH_IA       = 4'h9; // rd = mem[rs     ]; rs += rt;
-localparam [3:0] OP_LH_ADD      = 4'ha; // rd = mem[rs + rt];
-localparam [3:0] OP_LH_IB       = 4'hb; // rd = mem[rs + rt]; rs += rt;
-
-localparam [3:0] OP_SB          = 4'hc; // mem[rs     ] = rd;
-localparam [3:0] OP_SH_IA       = 4'hd; // mem[rs     ] = rd; rs += rt;
-localparam [3:0] OP_SH_ADD      = 4'he; // mem[rs + rt] = rd;
-localparam [3:0] OP_SH_IB       = 4'hf; // mem[rs + rt] = rd; rs += rt;
-
-// Minor opcodes (rt)
-localparam [2:0] OP2_SRL        = 3'h0;
-localparam [2:0] OP2_SRA        = 3'h1;
-localparam [2:0] OP2_SLL        = 3'h4;
-
-// Minor opcodes (rs)
-localparam [2:0] OP2_IN         = 3'h0;
-localparam [2:0] OP2_OUT        = 3'h4;
-
-// ----------------------------------------------------------------------------
-// Main control state machine
-
-reg [W_INSTR-1:0] instr;
-
-wire [INSTR_OP_MSB  -INSTR_OP_LSB  :0] instr_op;
-wire [INSTR_COND_MSB-INSTR_COND_LSB:0] instr_cond;
-wire [INSTR_RT_MSB  -INSTR_RT_LSB  :0] instr_rt;
-wire [INSTR_RS_MSB  -INSTR_RS_LSB  :0] instr_rs;
-wire [INSTR_RD_MSB  -INSTR_RD_LSB  :0] instr_rd;
-
-assign {instr_rd, instr_rs, instr_rt, instr_cond, instr_op} = instr;
-
-wire instr_op_ls      = instr_op[3]; // Whether an instruction is a load/store
-wire instr_op_st_nld  = instr_op[2]; // Whether a load/store is a load or store
-wire instr_op_ls_suma = instr_op[1]; // Whether sum is used for address
-wire instr_op_ls_sumr = instr_op[0]; // Whether sum is written back to register
-
-reg [3:0] bit_ctr;
-reg [2:0] state;
-reg       instr_cond_true;
-reg       instr_has_imm_operand;
-
-
-// Note there is a 2 cycle delay from issuing a bit on SDO to getting a bit
-// back on SDI. This is handled with a 1-cycle gap after issuing a read
-// address, so that e.g. S_FETCH always has the first instruction bit
-// available on the first cycle.
-
-localparam [2:0] S_FETCH      = 3'd0; // Sample 16 instr bits, increment PC
-localparam [2:0] S_EXEC       = 3'd1; // Loop all GPRs, write one GPR
-localparam [2:0] S_PC_NONSEQ0 = 3'd2; // Issue cmd, then issue 1 PC bit
-localparam [2:0] S_PC_NONSEQ1 = 3'd3; // Issue rest of PC, then 1 cyc delay
-localparam [2:0] S_LS_ADDR0   = 3'd4; // Deferred LS SPI cmd following immediate
-localparam [2:0] S_LS_ADDR1   = 3'd5; // Issue addr then, if load, 1 cyc delay
-localparam [2:0] S_LS_DATA    = 3'd6; // Issue store data, or sample load data
-localparam [2:0] S_SKIP_IMM   = 3'd7; // Skip immediate following false condition
-
-reg [2:0] state_nxt_wrap;
-reg [2:0] state_nxt;
-
-always @ (*) begin
-	state_nxt_wrap = state;
-	case (state)
-		S_FETCH: begin
-			if (!instr_cond_true) begin
-				if (instr_has_imm_operand) begin
-					state_nxt_wrap = S_SKIP_IMM;
-				end else begin
-					state_nxt_wrap = S_FETCH;
-				end
-			end else begin
-				state_nxt_wrap = S_EXEC;
-			end
-		end
-		S_EXEC: begin
-			if (instr_op_ls && instr_has_imm_operand) begin
-				// Command was deferred due to immediate read keeping SPI busy
-				state_nxt_wrap = S_LS_ADDR0;
-			end else if (instr_op_ls) begin
-				// Command was issued concurrently, skip straight to address issue
-				state_nxt_wrap = S_LS_ADDR1;
-			end else if (instr_rd == 3'd7) begin
-				state_nxt_wrap = S_PC_NONSEQ0;
-			end else begin
-				state_nxt_wrap = S_FETCH;
-			end
-		end
-		S_PC_NONSEQ0: begin
-			state_nxt_wrap = S_PC_NONSEQ1;
-		end
-		S_PC_NONSEQ1: begin
-			if (!instr_cond_true) begin
-				// Have just been reset, instr is invalid
-				state_nxt_wrap = S_FETCH;
-			end else begin
-				state_nxt_wrap = S_FETCH;
-			end
-		end
-		S_LS_ADDR0: begin
-			state_nxt_wrap = S_LS_ADDR1;
-		end
-		S_LS_ADDR1: begin
-			state_nxt_wrap = S_LS_DATA;
-		end
-		S_LS_DATA: begin
-			state_nxt_wrap = S_PC_NONSEQ0;
-		end
-		S_SKIP_IMM: begin
-			state_nxt_wrap = S_FETCH;
-		end
-	endcase
-	state_nxt   = &bit_ctr ? state_nxt_wrap   : state;
-end
-
-// Start of day:
-//
-// - The only resettable flops are state, bit_ctr, and instr_cond_true.
-//
-// - We reset state/bit_ctr to a nonsequential fetch, and reset
-//   instr_cond_true=0 (usually unreachable)
-//
-// - instr_cond_true=0 masks the fetch address to 0, regardless of PC
-//
-// - The first instruction must be `add pc, zero, #4` to initialise PC
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		state <= S_PC_NONSEQ0;
-		bit_ctr <= 4'h0;
-	end else begin
-		state <= state_nxt;
-		bit_ctr <= bit_ctr + 4'h1;
-	end
-end
-
-// ----------------------------------------------------------------------------
-// Instruction shifter and early decode
-
-always @ (posedge clk) begin
-	if (state == S_FETCH) begin
-		instr <= {mem_sdi_prev, instr[15:1]};
-	end
-end
-
-// Decode condition and imm operand flags as the instruction comes in, so we
-// can use them to steer the state machine at the end of S_FETCH.
-
-reg instr_has_imm_operand_nxt;
-reg instr_cond_true_nxt;
-
-// From ALU:
-wire [7:0] condition_vec8;
-
-always @ (*) begin
-	instr_has_imm_operand_nxt = instr_has_imm_operand;
-	instr_cond_true_nxt = instr_cond_true;
-
-	if (instr_has_imm_operand && !instr_cond_true) begin
-		// In this case we must be in S_FETCH. Hold instr_cond_true for an
-		// additional fetch cycle so that the immediate operand is also
-		// dumped, but clear the operand flag so we don't loop forever.
-		if (&bit_ctr) begin
-			instr_has_imm_operand_nxt = 1'b0;
-		end
-	end else if (state == S_FETCH) begin
-		if (bit_ctr == (INSTR_RT_MSB + 1)) begin
-			// Grab rt as it goes past (this is why rt is not the MSBs!)
-			instr_has_imm_operand_nxt = instr[W_INSTR-1 -: 3] == 3'd7;
-		end
-		if (bit_ctr == (INSTR_COND_MSB + 1)) begin
-			// Decode condition as it goes past
-			instr_cond_true_nxt = condition_vec8[instr[W_INSTR-1 -: 3]];
-		end
-	end
-end
-
-// instr_cond_true must reset to 0, because we use it to recognise the first
-// fetch after reset. We don't care about instr_has_imm_operand, because it
-// is initialised during S_FETCH before first use.
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		instr_cond_true <= 1'b0;
-	end else begin
-		instr_cond_true <= instr_cond_true_nxt;
-	end
-end
-
-always @ (posedge clk) begin
-	instr_has_imm_operand <= instr_has_imm_operand_nxt;
-end
-
-// ----------------------------------------------------------------------------
-// Register file
-
-wire reg_rd_qr;
-wire reg_rs_qr, reg_rs_qr_next;
-wire reg_rt_qr;
-
-wire alu_result;
-
-wire writeback_wen =
-	state == S_EXEC && !(instr_op_ls && !instr_op_ls_sumr)  ||
-	state == S_LS_DATA && !instr_op_st_nld;
-
-wire writeback_data = alu_result;
-
-wire [INSTR_RD_MSB-INSTR_RD_LSB:0] writeback_reg =
-	instr_op_ls && state != S_LS_DATA ? instr_rs : instr_rd;
-
-whisk_regfile #(
-	.W (W_DATA),
-	.N (N_REGS)
-) regfile_u (
-	.clk        (clk),
-
-	.rd         (writeback_reg),
-	.rd_q       (reg_rd_qr),
-	.rd_wen     (writeback_wen),
-	.rd_d       (writeback_data),
-
-	.rs         (instr_rs),
-	.rs_q       (reg_rs_qr),
-	.rs_q_next  (reg_rs_qr_next),
-
-	.rt         (instr_rt),
-	.rt_q       (reg_rt_qr)
-);
-
-// ----------------------------------------------------------------------------
-// Program counter
-
-wire pc_dl;
-wire pc_qr;
-
-wire [15:0] pc_q_all;
-wire pc_qr_next = pc_q_all[1];
-
-whisk_shiftreg_right #(
-	.W (16)
-) pc_u (
-	.clk   (clk),
-	.dl    (pc_dl),
-	.q_all (pc_q_all),
-	.qr    (pc_qr)
-);
-
-wire pc_increment =
-	state == S_FETCH ||
-	state == S_EXEC && instr_has_imm_operand ||
-	state == S_SKIP_IMM;
-
-reg pc_ci;
-wire pc_co, pc_sum;
-
-assign {pc_co, pc_sum} = pc_qr + (~|bit_ctr[3:1] ? bit_ctr[0] && pc_increment : pc_ci);
-
-always @ (posedge clk) begin
-	pc_ci <= pc_co;
-end
-
-wire rd_is_pc = instr_rd == 3'd7;
-
-assign pc_dl =
-	state == S_EXEC    && rd_is_pc                     ? alu_result   :
-	state == S_LS_DATA && rd_is_pc && !instr_op_st_nld ? mem_sdi_prev : pc_sum;
-
-// ----------------------------------------------------------------------------
-// ALU
-
-wire alu_op_s =
-	instr_rs == 3'd7 ? pc_qr        : reg_rs_qr;
-
-wire alu_op_s_next =
-	instr_rs == 3'd7 ? pc_qr_next   : reg_rs_qr_next;
-
-wire alu_op_t =
-	instr_rt == 3'd7 ? mem_sdi_prev : reg_rt_qr;
-
-reg alu_ci;
-wire [1:0] alu_add = alu_op_s +  alu_op_t + (~|bit_ctr ? 1'b0 : alu_ci);
-wire [1:0] alu_sub = alu_op_s + !alu_op_t + (~|bit_ctr ? 1'b1 : alu_ci);
-
-// Left shift uses the carry flop as a 1-cycle delay, counter to the
-// register's rightward rotation. Right shift looks ahead to advance its
-// rotation. The final carry flag is the bit shifted "out of" the register.
-
-wire [1:0] alu_shift_l = {
-	alu_op_s,
-	|alu_ci && |bit_ctr
-};
-
-wire [1:0] alu_shift_r = {
-	|bit_ctr ? alu_ci                  : alu_op_s,
-	&bit_ctr ? alu_op_s && instr_rt[0] : alu_op_s_next
-};
-
-// Carry is an all-ones flag for bitwise ops
-wire bit_co = alu_result && (alu_ci || ~|bit_ctr);
-
-// Byte loads must be zero- or sign-extended. Use the carry to
-// propagate the sign.
-wire instr_op_ls_byte = !(instr_op_ls_sumr || instr_op_ls_suma);
-wire instr_op_ls_sbyte = instr_rt[2];
-
-wire [1:0] alu_load = {
-	bit_ctr[3]                     ? alu_ci                      : mem_sdi_prev,
-	bit_ctr[3] && instr_op_ls_byte ? alu_ci && instr_op_ls_sbyte : mem_sdi_prev
-};
-
-wire alu_co;
-assign {alu_co, alu_result} =
-	state == S_LS_DATA                   ? alu_load                        :
-	instr_op_ls                          ? alu_add                         :
-	instr_op == OP_ADD                   ? alu_add                         :
-	instr_op == OP_SUB                   ? alu_sub                         :
-	instr_op == OP_AND                   ? {bit_co, alu_op_s &&  alu_op_t} :
-	instr_op == OP_ANDN                  ? {bit_co, alu_op_s && !alu_op_t} :
-	instr_op == OP_OR                    ? {bit_co, alu_op_s ||  alu_op_t} :
-	instr_op == OP_SHIFT &&  instr_rt[2] ? alu_shift_l                     :
-	instr_op == OP_SHIFT && !instr_rt[2] ? alu_shift_r                     :
-	instr_op == OP_INOUT                 ? ioport_sdi_prev                 : alu_add;
-
-always @ (posedge clk) begin
-	alu_ci <= alu_co;
-end
-
-// ----------------------------------------------------------------------------
-// Flags
-
-reg flag_z;
-reg flag_c;
-reg flag_n;
-
-wire update_flags = (state == S_EXEC || state == S_LS_DATA) && ~|instr_cond;
-
-always @ (posedge clk) begin
-	if (update_flags) begin
-		flag_z <= (flag_z || ~|bit_ctr) && !alu_result;
-		flag_n <= alu_result;
-		flag_c <= alu_co;
-	end
-end
-
-assign condition_vec8 = {
-	!flag_z, flag_z,
-	!flag_c, flag_c,
-	!flag_n, flag_n,
-	1'b1,    1'b1
-};
-
-// ----------------------------------------------------------------------------
-// Address register
-
-// Captures address calculations LSB-first and then replays them MSB-first.
-
-wire        ar_l_nr;
-wire        ar_dl;
-wire        ar_dr;
-wire        ar_ql;
-wire        ar_qr;
-
-// Need to look ahead by one bit to get correct timing for read addresses:
-wire [15:0] ar_q_all;
-wire        ar_ql_next = ar_q_all[14];
-
-whisk_shiftreg_leftright #(
-	.W (16)
-) ar_u (
-	.clk   (clk),
-	.l_nr  (ar_l_nr),
-	.dl    (ar_dl),
-	.ql    (ar_ql),
-	.dr    (ar_dr),
-	.qr    (ar_qr),
-	.q_all (ar_q_all)
-);
-
-// Shift left when replaying addresses. Also shift left in LS_ADDR0 to
-// recirculate the address generated during EXEC for use in LS_ADDR1.
-assign ar_l_nr =
-	state == S_LS_ADDR1 ||
-	state == S_PC_NONSEQ1 ||
-	state == S_LS_ADDR0;
-
-assign ar_dr = ar_ql;
-
-assign ar_dl =
-	state == S_PC_NONSEQ0 ? pc_qr   :
-	instr_op_ls_suma      ? alu_add : reg_rs_qr;
-// ----------------------------------------------------------------------------
-// SPI controls
-
-// Deassert CSn before issuing a nonsequential address.
-
-// Note LS_ADDR0 state is skipped if we are able to issue from EXEC:
-wire issue_ls_addr_ph0 =
-	state == S_LS_ADDR0 ||
-	state == S_EXEC && instr_op_ls && !instr_has_imm_operand && instr_cond_true;
-
-wire [3:0] spi_cmd_start_cycle =
-	state == S_PC_NONSEQ0 ? 4'h7 :
-	instr_op_st_nld       ? 4'h8 : 4'h7;
-
-assign mem_csn_next = bit_ctr < spi_cmd_start_cycle && (
-	state == S_PC_NONSEQ0 || issue_ls_addr_ph0
-);
-
-// Pedal to the metal on SCK except when pulling CSn for a nonsequential
-// access, or when executing an unskipped instruction without immediate or
-// early address issue. (Also mask for second half of byte accesses.)
-
-wire mem_sck_disable_on_imm =
-	state == (&bit_ctr[3:1] ? S_FETCH : S_EXEC) && instr_cond_true &&
-	!(instr_has_imm_operand || issue_ls_addr_ph0);
-
-wire mem_sck_disable_on_byte_ls =
-	state == S_LS_DATA && instr_op_ls_byte && bit_ctr[3];
-
-assign mem_sck_en_next = !(
-	mem_csn_next ||
-	mem_sck_disable_on_imm ||
-	mem_sck_disable_on_byte_ls
-);
-
-// Store address replays entirely in LS_ADDR1, but load/fetch extend one cycle
-// into previous state, so carefully pick what delay to observe the address
-// with. (Also mask address to zero for very first fetch at start of day.)
-//
-// Note in LS_ADDR0 that we are actually recirculating an address generated in
-// EXEC, because the address issue was deferred due to an immediate read, so
-// this case looks like load-LS_ADDR1 rather than like load-EXEC.
-
-wire mem_spi_addr =
-	!instr_cond_true                        ? 1'b0       :
-	state == S_PC_NONSEQ1                   ? ar_ql_next :
-	state == S_LS_ADDR1 &&  instr_op_st_nld ? ar_ql      :
-	state == S_LS_ADDR1 && !instr_op_st_nld ? ar_ql_next :
-	state == S_LS_ADDR0                     ? ar_ql_next : ar_dl;
-
-// Note: SPI commands are MSB-first (the commands here are 03h and 02h).
-localparam [15:0] SPI_INSTR_READ  = 16'hc000 >> 1;
-localparam [15:0] SPI_INSTR_WRITE = 16'h4000;
-
-wire mem_sdo_ls_addr_ph0 =
-	instr_op_st_nld ? SPI_INSTR_WRITE[bit_ctr] :
-	&bit_ctr        ? mem_spi_addr             : SPI_INSTR_READ[bit_ctr];
-
-assign mem_sdo_next =
-	state == S_PC_NONSEQ0 ? (&bit_ctr ? pc_qr : SPI_INSTR_READ[bit_ctr]) :
-	state == S_PC_NONSEQ1 ? mem_spi_addr                                 :
-	issue_ls_addr_ph0     ? mem_sdo_ls_addr_ph0                          :
-	state == S_LS_ADDR1   ? mem_spi_addr                                 :
-	state == S_LS_DATA    ? (instr_rd == 3'd7 ? pc_qr : reg_rd_qr)       : 1'b0;
-
-// ----------------------------------------------------------------------------
-// IO port
-
-// Expected hardware is a 1x 8-bit PISO, and 2x 8-bit SIPO shift registers:
-//
-// - OUT: Clock out 16 bits from rt[15:0]/imm[15:0], then pulse latch_o high.
-//
-// - IN: Clock 8 bits into rd[15:8], with latch_i low for the first clock.
-//
-// The IN interface is still driven when executing an OUT, with more clocks.
-// Abusable for 6 extra inputs if a second PISO register is chained.
-//
-// rt[13:6] is actually clocked out on an IN, there's just no latch_o pulse.
-// Abusable to drive longer SIPO chains using multiple INs and a final OUT.
-
-wire exec_io_instr = state == S_EXEC && instr_op == OP_INOUT;
-wire io_instr_out = (instr_rs & (OP2_OUT | OP2_IN)) == OP2_OUT;
-
-// The instruction is still valid on the first cycle of FETCH. This lets us
-// latch outputs *after* the last clock pulse, without spending a flop.
-assign ioport_latch_o_next = state == S_FETCH && ~|bit_ctr &&
-	instr_op == OP_INOUT && io_instr_out && instr_cond_true;
-
-assign ioport_latch_i_next = !(exec_io_instr && bit_ctr == 4'h6);
-
-assign ioport_sdo_next = exec_io_instr && alu_op_t;
-
-assign ioport_sck_en_next  = exec_io_instr && (
-	(bit_ctr >= 4'h6 && bit_ctr < 4'he) ||
-	io_instr_out
-);
-
-endmodule
-
-// ============================================================================
-// Module whisk_regfile: a register file of multiple shift registers, with 3
-// read ports (rd/rs/rt) and one write port (rd).
-// ============================================================================
-
-// All registers rotate right by one bit every cycle. No enable, so do things
-// in multiples of 16 cycles. Registers not written to are recirculated.
-//
-// q is the value of the rightmost flop in each register. The rs port also has
-// a q_next value, which taps in one flop from the end, and is required for
-// performing right-shift-by-one in 16 cycles.
-//
-// Out-of-range indices read as 0, and ignore writes.
-
-module whisk_regfile #(
-	parameter W = 16,
-	parameter N = 6
-) (
-	input  wire                 clk,
-
-	input  wire [$clog2(N)-1:0] rd,
-	output wire                 rd_q,
-	input  wire                 rd_wen,
-	input  wire                 rd_d,
-
-	input  wire [$clog2(N)-1:0] rs,
-	output wire                 rs_q,
-	output wire                 rs_q_next,
-
-	input  wire [$clog2(N)-1:0] rt,
-	output wire                 rt_q,
-);
-
-localparam N_PADDED = 1 << $clog2(N);
-
-wire [N-1:0] d;
-wire [N-1:0] d;
-wire [W-1:0] q [N_PADDED-1:0];
-
-assign rd_q      = q[rd][0];
-assign rs_q      = q[rs][0];
-assign rs_q_next = q[rs][1];
-assign rt_q      = q[rt][0];
-
-genvar g;
-generate
-for (g = 0; g < N_PADDED; g = g + 1) begin: loop_gprs
-	if (g >= N) begin: gpr_tieoff
-
-		assign q[g] = {W{1'b0}};
-
-	end else begin: gpr_shifter
-
-		// Recirculate unless register is addressed as rd.
-		wire qr;
-		assign d[g] = rd_wen && rd == g ? rd_d : qr;
-
-		whisk_shiftreg_right #(
-			.W (W)
-		) reg_u (
-			.clk   (clk),
-			.dl    (d[g]),
-			.qr    (qr),
-			.q_all (q[g])
-		);
-
-	end
-end
-endgenerate
-
-endmodule
-
-// ============================================================================
-// Module whisk_shiftreg_leftright: a shift register that always shifts left
-// or right each cycle.
-// ============================================================================
-
-// Note there is no enable because the underlying scan flops do not have an
-// enable (there is an enable version, but it's larger, and more routing
-// required!). If you don't want to shift, just shift back and forth for an
-// even number of cycles, or do a full loop :)
-//
-// dl and ql are the leftmost inputs and outputs. If l_nr is low (right), ql
-// becomes dl on every posedge of clk. (Yes, it's confusing!)
-//
-// dr and qr are the rightmost inputs and outputs. If l_nr is high (left), qr
-// becomes dr on every posedge of clk.
-
-module whisk_shiftreg_leftright #(
-	parameter W = 16
-) (
-	input  wire         clk,
-	input  wire         l_nr,
-	input  wire         dl,
-	input  wire         dr,
-	output wire         ql,
-	output wire         qr,
-	output wire [W-1:0] q_all
-);
-
-wire [W+1:0] chain_q;
-
-assign chain_q[0    ] = dr;
-assign chain_q[W + 1] = dl;
-
-assign qr    = chain_q[1];
-assign ql    = chain_q[W];
-assign q_all = chain_q[W:1];
-
-genvar g;
-generate
-for (g = 1; g < W + 1; g = g + 1) begin: shift_stage
-	// Shift-to-left means select the input to your right, and vice versa.
-	whisk_flop_scanmux flop_u (
-		.clk (clk),
-		.sel (l_nr),
-		.d   ({chain_q[g - 1], chain_q[g + 1]}),
-		.q   (chain_q[g])
-	);
-end
-endgenerate
-
-endmodule
-
-// ============================================================================
-// Module whisk_shiftreg_right: register that only shifts right, like Zoolander
-// ============================================================================
-
-// Cost per bit is lower than whisk_shiftreg_leftright
-
-module whisk_shiftreg_right #(
-	parameter W = 16
-) (
-	input  wire         clk,
-	input  wire         dl,
-	output wire         qr,
-	output reg  [W-1:0] q_all
-);
-
-always @ (posedge clk) begin
-	q_all <= {dl, q_all[W-1:1]};
-end
-
-assign qr = q_all[0];
-
-endmodule
-
-// ============================================================================
-// Module whisk_flop_scanmux: a flop with a mux on its input. Usually reserved
-// for DFT scan insertion, but we don't need that where we're going >:)
-// ============================================================================
-
-module whisk_flop_scanmux (
-	input  wire       clk,
-	input  wire       sel,
-	input  wire [1:0] d,
-	output wire       q
-);
-
-`ifdef WHISK_CELLS_SKY130
-
-// (scanchain in TT2 uses sky130_fd_sc_hd__sdfxtp, a simple flop with scan
-// mux. An enable version, sky130_fd_sc_hd__sedfxtp, is also available, but
-// this is significantly larger. Instantiate the unit-drive version because
-// we have a ridiculously long clock period; not sure whether the backend is
-// allowed to change the drive.)
-
-sky130_fd_sc_hd__sdfxtp_1 sdff_u (
-	.CLK        (clk),
-	.D          (d[0]),
-	.SCD        (d[1]),
-	.SCE        (sel),
-	.Q          (q),
-	.VPWR       (1'b1),
-	.VGND       (1'b0)
-);
-
-`else
-
-// Synthesisable model
-
-reg q_r;
-always @ (posedge clk) begin
-	q_r <= d[sel];
-end
-
-assign q = q_r;
-
-`endif
-
-endmodule
-
-// ============================================================================
-// Module whisk_spi_serdes: handle the timing of the SPI interface, and
-// provide a slightly abstracted interface to the Whisk core
-// ============================================================================
-
-// Note the assumption in the core is that if it asserts the last address bit
-// by the end of cycle k then it can sample the first data bit at the end of
-// cycle k + 2.
-//
-// - clk posedge k: outputs are registered and go straight into scan chain
-// - clk negedge k: SCK rising edge for last address bit is launched into scan chain
-// - clk posedge k + 1: SCK falling edge following last address bit is launched into scan chain
-// - clk negedge k + 1: sample taken at falling SCK edge comes back through scan
-// - clk posedge k + 2: sample taken at SCK rising edge comes back through scan
-//
-// Unfortunately the sample coming back is not meaningfully constrained with
-// respect to clk, so we have some options to shmoo things around. The winner
-// is probably to launch our outputs a half cycle earlier (on the negedge) so
-// that the input is stable at the point the core samples it on its posedge.
-// This creates a half cycle path in the core, but the clock period is long
-// so we don't care. This is the default.
-//
-// Note without the scan problems the core's assumption about delay would be a
-// reasonable one.
-
-module whisk_spi_serdes(
-	input  wire       clk,
-	input  wire       rst_n,
-
-	// Core
-	input  wire       sdo,
-	input  wire       sck_en,
-	input  wire       csn,
-	output wire       sdi,
-
-	// IOs
-	output wire       padout_sck,
-	output wire       padout_csn,
-	output wire       padout_sdo,
-	input  wire       padin_sdi,
-
-	input  wire       padin_retime_mem_out,
-	input  wire [1:0] padin_retime_mem_in
-);
-
-// ----------------------------------------------------------------------------
-// Output paths
-
-// There are multiple through-paths from the clock input to SPI outputs
-// (*mostly* via DFF CK-to-Q) and these should fully settle between the scan
-// input latches going transparent, and the outputs being registered back out
-// into the scan chain. We can't add IO constraints, but there are plenty of
-// wait states in the scan chain driver around this point. Hopefully on TT3
-// the scan chain stuff will go away and we can build a normal SPI
-// interface.
-
-reg sdo_pos_r;
-reg sck_en_pos_r;
-reg csn_pos_r;
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_pos_r <= 1'b0;
-		sck_en_pos_r <= 1'b1;
-		csn_pos_r <= 1'b0;
-	end else begin
-		sdo_pos_r <= sdo;
-		sck_en_pos_r <= csn;
-		csn_pos_r <= sck_en;
-	end
-end
-
-// Through-path for clock input to SCK output. This *will* glitch, but gating
-// cell not required for TT2, as this signal is sampled by the scan flops at
-// the tile output.
-wire padout_sck_p = sck_en_pos_r && !clk;
-
-// Very dirty option to advance all outputs by a half cycle.
-
-reg sdo_neg_r;
-reg sck_en_neg_r;
-reg csn_neg_r;
-
-always @ (negedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_neg_r <= 1'b0;
-		csn_neg_r <= 1'b1;
-		sck_en_neg_r <= 1'b0;
-	end else begin
-		sdo_neg_r <= sdo;
-		csn_neg_r <= csn;
-		sck_en_neg_r <= sck_en;
-	end
-end
-
-wire padout_sck_n = sck_en_neg_r && clk;
-
-assign padout_sdo = padin_retime_mem_out ? sdo_pos_r : sdo_neg_r;
-assign padout_csn = padin_retime_mem_out ? csn_pos_r : csn_neg_r;
-// Literally a behavioural mux on a clock lmao
-assign padout_sck = padin_retime_mem_out ? padout_sck_p : padout_sck_n;
-
-// ----------------------------------------------------------------------------
-// Input paths
-
-// 4 options:
-// - 0: Nothing
-// - 1: Some delay buffers
-// - 2: An active-high latch after delay buffers
-// - 3: A negedge flop
-
-wire padin_sdi_delay;
-`ifdef WHISK_CELLS_SKY130
-wire [2:0] padin_sdi_delay_int;
-sky130_fd_sc_hd__dlymetal6s6s_1 delbuf[3:0] (
-	.A    ({padin_sdi_delay_int, padin_sdi}),
-	.X    ({padin_sdi_delay, padin_sdi_delay_int}),
-	.VPWR (1'b1),
-	.VGND (1'b0)
-);
-`else
-assign padin_sdi_delay = padin_sdi;
-`endif
-
-wire padin_sdi_delay = padin_sdi;
-
-reg sdi_latch;
-
-always @ (*) begin
-	if (clk) begin
-		sdi_latch <= padin_sdi_delay;
-	end
-end
-
-reg sdi_negedge;
-
-always @ (negedge clk) begin
-	sdi_negedge <= padin_sdi;
-end
-
-wire [3:0] sdi_retime_opt = {
-	sdi_negedge,
-	sdi_latch,
-	padin_sdi_delay,
-	padin_sdi
-};
-
-assign sdi = sdi_retime_opt[padin_retime_mem_in];
-
-endmodule
-
-// ============================================================================
-// Module whisk_ioport_serdes: similar to whisk_spi_serdes, but for the
-// shift-register-based IO port.
-// ============================================================================
-
-module whisk_ioport_serdes(
-	input  wire clk,
-	input  wire rst_n,
-
-	// Core
-	input  wire sdo,
-	input  wire sck_en,
-	input  wire latch_i,
-	input  wire latch_o,
-	output wire sdi,
-
-	// IOs
-	output wire padout_sdo,
-	output wire padout_sck,
-	output wire padout_latch_i,
-	output wire padout_latch_o,
-	input  wire padin_sdi
-);
-
-// ----------------------------------------------------------------------------
-// Output paths
-
-reg sdo_r;
-reg sck_en_r;
-reg latch_i_r;
-reg latch_o_r;
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_r <= 1'b0;
-		sck_en_r <= 1'b0;
-		latch_i_r <= 1'b0;
-		latch_o_r <= 1'b0;
-	end else begin
-		sdo_r <= sdo;
-		sck_en_r <= sck_en;
-		latch_i_r <= latch_i;
-		latch_o_r <= latch_o;
-	end
-end
-
-assign padout_sdo = sdo_r;
-assign padout_latch_i = latch_i_r;
-assign padout_latch_o = latch_o_r;
-
-// Again, no clock gating cell for TT2, but must revisit in future.
-assign padout_sck = sck_en_r && !clk;
-
-// ----------------------------------------------------------------------------
-// Input paths
-
-assign sdi = padin_sdi;
-
-endmodule
-
-// ============================================================================
-//
-//           _     _     _
-//          | |   (_)   | |
-// __      _| |__  _ ___| | __
-// \ \ /\ / / '_ \| / __| |/ /
-//  \ V  V /| | | | \__ \   <
-//   \_/\_/ |_| |_|_|___/_|\_\
-//
-//
-// When I was 16 I designed a 7400-series breadboard processor called Fork,
-// with a language called Spoon. Now I'm 26 and I'm designing a processor
-// called Whisk. I wonder what I'll do when I grow up.
-//
-// Many mistakes were made in this ISA. What did you think? My aim with this
-// version of Whisk is to run enough software to discover exactly why my
-// instruction set is bad. Hopefully Tiny Tapeout 3 will bring faster IOs,
-// with 2D muxing instead of a scan chain, and then I can try getting some
-// serious software running on Whisk v2, at a few MHz instead of 12 kHz.
diff --git a/verilog/rtl/092_whisk.v b/verilog/rtl/092_whisk.v
deleted file mode 100644
index 704975f..0000000
--- a/verilog/rtl/092_whisk.v
+++ /dev/null
@@ -1,1214 +0,0 @@
-// ============================================================================
-// Whisk: a 16-bit bit-serial RISC processor (c) Luke Wren 2022
-// SPDX-License-Identifier: Apache-2.0
-// ============================================================================
-
-// Whisk is a 16-bit bit-serial processor, with external SPI SRAM interface,
-// designed in a hurry for Tiny Tapeout 2. See README.md for an overview of
-// the instruction set. Supporting hardware:
-//
-// - SPI SRAM with sequential mode and 16-bit addressing, e.g. Microchip
-//   23K256T-I (32 kiB SRAM)
-//
-// - One 8-bit parallel-to-serial shift register, for input port
-//
-// - Two 8-bit serial-to-parallel shift registers, for output port
-//
-// - A host device capable of loading the SPI SRAM, setting it to sequential
-//   mode, and releasing Whisk's reset. I'll probably use a Pico.
-//
-// There will be a board with all of these components ready for bringup, and
-// it will be added to this repository (also I will probably make a few of
-// them, and will gladly send you one if you ask). However this will not be
-// done before tapeout, as I started this project a week before the
-// deadline!
-
-`ifdef WHISK_DEFAULT_NETTYPE_NONE
-`default_nettype none
-`endif
-
-`ifndef WHISK_NO_CELLS
-`define WHISK_CELLS_SKY130
-`endif
-
-// ============================================================================
-// Module wren6991_whisk_tt2_io_wrapper: Top level for TT2 synthesis.
-// instantiate whisk_top, and map named ports to numbered TT2 inputs/outputs
-// ============================================================================
-
-module wren6991_whisk_tt2_io_wrapper (
-	input  wire [7:0] io_in,
-	output wire [7:0] io_out
-);
-
-// Global signals
-wire io_clk = io_in[0];
-wire io_rst_n = io_in[1];
-
-// SPI memory interface
-wire io_mem_sdi = io_in[2];
-
-wire io_mem_csn;
-wire io_mem_sck;
-wire io_mem_sdo;
-
-assign io_out[0] = io_mem_csn;
-assign io_out[1] = io_mem_sck;
-assign io_out[2] = io_mem_sdo;
-
-wire       io_retime_mem_out = io_in[4];
-wire [1:0] io_retime_mem_in  = io_in[6:5];
-wire       io_retime_ioport_out = io_in[7];
-
-// IO port (shift register interface)
-wire io_ioport_sdi = io_in[3];
-
-wire io_ioport_sck;
-wire io_ioport_sdo;
-wire io_ioport_latch_i;
-wire io_ioport_latch_o;
-
-
-assign io_out[3] = io_ioport_sck;
-assign io_out[4] = io_ioport_sdo;
-assign io_out[5] = io_ioport_latch_i;
-assign io_out[6] = io_ioport_latch_o;
-
-// Be a good neighbour
-assign io_out[7] = 1'b0;
-
-whisk_top top_u (
-	.io_clk               (io_clk),
-	.io_rst_n             (io_rst_n),
-
-	.io_mem_sdi           (io_mem_sdi),
-	.io_mem_csn           (io_mem_csn),
-	.io_mem_sck           (io_mem_sck),
-	.io_mem_sdo           (io_mem_sdo),
-
-	.io_retime_mem_out    (io_retime_mem_out),
-	.io_retime_mem_in     (io_retime_mem_in),
-	.io_retime_ioport_out (io_retime_mem_out),
-
-	.io_ioport_sdi        (io_ioport_sdi),
-	.io_ioport_sck        (io_ioport_sck),
-	.io_ioport_sdo        (io_ioport_sdo),
-	.io_ioport_latch_i    (io_ioport_latch_i),
-	.io_ioport_latch_o    (io_ioport_latch_o)
-);
-
-endmodule
-
-// ============================================================================
-// Module whisk_top: instantiate the CPU core together with the SPI mem
-// serdes and IO port serdes.
-// ============================================================================
-
-module whisk_top (
-	input  wire       io_clk,
-	input  wire       io_rst_n,
-
-	input  wire       io_mem_sdi,
-	output wire       io_mem_csn,
-	output wire       io_mem_sck,
-	output wire       io_mem_sdo,
-
-	input  wire       io_retime_mem_out,
-	input  wire [1:0] io_retime_mem_in,
-	input  wire       io_retime_ioport_out,
-
-	input  wire       io_ioport_sdi,
-	output wire       io_ioport_sck,
-	output wire       io_ioport_sdo,
-	output wire       io_ioport_latch_i,
-	output wire       io_ioport_latch_o
-);
-
-// ----------------------------------------------------------------------------
-// Clock/reset wrangling
-
-// Don't buffer the clock -- seems like the scripts define a clock on io_in[0]?
-wire clk = io_clk;
-
-// Synchronise reset removal to clk
-reg [1:0] reset_sync;
-wire rst_n = reset_sync[1];
-
-always @ (posedge clk or negedge io_rst_n) begin
-	if (!io_rst_n) begin
-		reset_sync <= 2'd00;
-	end else begin
-		reset_sync <= ~(~reset_sync << 1);
-	end
-end
-
-// ----------------------------------------------------------------------------
-// Processor instantiation
-
-wire mem_sck_en_next;
-wire mem_sdo_next;
-wire mem_csn_next;
-wire mem_sdi_prev;
-
-wire ioport_sck_en_next;
-wire ioport_sdo_next;
-wire ioport_sdi_prev;
-wire ioport_latch_i_next;
-wire ioport_latch_o_next;
-
-whisk_cpu cpu (
-	.clk                 (clk),
-	.rst_n               (rst_n),
-
-	.mem_sck_en_next     (mem_sck_en_next),
-	.mem_sdo_next        (mem_sdo_next),
-	.mem_csn_next        (mem_csn_next),
-	.mem_sdi_prev        (mem_sdi_prev),
-
-	.ioport_sck_en_next  (ioport_sck_en_next),
-	.ioport_sdo_next     (ioport_sdo_next),
-	.ioport_sdi_prev     (ioport_sdi_prev),
-	.ioport_latch_i_next (ioport_latch_i_next),
-	.ioport_latch_o_next (ioport_latch_o_next)
-);
-
-// ----------------------------------------------------------------------------
-// Serdes (IO registers)
-
-whisk_spi_serdes mem_serdes_u (
-	.clk                  (clk),
-	.rst_n                (rst_n),
-
-	.sdo                  (mem_sdo_next),
-	.sck_en               (mem_sck_en_next),
-	.csn                  (mem_csn_next),
-	.sdi                  (mem_sdi_prev),
-
-	.padout_sck           (io_mem_sck),
-	.padout_csn           (io_mem_csn),
-	.padout_sdo           (io_mem_sdo),
-	.padin_sdi            (io_mem_sdi),
-
-	.padin_retime_mem_out (io_retime_mem_out),
-	.padin_retime_mem_in  (io_retime_mem_in),
-);
-
-whisk_ioport_serdes io_serdes_u (
-	.clk                     (clk),
-	.rst_n                   (rst_n),
-
-	.sdo                     (ioport_sdo_next),
-	.sck_en                  (ioport_sck_en_next),
-	.latch_i                 (ioport_latch_i_next),
-	.latch_o                 (ioport_latch_o_next),
-	.sdi                     (ioport_sdi_prev),
-
-	.padout_sdo              (io_ioport_sdo),
-	.padout_sck              (io_ioport_sck),
-	.padout_latch_i          (io_ioport_latch_i),
-	.padout_latch_o          (io_ioport_latch_o),
-	.padin_sdi               (io_ioport_sdi),
-
-	.padin_retime_ioport_out (io_retime_ioport_out)
-);
-
-endmodule
-
-// ============================================================================
-// Module whisk_cpu: top-level for the Whisk processor, minus the IO wrapper
-// and the SPI/IOPORT serdes
-// ============================================================================
-
-module whisk_cpu (
-	input  wire       clk,
-	input  wire       rst_n,
-
-	// SPI SRAM interface
-	output wire       mem_sck_en_next,
-	output wire       mem_sdo_next,
-	output wire       mem_csn_next,
-	input  wire       mem_sdi_prev,
-
-	// Shift registers for IO port
-	output wire       ioport_sck_en_next,
-	output wire       ioport_sdo_next,
-	input  wire       ioport_sdi_prev,
-	output wire       ioport_latch_i_next,
-	output wire       ioport_latch_o_next
-);
-
-// ----------------------------------------------------------------------------
-// Constants
-
-// Machine size
-localparam       W_INSTR        = 16;
-localparam       W_DATA         = 16;
-localparam       N_REGS         = 6;
-
-// Instruction layout
-localparam       INSTR_OP_LSB   = 0;
-localparam       INSTR_OP_MSB   = 3;
-localparam       INSTR_COND_LSB = 4;
-localparam       INSTR_COND_MSB = 6;
-localparam       INSTR_RT_LSB   = 7;
-localparam       INSTR_RT_MSB   = 9;
-localparam       INSTR_RS_LSB   = 10;
-localparam       INSTR_RS_MSB   = 12;
-localparam       INSTR_RD_LSB   = 13;
-localparam       INSTR_RD_MSB   = 15;
-
-// Major opcodes (instr[3:0])
-localparam [3:0] OP_ADD         = 4'h0; // rd = rs +  rt
-localparam [3:0] OP_SUB         = 4'h1; // rd = rs -  rt
-localparam [3:0] OP_AND         = 4'h2; // rd = rs &  rt
-localparam [3:0] OP_ANDN        = 4'h3; // rd = rs & ~rt
-localparam [3:0] OP_OR          = 4'h4; // rd = rs |  rt
-localparam [3:0] OP_SHIFT       = 4'h5; // Minor opcode in rt
-localparam [3:0] OP_INOUT       = 4'h6; // Minor opcode in rs
-
-localparam [3:0] OP_LB          = 4'h8; // rd = mem[rs     ];
-localparam [3:0] OP_LH_IA       = 4'h9; // rd = mem[rs     ]; rs += rt;
-localparam [3:0] OP_LH_ADD      = 4'ha; // rd = mem[rs + rt];
-localparam [3:0] OP_LH_IB       = 4'hb; // rd = mem[rs + rt]; rs += rt;
-
-localparam [3:0] OP_SB          = 4'hc; // mem[rs     ] = rd;
-localparam [3:0] OP_SH_IA       = 4'hd; // mem[rs     ] = rd; rs += rt;
-localparam [3:0] OP_SH_ADD      = 4'he; // mem[rs + rt] = rd;
-localparam [3:0] OP_SH_IB       = 4'hf; // mem[rs + rt] = rd; rs += rt;
-
-// Minor opcodes (rt)
-localparam [2:0] OP2_SRL        = 3'h0;
-localparam [2:0] OP2_SRA        = 3'h1;
-localparam [2:0] OP2_ROR        = 3'h2;
-localparam [2:0] OP2_SLL        = 3'h4;
-
-// Minor opcodes (rs)
-localparam [2:0] OP2_IN         = 3'h0;
-localparam [2:0] OP2_OUT        = 3'h4;
-
-// ----------------------------------------------------------------------------
-// Main control state machine
-
-reg [W_INSTR-1:0] instr;
-
-wire [INSTR_OP_MSB  -INSTR_OP_LSB  :0] instr_op;
-wire [INSTR_COND_MSB-INSTR_COND_LSB:0] instr_cond;
-wire [INSTR_RT_MSB  -INSTR_RT_LSB  :0] instr_rt;
-wire [INSTR_RS_MSB  -INSTR_RS_LSB  :0] instr_rs;
-wire [INSTR_RD_MSB  -INSTR_RD_LSB  :0] instr_rd;
-
-assign {instr_rd, instr_rs, instr_rt, instr_cond, instr_op} = instr;
-
-wire instr_op_ls      = instr_op[3]; // Whether an instruction is a load/store
-wire instr_op_st_nld  = instr_op[2]; // Whether a load/store is a load or store
-wire instr_op_ls_suma = instr_op[1]; // Whether sum is used for address
-wire instr_op_ls_sumr = instr_op[0]; // Whether sum is written back to register
-
-reg [3:0] bit_ctr;
-reg [2:0] state;
-reg       instr_cond_true;
-reg       instr_has_imm_operand;
-
-
-// Note there is a 2 cycle delay from issuing a bit on SDO to getting a bit
-// back on SDI. This is handled with a 1-cycle gap after issuing a read
-// address, so that e.g. S_FETCH always has the first instruction bit
-// available on the first cycle.
-
-localparam [2:0] S_FETCH      = 3'd0; // Sample 16 instr bits, increment PC
-localparam [2:0] S_EXEC       = 3'd1; // Loop all GPRs, write one GPR
-localparam [2:0] S_PC_NONSEQ0 = 3'd2; // Issue cmd, then issue 1 PC bit
-localparam [2:0] S_PC_NONSEQ1 = 3'd3; // Issue rest of PC, then 1 cyc delay
-localparam [2:0] S_LS_ADDR0   = 3'd4; // Deferred LS SPI cmd following immediate
-localparam [2:0] S_LS_ADDR1   = 3'd5; // Issue addr then, if load, 1 cyc delay
-localparam [2:0] S_LS_DATA    = 3'd6; // Issue store data, or sample load data
-localparam [2:0] S_SKIP_IMM   = 3'd7; // Skip immediate following false condition
-
-reg [2:0] state_nxt_wrap;
-reg [2:0] state_nxt;
-
-always @ (*) begin
-	state_nxt_wrap = state;
-	case (state)
-		S_FETCH: begin
-			if (!instr_cond_true) begin
-				if (instr_has_imm_operand) begin
-					state_nxt_wrap = S_SKIP_IMM;
-				end else begin
-					state_nxt_wrap = S_FETCH;
-				end
-			end else begin
-				state_nxt_wrap = S_EXEC;
-			end
-		end
-		S_EXEC: begin
-			if (instr_op_ls && instr_has_imm_operand) begin
-				// Command was deferred due to immediate read keeping SPI busy
-				state_nxt_wrap = S_LS_ADDR0;
-			end else if (instr_op_ls) begin
-				// Command was issued concurrently, skip straight to address issue
-				state_nxt_wrap = S_LS_ADDR1;
-			end else if (instr_rd == 3'd7) begin
-				state_nxt_wrap = S_PC_NONSEQ0;
-			end else begin
-				state_nxt_wrap = S_FETCH;
-			end
-		end
-		S_PC_NONSEQ0: begin
-			state_nxt_wrap = S_PC_NONSEQ1;
-		end
-		S_PC_NONSEQ1: begin
-			if (!instr_cond_true) begin
-				// Have just been reset, instr is invalid
-				state_nxt_wrap = S_FETCH;
-			end else begin
-				state_nxt_wrap = S_FETCH;
-			end
-		end
-		S_LS_ADDR0: begin
-			state_nxt_wrap = S_LS_ADDR1;
-		end
-		S_LS_ADDR1: begin
-			state_nxt_wrap = S_LS_DATA;
-		end
-		S_LS_DATA: begin
-			state_nxt_wrap = S_PC_NONSEQ0;
-		end
-		S_SKIP_IMM: begin
-			state_nxt_wrap = S_FETCH;
-		end
-	endcase
-	state_nxt   = &bit_ctr ? state_nxt_wrap   : state;
-end
-
-// Start of day:
-//
-// - The only resettable flops are state, bit_ctr, and instr_cond_true.
-//
-// - We reset state/bit_ctr to a nonsequential fetch, and reset
-//   instr_cond_true=0 (usually unreachable)
-//
-// - instr_cond_true=0 masks the fetch address to 0, regardless of PC
-//
-// - The first instruction must be `add pc, zero, #4` to initialise PC
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		state <= S_PC_NONSEQ0;
-		bit_ctr <= 4'h0;
-	end else begin
-		state <= state_nxt;
-		bit_ctr <= bit_ctr + 4'h1;
-	end
-end
-
-// ----------------------------------------------------------------------------
-// Instruction shifter and early decode
-
-always @ (posedge clk) begin
-	if (state == S_FETCH) begin
-		instr <= {mem_sdi_prev, instr[15:1]};
-	end
-end
-
-// Decode condition and imm operand flags as the instruction comes in, so we
-// can use them to steer the state machine at the end of S_FETCH.
-
-reg instr_has_imm_operand_nxt;
-reg instr_cond_true_nxt;
-
-// From ALU:
-wire [7:0] condition_vec8;
-
-always @ (*) begin
-	instr_has_imm_operand_nxt = instr_has_imm_operand;
-	instr_cond_true_nxt = instr_cond_true;
-
-	if (instr_has_imm_operand && !instr_cond_true) begin
-		// In this case we must be in S_FETCH. Hold instr_cond_true for an
-		// additional fetch cycle so that the immediate operand is also
-		// dumped, but clear the operand flag so we don't loop forever.
-		if (&bit_ctr) begin
-			instr_has_imm_operand_nxt = 1'b0;
-		end
-	end else if (state == S_FETCH) begin
-		if (bit_ctr == (INSTR_RT_MSB + 1)) begin
-			// Grab rt as it goes past (this is why rt is not the MSBs!)
-			instr_has_imm_operand_nxt = instr[W_INSTR-1 -: 3] == 3'd7;
-		end
-		if (bit_ctr == (INSTR_COND_MSB + 1)) begin
-			// Decode condition as it goes past
-			instr_cond_true_nxt = condition_vec8[instr[W_INSTR-1 -: 3]];
-		end
-	end
-end
-
-// instr_cond_true must reset to 0, because we use it to recognise the first
-// fetch after reset. We don't care about instr_has_imm_operand, because it
-// is initialised during S_FETCH before first use.
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		instr_cond_true <= 1'b0;
-	end else begin
-		instr_cond_true <= instr_cond_true_nxt;
-	end
-end
-
-always @ (posedge clk) begin
-	instr_has_imm_operand <= instr_has_imm_operand_nxt;
-end
-
-// ----------------------------------------------------------------------------
-// Register file
-
-wire reg_rd_qr;
-wire reg_rs_qr, reg_rs_qr_next;
-wire reg_rt_qr;
-
-wire alu_result;
-
-wire writeback_wen =
-	state == S_EXEC && !(instr_op_ls && !instr_op_ls_sumr)  ||
-	state == S_LS_DATA && !instr_op_st_nld;
-
-wire writeback_data = alu_result;
-
-wire [INSTR_RD_MSB-INSTR_RD_LSB:0] writeback_reg =
-	instr_op_ls && state != S_LS_DATA ? instr_rs : instr_rd;
-
-whisk_regfile #(
-	.W (W_DATA),
-	.N (N_REGS)
-) regfile_u (
-	.clk        (clk),
-
-	.rd         (writeback_reg),
-	.rd_q       (reg_rd_qr),
-	.rd_wen     (writeback_wen),
-	.rd_d       (writeback_data),
-
-	.rs         (instr_rs),
-	.rs_q       (reg_rs_qr),
-	.rs_q_next  (reg_rs_qr_next),
-
-	.rt         (instr_rt),
-	.rt_q       (reg_rt_qr)
-);
-
-// ----------------------------------------------------------------------------
-// Program counter
-
-wire pc_dl;
-wire pc_qr;
-
-wire [15:0] pc_q_all;
-wire pc_qr_next = pc_q_all[1];
-
-whisk_shiftreg_right #(
-	.W (16)
-) pc_u (
-	.clk   (clk),
-	.dl    (pc_dl),
-	.q_all (pc_q_all),
-	.qr    (pc_qr)
-);
-
-wire pc_increment =
-	state == S_FETCH ||
-	state == S_EXEC && instr_has_imm_operand ||
-	state == S_SKIP_IMM;
-
-reg pc_ci;
-wire pc_co, pc_sum;
-
-assign {pc_co, pc_sum} = pc_qr + (~|bit_ctr[3:1] ? bit_ctr[0] && pc_increment : pc_ci);
-
-always @ (posedge clk) begin
-	pc_ci <= pc_co;
-end
-
-wire rd_is_pc = instr_rd == 3'd7;
-
-assign pc_dl =
-	state == S_EXEC    && rd_is_pc                     ? alu_result   :
-	state == S_LS_DATA && rd_is_pc && !instr_op_st_nld ? mem_sdi_prev : pc_sum;
-
-// ----------------------------------------------------------------------------
-// ALU
-
-wire alu_op_s =
-	instr_rs == 3'd7 ? pc_qr        : reg_rs_qr;
-
-wire alu_op_s_next =
-	instr_rs == 3'd7 ? pc_qr_next   : reg_rs_qr_next;
-
-wire alu_op_t =
-	instr_rt == 3'd7 ? mem_sdi_prev : reg_rt_qr;
-
-reg alu_ci;
-wire [1:0] alu_add = alu_op_s +  alu_op_t + (~|bit_ctr ? 1'b0 : alu_ci);
-wire [1:0] alu_sub = alu_op_s + !alu_op_t + (~|bit_ctr ? 1'b1 : alu_ci);
-
-// Left shift uses the carry flop as a 1-cycle delay, counter to the
-// register's rightward rotation. Right shift looks ahead to advance its
-// rotation. The final carry flag is the bit shifted "out of" the register.
-
-wire [1:0] alu_shift_l = {
-	alu_op_s,
-	|alu_ci && |bit_ctr
-};
-
-// Rotate uses the carry to remember prior LSB and insert it at MSB.
-// (Convenient because prior LSB is already the carry flag.)
-wire alu_shift_r_last_bit =
-	instr_rt[1] ? alu_ci : alu_op_s && instr_rt[0];
-
-wire [1:0] alu_shift_r = {
-	|bit_ctr ? alu_ci                  : alu_op_s,
-	&bit_ctr ? alu_shift_r_last_bit    : alu_op_s_next
-};
-
-// Carry is an all-ones flag for bitwise ops
-wire alu_bitop_no_c =
-	instr_op == OP_AND    ? alu_op_s &&  alu_op_t :
-	instr_op == OP_ANDN   ? alu_op_s && !alu_op_t : alu_op_s ||  alu_op_t;
-
-wire alu_bit_co = alu_bitop_no_c && (alu_ci || ~|bit_ctr);
-
-wire [1:0] alu_bitop = {alu_bit_co, alu_bitop_no_c};
-
-// Byte loads must be zero- or sign-extended. Use the carry to
-// propagate the sign.
-wire instr_op_ls_byte = !(instr_op_ls_sumr || instr_op_ls_suma);
-wire instr_op_ls_sbyte = instr_rt[2];
-
-wire [1:0] alu_load = {
-	bit_ctr[3]                     ? alu_ci                      : mem_sdi_prev,
-	bit_ctr[3] && instr_op_ls_byte ? alu_ci && instr_op_ls_sbyte : mem_sdi_prev
-};
-
-wire alu_co;
-assign {alu_co, alu_result} =
-	state == S_LS_DATA                   ? alu_load         :
-	instr_op_ls                          ? alu_add          :
-	instr_op == OP_ADD                   ? alu_add          :
-	instr_op == OP_SUB                   ? alu_sub          :
-	instr_op == OP_AND                   ? alu_bitop        :
-	instr_op == OP_ANDN                  ? alu_bitop        :
-	instr_op == OP_OR                    ? alu_bitop        :
-	instr_op == OP_SHIFT &&  instr_rt[2] ? alu_shift_l      :
-	instr_op == OP_SHIFT && !instr_rt[2] ? alu_shift_r      :
-	instr_op == OP_INOUT                 ? ioport_sdi_prev  : alu_add;
-
-always @ (posedge clk) begin
-	alu_ci <= alu_co;
-end
-
-// ----------------------------------------------------------------------------
-// Flags
-
-reg flag_z;
-reg flag_c;
-reg flag_n;
-
-wire update_flags = (state == S_EXEC || state == S_LS_DATA) && ~|instr_cond;
-
-always @ (posedge clk) begin
-	if (update_flags) begin
-		flag_z <= (flag_z || ~|bit_ctr) && !alu_result;
-		flag_n <= alu_result;
-		flag_c <= alu_co;
-	end
-end
-
-assign condition_vec8 = {
-	!flag_z, flag_z,
-	!flag_c, flag_c,
-	!flag_n, flag_n,
-	1'b1,    1'b1
-};
-
-// ----------------------------------------------------------------------------
-// Address register
-
-// Captures address calculations LSB-first and then replays them MSB-first.
-
-wire        ar_l_nr;
-wire        ar_dl;
-wire        ar_dr;
-wire        ar_ql;
-wire        ar_qr;
-
-// Need to look ahead by one bit to get correct timing for read addresses:
-wire [15:0] ar_q_all;
-wire        ar_ql_next = ar_q_all[14];
-
-whisk_shiftreg_leftright #(
-	.W (16)
-) ar_u (
-	.clk   (clk),
-	.l_nr  (ar_l_nr),
-	.dl    (ar_dl),
-	.ql    (ar_ql),
-	.dr    (ar_dr),
-	.qr    (ar_qr),
-	.q_all (ar_q_all)
-);
-
-// Shift left when replaying addresses. Also shift left in LS_ADDR0 to
-// recirculate the address generated during EXEC for use in LS_ADDR1.
-assign ar_l_nr =
-	state == S_LS_ADDR1 ||
-	state == S_PC_NONSEQ1 ||
-	state == S_LS_ADDR0;
-
-assign ar_dr = ar_ql;
-
-assign ar_dl =
-	state == S_PC_NONSEQ0 ? pc_qr   :
-	instr_op_ls_suma      ? alu_add : reg_rs_qr;
-// ----------------------------------------------------------------------------
-// SPI controls
-
-// Deassert CSn before issuing a nonsequential address.
-
-// Note LS_ADDR0 state is skipped if we are able to issue from EXEC:
-wire issue_ls_addr_ph0 =
-	state == S_LS_ADDR0 ||
-	state == S_EXEC && instr_op_ls && !instr_has_imm_operand && instr_cond_true;
-
-wire [3:0] spi_cmd_start_cycle =
-	state == S_PC_NONSEQ0 ? 4'h7 :
-	instr_op_st_nld       ? 4'h8 : 4'h7;
-
-assign mem_csn_next = bit_ctr < spi_cmd_start_cycle && (
-	state == S_PC_NONSEQ0 || issue_ls_addr_ph0
-);
-
-// Pedal to the metal on SCK except when pulling CSn for a nonsequential
-// access, or when executing an unskipped instruction without immediate or
-// early address issue. (Also mask for second half of byte accesses.)
-
-wire mem_sck_disable_on_imm =
-	state == (&bit_ctr[3:1] ? S_FETCH : S_EXEC) && instr_cond_true &&
-	!(instr_has_imm_operand || issue_ls_addr_ph0);
-
-wire mem_sck_disable_on_byte_ls =
-	state == S_LS_DATA && instr_op_ls_byte && bit_ctr[3];
-
-assign mem_sck_en_next = !(
-	mem_csn_next ||
-	mem_sck_disable_on_imm ||
-	mem_sck_disable_on_byte_ls
-);
-
-// Store address replays entirely in LS_ADDR1, but load/fetch extend one cycle
-// into previous state, so carefully pick what delay to observe the address
-// with. (Also mask address to zero for very first fetch at start of day.)
-//
-// Note in LS_ADDR0 that we are actually recirculating an address generated in
-// EXEC, because the address issue was deferred due to an immediate read, so
-// this case looks like load-LS_ADDR1 rather than like load-EXEC.
-
-wire mem_spi_addr =
-	!instr_cond_true                        ? 1'b0       :
-	state == S_PC_NONSEQ1                   ? ar_ql_next :
-	state == S_LS_ADDR1 &&  instr_op_st_nld ? ar_ql      :
-	state == S_LS_ADDR1 && !instr_op_st_nld ? ar_ql_next :
-	state == S_LS_ADDR0                     ? ar_ql_next : ar_dl;
-
-// Note: SPI commands are MSB-first (the commands here are 03h and 02h).
-localparam [15:0] SPI_INSTR_READ  = 16'hc000 >> 1;
-localparam [15:0] SPI_INSTR_WRITE = 16'h4000;
-
-wire mem_sdo_ls_addr_ph0 =
-	instr_op_st_nld ? SPI_INSTR_WRITE[bit_ctr] :
-	&bit_ctr        ? mem_spi_addr             : SPI_INSTR_READ[bit_ctr];
-
-assign mem_sdo_next =
-	state == S_PC_NONSEQ0 ? (&bit_ctr ? pc_qr : SPI_INSTR_READ[bit_ctr]) :
-	state == S_PC_NONSEQ1 ? mem_spi_addr                                 :
-	issue_ls_addr_ph0     ? mem_sdo_ls_addr_ph0                          :
-	state == S_LS_ADDR1   ? mem_spi_addr                                 :
-	state == S_LS_DATA    ? (instr_rd == 3'd7 ? pc_qr : reg_rd_qr)       : 1'b0;
-
-// ----------------------------------------------------------------------------
-// IO port
-
-// Expected hardware is a 1x 8-bit PISO, and 2x 8-bit SIPO shift registers:
-//
-// - OUT: Clock out 16 bits from rt[15:0]/imm[15:0], then pulse latch_o high.
-//
-// - IN: Clock 8 bits into rd[15:8], with latch_i low for the first clock.
-//
-// The IN interface is still driven when executing an OUT, with more clocks.
-// Abusable for 6 extra inputs if a second PISO register is chained.
-//
-// rt[13:6] is actually clocked out on an IN, there's just no latch_o pulse.
-// Abusable to drive longer SIPO chains using multiple INs and a final OUT.
-
-wire exec_io_instr = state == S_EXEC && instr_op == OP_INOUT;
-wire io_instr_out = (instr_rs & (OP2_OUT | OP2_IN)) == OP2_OUT;
-
-// The instruction is still valid on the first cycle of FETCH. This lets us
-// latch outputs *after* the last clock pulse, without spending a flop.
-assign ioport_latch_o_next = state == S_FETCH && ~|bit_ctr &&
-	instr_op == OP_INOUT && io_instr_out && instr_cond_true;
-
-assign ioport_latch_i_next = !(exec_io_instr && bit_ctr == 4'h6);
-
-assign ioport_sdo_next = exec_io_instr && alu_op_t;
-
-assign ioport_sck_en_next  = exec_io_instr && (
-	(bit_ctr >= 4'h6 && bit_ctr < 4'he) ||
-	io_instr_out
-);
-
-endmodule
-
-// ============================================================================
-// Module whisk_regfile: a register file of multiple shift registers, with 3
-// read ports (rd/rs/rt) and one write port (rd).
-// ============================================================================
-
-// All registers rotate right by one bit every cycle. No enable, so do things
-// in multiples of 16 cycles. Registers not written to are recirculated.
-//
-// q is the value of the rightmost flop in each register. The rs port also has
-// a q_next value, which taps in one flop from the end, and is required for
-// performing right-shift-by-one in 16 cycles.
-//
-// Out-of-range indices read as 0, and ignore writes.
-
-module whisk_regfile #(
-	parameter W = 16,
-	parameter N = 6
-) (
-	input  wire                 clk,
-
-	input  wire [$clog2(N)-1:0] rd,
-	output wire                 rd_q,
-	input  wire                 rd_wen,
-	input  wire                 rd_d,
-
-	input  wire [$clog2(N)-1:0] rs,
-	output wire                 rs_q,
-	output wire                 rs_q_next,
-
-	input  wire [$clog2(N)-1:0] rt,
-	output wire                 rt_q,
-);
-
-localparam N_PADDED = 1 << $clog2(N);
-
-wire [N-1:0] d;
-wire [N-1:0] d;
-wire [W-1:0] q [N_PADDED-1:0];
-
-assign rd_q      = q[rd][0];
-assign rs_q      = q[rs][0];
-assign rs_q_next = q[rs][1];
-assign rt_q      = q[rt][0];
-
-genvar g;
-generate
-for (g = 0; g < N_PADDED; g = g + 1) begin: loop_gprs
-	if (g >= N) begin: gpr_tieoff
-
-		assign q[g] = {W{1'b0}};
-
-	end else begin: gpr_shifter
-
-		// Recirculate unless register is addressed as rd.
-		wire qr;
-		assign d[g] = rd_wen && rd == g ? rd_d : qr;
-
-		whisk_shiftreg_right #(
-			.W (W)
-		) reg_u (
-			.clk   (clk),
-			.dl    (d[g]),
-			.qr    (qr),
-			.q_all (q[g])
-		);
-
-	end
-end
-endgenerate
-
-endmodule
-
-// ============================================================================
-// Module whisk_shiftreg_leftright: a shift register that always shifts left
-// or right each cycle.
-// ============================================================================
-
-// Note there is no enable because the underlying scan flops do not have an
-// enable (there is an enable version, but it's larger, and more routing
-// required!). If you don't want to shift, just shift back and forth for an
-// even number of cycles, or do a full loop :)
-//
-// dl and ql are the leftmost inputs and outputs. If l_nr is low (right), ql
-// becomes dl on every posedge of clk. (Yes, it's confusing!)
-//
-// dr and qr are the rightmost inputs and outputs. If l_nr is high (left), qr
-// becomes dr on every posedge of clk.
-
-module whisk_shiftreg_leftright #(
-	parameter W = 16
-) (
-	input  wire         clk,
-	input  wire         l_nr,
-	input  wire         dl,
-	input  wire         dr,
-	output wire         ql,
-	output wire         qr,
-	output wire [W-1:0] q_all
-);
-
-wire [W+1:0] chain_q;
-
-assign chain_q[0    ] = dr;
-assign chain_q[W + 1] = dl;
-
-assign qr    = chain_q[1];
-assign ql    = chain_q[W];
-assign q_all = chain_q[W:1];
-
-genvar g;
-generate
-for (g = 1; g < W + 1; g = g + 1) begin: shift_stage
-	// Shift-to-left means select the input to your right, and vice versa.
-	whisk_flop_scanmux flop_u (
-		.clk (clk),
-		.sel (l_nr),
-		.d   ({chain_q[g - 1], chain_q[g + 1]}),
-		.q   (chain_q[g])
-	);
-end
-endgenerate
-
-endmodule
-
-// ============================================================================
-// Module whisk_shiftreg_right: register that only shifts right, like Zoolander
-// ============================================================================
-
-// Cost per bit is lower than whisk_shiftreg_leftright
-
-module whisk_shiftreg_right #(
-	parameter W = 16
-) (
-	input  wire         clk,
-	input  wire         dl,
-	output wire         qr,
-	output reg  [W-1:0] q_all
-);
-
-always @ (posedge clk) begin
-	q_all <= {dl, q_all[W-1:1]};
-end
-
-assign qr = q_all[0];
-
-endmodule
-
-// ============================================================================
-// Module whisk_flop_scanmux: a flop with a mux on its input. Usually reserved
-// for DFT scan insertion, but we don't need that where we're going >:)
-// ============================================================================
-
-module whisk_flop_scanmux (
-	input  wire       clk,
-	input  wire       sel,
-	input  wire [1:0] d,
-	output wire       q
-);
-
-`ifdef WHISK_CELLS_SKY130
-
-// (scanchain in TT2 uses sky130_fd_sc_hd__sdfxtp, a simple flop with scan
-// mux. An enable version, sky130_fd_sc_hd__sedfxtp, is also available, but
-// this is significantly larger. Instantiate the unit-drive version because
-// we have a ridiculously long clock period; not sure whether the backend is
-// allowed to change the drive.)
-
-sky130_fd_sc_hd__sdfxtp_1 sdff_u (
-	.CLK        (clk),
-	.D          (d[0]),
-	.SCD        (d[1]),
-	.SCE        (sel),
-	.Q          (q),
-	.VPWR       (1'b1),
-	.VGND       (1'b0)
-);
-
-`else
-
-// Synthesisable model
-
-reg q_r;
-always @ (posedge clk) begin
-	q_r <= d[sel];
-end
-
-assign q = q_r;
-
-`endif
-
-endmodule
-
-// ============================================================================
-// Module whisk_spi_serdes: handle the timing of the SPI interface, and
-// provide a slightly abstracted interface to the Whisk core
-// ============================================================================
-
-// Note the assumption in the core is that if it asserts the last address bit
-// by the end of cycle k then it can sample the first data bit at the end of
-// cycle k + 2.
-//
-// - clk posedge k: outputs are registered and go straight into scan chain
-// - clk negedge k: SCK rising edge for last address bit is launched into scan chain
-// - clk posedge k + 1: SCK falling edge following last address bit is launched into scan chain
-// - clk negedge k + 1: sample taken at falling SCK edge comes back through scan
-// - clk posedge k + 2: sample taken at SCK rising edge comes back through scan
-//
-// Unfortunately the sample coming back is not meaningfully constrained with
-// respect to clk, so we have some options to shmoo things around. The winner
-// is probably to launch our outputs a half cycle earlier (on the negedge) so
-// that the input is stable at the point the core samples it on its posedge.
-// This creates a half cycle path in the core, but the clock period is long
-// so we don't care. This is the default.
-//
-// Note without the scan problems the core's assumption about delay would be a
-// reasonable one.
-
-module whisk_spi_serdes(
-	input  wire       clk,
-	input  wire       rst_n,
-
-	// Core
-	input  wire       sdo,
-	input  wire       sck_en,
-	input  wire       csn,
-	output wire       sdi,
-
-	// IOs
-	output wire       padout_sck,
-	output wire       padout_csn,
-	output wire       padout_sdo,
-	input  wire       padin_sdi,
-
-	input  wire       padin_retime_mem_out,
-	input  wire [1:0] padin_retime_mem_in
-);
-
-// ----------------------------------------------------------------------------
-// Output paths
-
-// There are multiple through-paths from the clock input to SPI outputs
-// (*mostly* via DFF CK-to-Q) and these should fully settle between the scan
-// input latches going transparent, and the outputs being registered back out
-// into the scan chain. We can't add IO constraints, but there are plenty of
-// wait states in the scan chain driver around this point. Hopefully on TT3
-// the scan chain stuff will go away and we can build a normal SPI
-// interface.
-
-reg sdo_pos_r;
-reg sck_en_pos_r;
-reg csn_pos_r;
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_pos_r <= 1'b0;
-		sck_en_pos_r <= 1'b1;
-		csn_pos_r <= 1'b0;
-	end else begin
-		sdo_pos_r <= sdo;
-		sck_en_pos_r <= csn;
-		csn_pos_r <= sck_en;
-	end
-end
-
-// Through-path for clock input to SCK output. This *will* glitch, but gating
-// cell not required for TT2, as this signal is sampled by the scan flops at
-// the tile output.
-wire padout_sck_p = sck_en_pos_r && !clk;
-
-// Very dirty option to advance all outputs by a half cycle.
-
-reg sdo_neg_r;
-reg sck_en_neg_r;
-reg csn_neg_r;
-
-always @ (negedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_neg_r <= 1'b0;
-		csn_neg_r <= 1'b1;
-		sck_en_neg_r <= 1'b0;
-	end else begin
-		sdo_neg_r <= sdo;
-		csn_neg_r <= csn;
-		sck_en_neg_r <= sck_en;
-	end
-end
-
-wire padout_sck_n = sck_en_neg_r && clk;
-
-assign padout_sdo = padin_retime_mem_out ? sdo_pos_r : sdo_neg_r;
-assign padout_csn = padin_retime_mem_out ? csn_pos_r : csn_neg_r;
-// Literally a behavioural mux on a clock lmao
-assign padout_sck = padin_retime_mem_out ? padout_sck_p : padout_sck_n;
-
-// ----------------------------------------------------------------------------
-// Input paths
-
-// 4 options:
-// - 0: Nothing
-// - 1: Some delay buffers
-// - 2: An active-high latch after delay buffers
-// - 3: A negedge flop
-
-wire padin_sdi_delay;
-`ifdef WHISK_CELLS_SKY130
-wire [2:0] padin_sdi_delay_int;
-sky130_fd_sc_hd__dlymetal6s6s_1 delbuf[3:0] (
-	.A    ({padin_sdi_delay_int, padin_sdi}),
-	.X    ({padin_sdi_delay, padin_sdi_delay_int}),
-	.VPWR (1'b1),
-	.VGND (1'b0)
-);
-`else
-assign padin_sdi_delay = padin_sdi;
-`endif
-
-reg sdi_latch;
-
-always @ (*) begin
-	if (clk) begin
-		sdi_latch <= padin_sdi_delay;
-	end
-end
-
-reg sdi_negedge;
-
-always @ (negedge clk) begin
-	sdi_negedge <= padin_sdi;
-end
-
-wire [3:0] sdi_retime_opt = {
-	sdi_negedge,
-	sdi_latch,
-	padin_sdi_delay,
-	padin_sdi
-};
-
-assign sdi = sdi_retime_opt[padin_retime_mem_in];
-
-endmodule
-
-// ============================================================================
-// Module whisk_ioport_serdes: similar to whisk_spi_serdes, but for the
-// shift-register-based IO port.
-// ============================================================================
-
-module whisk_ioport_serdes(
-	input  wire clk,
-	input  wire rst_n,
-
-	// Core
-	input  wire sdo,
-	input  wire sck_en,
-	input  wire latch_i,
-	input  wire latch_o,
-	output wire sdi,
-
-	// IOs
-	output wire padout_sdo,
-	output wire padout_sck,
-	output wire padout_latch_i,
-	output wire padout_latch_o,
-	input  wire padin_sdi,
-
-	input  wire padin_retime_ioport_out
-);
-
-// ----------------------------------------------------------------------------
-// Output paths
-
-// Again, stupid cheesy half cycle retiming option that creates a half-cycle
-// path from the core
-
-reg sdo_pos;
-reg sck_en_pos;
-reg latch_i_pos;
-reg latch_o_pos;
-
-always @ (posedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_pos <= 1'b0;
-		sck_en_pos <= 1'b0;
-		latch_i_pos <= 1'b0;
-		latch_o_pos <= 1'b0;
-	end else begin
-		sdo_pos <= sdo;
-		sck_en_pos <= sck_en;
-		latch_i_pos <= latch_i;
-		latch_o_pos <= latch_o;
-	end
-end
-
-reg sdo_neg;
-reg sck_en_neg;
-reg latch_i_neg;
-reg latch_o_neg;
-
-always @ (negedge clk or negedge rst_n) begin
-	if (!rst_n) begin
-		sdo_neg <= 1'b0;
-		sck_en_neg <= 1'b0;
-		latch_i_neg <= 1'b0;
-		latch_o_neg <= 1'b0;
-	end else begin
-		sdo_neg <= sdo;
-		sck_en_neg <= sck_en;
-		latch_i_neg <= latch_i;
-		latch_o_neg <= latch_o;
-	end
-end
-
-assign padout_sdo     = padin_retime_ioport_out ? sdo_neg     : sdo_pos;
-assign padout_latch_i = padin_retime_ioport_out ? latch_i_neg : latch_i_pos;
-assign padout_latch_o = padin_retime_ioport_out ? latch_o_neg : latch_o_pos;
-
-// Again, no clock gating cell for TT2, but must revisit in future. Also
-// behavioural mux on clock lmao
-assign padout_sck = padin_retime_ioport_out ? (sck_en_neg && clk) : (sck_en_pos && !clk);
-
-// ----------------------------------------------------------------------------
-// Input paths
-
-assign sdi = padin_sdi;
-
-endmodule
-
-// ============================================================================
-//
-//           _     _     _
-//          | |   (_)   | |
-// __      _| |__  _ ___| | __
-// \ \ /\ / / '_ \| / __| |/ /
-//  \ V  V /| | | | \__ \   <
-//   \_/\_/ |_| |_|_|___/_|\_\
-//
-//
-// When I was 16 I designed a 7400-series breadboard processor called Fork,
-// with a language called Spoon. Now I'm 26 and I'm designing a processor
-// called Whisk. I wonder what I'll do when I grow up.
-//
-// Many mistakes were made in this ISA. What did you think? My aim with this
-// version of Whisk is to run enough software to discover exactly why my
-// instruction set is bad. Hopefully Tiny Tapeout 3 will bring faster IOs,
-// with 2D muxing instead of a scan chain, and then I can try getting some
-// serious software running on Whisk v2, at a few MHz instead of 12 kHz.
diff --git a/verilog/rtl/095_mcpi.v b/verilog/rtl/095_mcpi.v
deleted file mode 100644
index d976b2e..0000000
--- a/verilog/rtl/095_mcpi.v
+++ /dev/null
@@ -1,175 +0,0 @@
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-//
-//  so, just somehow calculate x^2+y^2 with random
-//  0<x, y<1, and compare it with 1
-//  using 8-bit fixed point, [7:0]x means x/2**8
-//  0.0039 resolution is really coarse...
-module regymm_mcpi(
-	input [7:0] io_in, 
-	output reg [7:0] io_out
-);
-	wire clk = io_in[0];
-	wire rst = io_in[1];
-	wire [5:0]sw1 = io_in[7:2];
-
-	always @ (*) begin
-		io_out = 0;
-		case(sw1[1:0])
-			0: io_out = cnt[7:0];
-			1: io_out = cnt_in[7:0];
-			2: io_out = {6'b0, cnt[0], cnt_in[0]};
-		endcase
-	end
-
-	reg [8:0]breg;
-	reg [7:0]breg2; // shouldn't exceed 7:0 because x^2<1 when 0<x<1
-	reg [7:0]x;
-
-	reg [3:0]mulin1;
-	reg [3:0]mulin2;
-	wire [7:0]mulout;
-	mul4_341521390605697619 mul_inst(
-		.a(mulin1),
-		.b(mulin2),
-		.c(mulout)
-	);
-
-	reg [7:0]addin1;
-	reg [7:0]addin2;
-	wire [8:0]addout;
-	assign addout = addin1 + addin2;
-
-	// not very random actually, should somehow 
-	// receive seed from outside
-	reg [7:0]random = 8'h01;
-	always @ (posedge clk) begin
-		random <= {random[6:0], (random[7] ^ random[5] ^ random[4] ^ random[3])};
-	end
-
-	reg [3:0]sts;
-	reg [7:0]cnt;
-	reg [7:0]cnt_in;
-	always @ (posedge clk) begin
-		if (rst) begin
-			sts <= 0;
-			cnt <= 0;
-			cnt_in <= 0;
-			//x <= 0;
-		end else begin
-			if (sw1[5] == 0) begin
-				case (sts)
-					0: begin
-						breg <= 0;
-						x <= random;
-					end
-					4: begin
-						x <= random;
-						breg2 <= breg_in;
-					end
-					9: begin
-						cnt <= cnt + 1;
-						if (addout[8]) cnt_in <= cnt_in + 1;
-					end
-				endcase
-				sts <= sts == 10 ? 0 : sts + 1;
-				breg <= breg_in;
-			end
-		end
-	end
-
-	reg [8:0]breg_in;
-	always @ (*) begin
-		mulin1 = 0;
-		mulin2 = 0;
-		addin1 = 0;
-		addin2 = 0;
-		breg_in = 0;
-		if (sts == 9) begin
-			addin1 = breg;
-			addin2 = breg2;
-		end else begin
-			case(sts[1:0])
-				2'b01: begin
-					mulin1 = x[3:0];
-					mulin2 = x[3:0];
-					breg_in = {1'b0, mulout};
-				end
-				2'b10: begin
-					mulin1 = x[7:4];
-					mulin2 = x[3:0];
-					addin1 = {4'b0, breg[7:4]};
-					addin2 = mulout;
-					breg_in = addout;
-				end
-				2'b11: begin
-					mulin1 = x[3:0];
-					mulin2 = x[7:4];
-					addin1 = breg[7:0];
-					addin2 = mulout;
-					breg_in = addout;
-				end
-				2'b00: begin
-					mulin1 = x[7:4];
-					mulin2 = x[7:4];
-					addin1 = {3'b0, breg[8:4]};
-					addin2 = mulout;
-					breg_in = addout;
-				end
-			endcase
-		end
-	end
-endmodule
-
-module add_341521390605697619
-#(parameter WIDTH = 8)
-(
-	input [WIDTH-1:0]a,
-	input [WIDTH-1:0]b,
-	output [WIDTH:0]c
-);
-assign c = a + b;
-endmodule
-
-module mul4_341521390605697619
-(
-	input [3:0] a,
-	input [3:0] b,
-	output [7:0] c
-);
-wire [3:0]x = b[0] ? a : 0;
-wire [3:0]y = b[1] ? a : 0;
-wire [3:0]z = b[2] ? a : 0;
-wire [3:0]t = b[3] ? a : 0;
-
-assign c = {
-	add3,
-	add2[0],
-	add1[0],
-	x[0]
-	};
-wire [4:0]add1;
-add_341521390605697619 #(.WIDTH(4)) add_1(
-	.a({1'b0, x[3:1]}),
-	.b(y),
-	.c(add1)
-);
-
-wire [4:0]add2;
-add_341521390605697619 #(.WIDTH(4)) add_2(
-	.a(add1[4:1]),
-	.b(z),
-	.c(add2)
-);
-
-wire [4:0]add3;
-add_341521390605697619 #(.WIDTH(4)) add_3(
-	.a(add2[4:1]),
-	.b(t),
-	.c(add3)
-);
-endmodule
diff --git a/verilog/rtl/096_funnyblinky.v b/verilog/rtl/096_funnyblinky.v
deleted file mode 100644
index d47c43a..0000000
--- a/verilog/rtl/096_funnyblinky.v
+++ /dev/null
@@ -1,94 +0,0 @@
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module regymm_funnyblinky(
-	input [7:0] io_in, 
-	output [7:0] io_out
-);
-	wire clk25 = io_in[0];
-	wire rst = io_in[1];
-
-	wire sw_switch = io_in[7];
-
-	// for funny
-	wire [2:0]sw1 = io_in[4:2];
-
-	// for counter
-	wire [1:0]sw_outctrl = io_in[5:4];
-	wire sw_pause = io_in[6];
-	wire signal1 = io_in[2];
-	wire signal2 = io_in[3];
-	reg sig1r;
-	reg sig2r;
-	reg sig1rr;
-	reg sig2rr;
-
-	reg [13:0]cnt = 0;
-	reg [13:0]cnt2 = 0;
-	always @ (posedge clk25) begin
-		sig1r <= signal1;
-		sig2r <= signal2;
-		sig1rr <= sig1r;
-		sig2rr <= sig2r;
-		if (sw_switch) begin
-			if (rst) begin
-				cnt <= 0;
-				cnt2 <= 0;
-			end else begin
-				if (!sw_pause) begin
-					if (sig1r != sig1rr) cnt <= cnt + 1;
-					if (sig2r != sig2rr) cnt2 <= cnt2 + 1;
-				end
-			end
-		end else begin
-			cnt <= cnt + 1;
-		end
-	end
-	wire clkslow = cnt[3 + sw1];
-	reg [6:0]cntslow = 0;
-	reg [2:0]cntf = 0;
-	always @ (posedge clkslow) begin
-		cntslow <= cntslow == 105 ? 0 : cntslow + 1;
-		if (!cntslow[0]) begin
-			if (cntslow >= 73) begin
-				cntf <= cntf == 4 ? 0 : cntf + 1;
-			end else
-				cntf <= 0;
-		end
-	end
-	reg	[2:0]finalpos;
-	always @ (*) begin
-		finalpos = 0;
-		case (cntf)
-			0: finalpos = 2;
-			1: finalpos = 6;
-			2: finalpos = 0;
-			3: finalpos = 3;
-			4: finalpos = 5;
-		endcase
-	end
-	reg [7:0]io_out_funny;
-	reg [7:0]io_out_cnter;
-	always @ (*) begin
-		io_out_funny = 0;
-		if (cntslow >= 1 && cntslow <= 8) io_out_funny = 8'b11111111 << (8 - cntslow);
-		else if (cntslow >= 9 && cntslow <= 17) io_out_funny = 8'b11111111 << (cntslow - 9);
-		else if (cntslow >= 18 && cntslow <= 25) io_out_funny = 8'b10000000 >> (cntslow - 18);
-		else if (cntslow >= 26 && cntslow <= 33) io_out_funny = 8'b00000001 << (cntslow - 26);
-		else if (cntslow >= 35 && cntslow <= 55) io_out_funny = cntslow[0] ? 8'b00000000 : 8'b11111111;
-		else if (cntslow >= 56 && cntslow <= 72) io_out_funny = cntslow[0] ? 8'b11110000 : 8'b00001111;
-		else if (cntslow >= 73 && cntslow[0] == 0) io_out_funny = 8'b10000000 >> finalpos;
-
-		io_out_cnter = 0;
-		case (sw_outctrl)
-			2'b00: io_out_cnter = cnt[7:0];
-			2'b01: io_out_cnter = {2'b0, cnt[13:8]};
-			2'b10: io_out_cnter = cnt2[7:0];
-			2'b11: io_out_cnter = {2'b0, cnt2[13:8]};
-		endcase
-	end
-	assign io_out = sw_switch ? io_out_cnter : io_out_funny;
-endmodule
diff --git a/verilog/rtl/096_mcpi.v b/verilog/rtl/096_mcpi.v
deleted file mode 100644
index d976b2e..0000000
--- a/verilog/rtl/096_mcpi.v
+++ /dev/null
@@ -1,175 +0,0 @@
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-//
-//  so, just somehow calculate x^2+y^2 with random
-//  0<x, y<1, and compare it with 1
-//  using 8-bit fixed point, [7:0]x means x/2**8
-//  0.0039 resolution is really coarse...
-module regymm_mcpi(
-	input [7:0] io_in, 
-	output reg [7:0] io_out
-);
-	wire clk = io_in[0];
-	wire rst = io_in[1];
-	wire [5:0]sw1 = io_in[7:2];
-
-	always @ (*) begin
-		io_out = 0;
-		case(sw1[1:0])
-			0: io_out = cnt[7:0];
-			1: io_out = cnt_in[7:0];
-			2: io_out = {6'b0, cnt[0], cnt_in[0]};
-		endcase
-	end
-
-	reg [8:0]breg;
-	reg [7:0]breg2; // shouldn't exceed 7:0 because x^2<1 when 0<x<1
-	reg [7:0]x;
-
-	reg [3:0]mulin1;
-	reg [3:0]mulin2;
-	wire [7:0]mulout;
-	mul4_341521390605697619 mul_inst(
-		.a(mulin1),
-		.b(mulin2),
-		.c(mulout)
-	);
-
-	reg [7:0]addin1;
-	reg [7:0]addin2;
-	wire [8:0]addout;
-	assign addout = addin1 + addin2;
-
-	// not very random actually, should somehow 
-	// receive seed from outside
-	reg [7:0]random = 8'h01;
-	always @ (posedge clk) begin
-		random <= {random[6:0], (random[7] ^ random[5] ^ random[4] ^ random[3])};
-	end
-
-	reg [3:0]sts;
-	reg [7:0]cnt;
-	reg [7:0]cnt_in;
-	always @ (posedge clk) begin
-		if (rst) begin
-			sts <= 0;
-			cnt <= 0;
-			cnt_in <= 0;
-			//x <= 0;
-		end else begin
-			if (sw1[5] == 0) begin
-				case (sts)
-					0: begin
-						breg <= 0;
-						x <= random;
-					end
-					4: begin
-						x <= random;
-						breg2 <= breg_in;
-					end
-					9: begin
-						cnt <= cnt + 1;
-						if (addout[8]) cnt_in <= cnt_in + 1;
-					end
-				endcase
-				sts <= sts == 10 ? 0 : sts + 1;
-				breg <= breg_in;
-			end
-		end
-	end
-
-	reg [8:0]breg_in;
-	always @ (*) begin
-		mulin1 = 0;
-		mulin2 = 0;
-		addin1 = 0;
-		addin2 = 0;
-		breg_in = 0;
-		if (sts == 9) begin
-			addin1 = breg;
-			addin2 = breg2;
-		end else begin
-			case(sts[1:0])
-				2'b01: begin
-					mulin1 = x[3:0];
-					mulin2 = x[3:0];
-					breg_in = {1'b0, mulout};
-				end
-				2'b10: begin
-					mulin1 = x[7:4];
-					mulin2 = x[3:0];
-					addin1 = {4'b0, breg[7:4]};
-					addin2 = mulout;
-					breg_in = addout;
-				end
-				2'b11: begin
-					mulin1 = x[3:0];
-					mulin2 = x[7:4];
-					addin1 = breg[7:0];
-					addin2 = mulout;
-					breg_in = addout;
-				end
-				2'b00: begin
-					mulin1 = x[7:4];
-					mulin2 = x[7:4];
-					addin1 = {3'b0, breg[8:4]};
-					addin2 = mulout;
-					breg_in = addout;
-				end
-			endcase
-		end
-	end
-endmodule
-
-module add_341521390605697619
-#(parameter WIDTH = 8)
-(
-	input [WIDTH-1:0]a,
-	input [WIDTH-1:0]b,
-	output [WIDTH:0]c
-);
-assign c = a + b;
-endmodule
-
-module mul4_341521390605697619
-(
-	input [3:0] a,
-	input [3:0] b,
-	output [7:0] c
-);
-wire [3:0]x = b[0] ? a : 0;
-wire [3:0]y = b[1] ? a : 0;
-wire [3:0]z = b[2] ? a : 0;
-wire [3:0]t = b[3] ? a : 0;
-
-assign c = {
-	add3,
-	add2[0],
-	add1[0],
-	x[0]
-	};
-wire [4:0]add1;
-add_341521390605697619 #(.WIDTH(4)) add_1(
-	.a({1'b0, x[3:1]}),
-	.b(y),
-	.c(add1)
-);
-
-wire [4:0]add2;
-add_341521390605697619 #(.WIDTH(4)) add_2(
-	.a(add1[4:1]),
-	.b(z),
-	.c(add2)
-);
-
-wire [4:0]add3;
-add_341521390605697619 #(.WIDTH(4)) add_3(
-	.a(add2[4:1]),
-	.b(t),
-	.c(add3)
-);
-endmodule
diff --git a/verilog/rtl/097_funnyblinky.v b/verilog/rtl/097_funnyblinky.v
deleted file mode 100644
index d47c43a..0000000
--- a/verilog/rtl/097_funnyblinky.v
+++ /dev/null
@@ -1,94 +0,0 @@
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module regymm_funnyblinky(
-	input [7:0] io_in, 
-	output [7:0] io_out
-);
-	wire clk25 = io_in[0];
-	wire rst = io_in[1];
-
-	wire sw_switch = io_in[7];
-
-	// for funny
-	wire [2:0]sw1 = io_in[4:2];
-
-	// for counter
-	wire [1:0]sw_outctrl = io_in[5:4];
-	wire sw_pause = io_in[6];
-	wire signal1 = io_in[2];
-	wire signal2 = io_in[3];
-	reg sig1r;
-	reg sig2r;
-	reg sig1rr;
-	reg sig2rr;
-
-	reg [13:0]cnt = 0;
-	reg [13:0]cnt2 = 0;
-	always @ (posedge clk25) begin
-		sig1r <= signal1;
-		sig2r <= signal2;
-		sig1rr <= sig1r;
-		sig2rr <= sig2r;
-		if (sw_switch) begin
-			if (rst) begin
-				cnt <= 0;
-				cnt2 <= 0;
-			end else begin
-				if (!sw_pause) begin
-					if (sig1r != sig1rr) cnt <= cnt + 1;
-					if (sig2r != sig2rr) cnt2 <= cnt2 + 1;
-				end
-			end
-		end else begin
-			cnt <= cnt + 1;
-		end
-	end
-	wire clkslow = cnt[3 + sw1];
-	reg [6:0]cntslow = 0;
-	reg [2:0]cntf = 0;
-	always @ (posedge clkslow) begin
-		cntslow <= cntslow == 105 ? 0 : cntslow + 1;
-		if (!cntslow[0]) begin
-			if (cntslow >= 73) begin
-				cntf <= cntf == 4 ? 0 : cntf + 1;
-			end else
-				cntf <= 0;
-		end
-	end
-	reg	[2:0]finalpos;
-	always @ (*) begin
-		finalpos = 0;
-		case (cntf)
-			0: finalpos = 2;
-			1: finalpos = 6;
-			2: finalpos = 0;
-			3: finalpos = 3;
-			4: finalpos = 5;
-		endcase
-	end
-	reg [7:0]io_out_funny;
-	reg [7:0]io_out_cnter;
-	always @ (*) begin
-		io_out_funny = 0;
-		if (cntslow >= 1 && cntslow <= 8) io_out_funny = 8'b11111111 << (8 - cntslow);
-		else if (cntslow >= 9 && cntslow <= 17) io_out_funny = 8'b11111111 << (cntslow - 9);
-		else if (cntslow >= 18 && cntslow <= 25) io_out_funny = 8'b10000000 >> (cntslow - 18);
-		else if (cntslow >= 26 && cntslow <= 33) io_out_funny = 8'b00000001 << (cntslow - 26);
-		else if (cntslow >= 35 && cntslow <= 55) io_out_funny = cntslow[0] ? 8'b00000000 : 8'b11111111;
-		else if (cntslow >= 56 && cntslow <= 72) io_out_funny = cntslow[0] ? 8'b11110000 : 8'b00001111;
-		else if (cntslow >= 73 && cntslow[0] == 0) io_out_funny = 8'b10000000 >> finalpos;
-
-		io_out_cnter = 0;
-		case (sw_outctrl)
-			2'b00: io_out_cnter = cnt[7:0];
-			2'b01: io_out_cnter = {2'b0, cnt[13:8]};
-			2'b10: io_out_cnter = cnt2[7:0];
-			2'b11: io_out_cnter = {2'b0, cnt2[13:8]};
-		endcase
-	end
-	assign io_out = sw_switch ? io_out_cnter : io_out_funny;
-endmodule
diff --git a/verilog/rtl/097_gps_ca_prn.v b/verilog/rtl/097_gps_ca_prn.v
deleted file mode 100644
index c3e6412..0000000
--- a/verilog/rtl/097_gps_ca_prn.v
+++ /dev/null
@@ -1,291 +0,0 @@
-/* Generated by Yosys 0.22+1 (git sha1 c4a52b1b0, clang 14.0.0-1ubuntu1 -fPIC -Os) */
-
-module adamgreig_tt02_gps_ca_prn(io_in, io_out);
-  reg \$auto$verilog_backend.cc:2083:dump_module$1  = 0;
-  wire \$1 ;
-  wire \$101 ;
-  wire \$103 ;
-  wire \$105 ;
-  wire \$107 ;
-  wire \$109 ;
-  wire \$11 ;
-  wire \$111 ;
-  wire \$113 ;
-  wire \$115 ;
-  wire \$117 ;
-  wire \$119 ;
-  wire \$121 ;
-  wire \$123 ;
-  wire \$125 ;
-  wire \$127 ;
-  wire \$129 ;
-  wire \$13 ;
-  wire \$131 ;
-  wire \$133 ;
-  wire \$135 ;
-  wire \$137 ;
-  wire \$139 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire \$27 ;
-  wire \$29 ;
-  wire \$3 ;
-  wire \$31 ;
-  wire \$33 ;
-  wire \$35 ;
-  wire \$37 ;
-  wire \$39 ;
-  wire \$41 ;
-  wire \$43 ;
-  wire \$45 ;
-  wire \$47 ;
-  wire \$49 ;
-  wire \$5 ;
-  wire \$51 ;
-  wire \$53 ;
-  wire \$55 ;
-  wire \$57 ;
-  wire \$59 ;
-  wire \$61 ;
-  wire \$63 ;
-  wire \$65 ;
-  wire \$67 ;
-  wire \$69 ;
-  wire \$7 ;
-  wire \$71 ;
-  wire \$73 ;
-  wire \$75 ;
-  wire \$77 ;
-  wire \$79 ;
-  wire \$81 ;
-  wire \$83 ;
-  wire \$85 ;
-  wire \$87 ;
-  wire \$89 ;
-  wire \$9 ;
-  wire \$91 ;
-  wire \$93 ;
-  wire \$95 ;
-  wire \$97 ;
-  wire \$99 ;
-  wire clk;
-  reg [9:0] g1 = 10'h3ff;
-  reg [9:0] \g1$next ;
-  reg [9:0] g2 = 10'h3ff;
-  reg [9:0] \g2$next ;
-  input [7:0] io_in;
-  wire [7:0] io_in;
-  output [7:0] io_out;
-  reg [7:0] io_out = 8'h00;
-  reg [7:0] \io_out$next ;
-  wire [31:0] prns;
-  wire rst;
-  assign \$9  = \$7  ^ g2[8];
-  assign \$99  = \$97  ^ g1[9];
-  assign \$101  = g2[0] ^ g2[2];
-  assign \$103  = \$101  ^ g1[9];
-  assign \$105  = g2[3] ^ g2[5];
-  assign \$107  = \$105  ^ g1[9];
-  assign \$109  = g2[4] ^ g2[6];
-  assign \$111  = \$109  ^ g1[9];
-  assign \$113  = g2[5] ^ g2[7];
-  assign \$115  = \$113  ^ g1[9];
-  assign \$117  = g2[6] ^ g2[8];
-  assign \$11  = \$9  ^ g2[9];
-  assign \$119  = \$117  ^ g1[9];
-  assign \$121  = g2[7] ^ g2[9];
-  assign \$123  = \$121  ^ g1[9];
-  assign \$125  = g2[0] ^ g2[5];
-  assign \$127  = \$125  ^ g1[9];
-  assign \$129  = g2[1] ^ g2[6];
-  assign \$131  = \$129  ^ g1[9];
-  assign \$133  = g2[2] ^ g2[7];
-  assign \$135  = \$133  ^ g1[9];
-  assign \$137  = g2[3] ^ g2[8];
-  assign \$13  = g2[1] ^ g2[5];
-  assign \$139  = \$137  ^ g1[9];
-  always @(posedge clk)
-    g1 <= \g1$next ;
-  always @(posedge clk)
-    io_out <= \io_out$next ;
-  always @(posedge clk)
-    g2 <= \g2$next ;
-  assign \$15  = \$13  ^ g1[9];
-  assign \$17  = g2[2] ^ g2[6];
-  assign \$1  = g1[2] ^ g1[9];
-  assign \$19  = \$17  ^ g1[9];
-  assign \$21  = g2[3] ^ g2[7];
-  assign \$23  = \$21  ^ g1[9];
-  assign \$25  = g2[4] ^ g2[8];
-  assign \$27  = \$25  ^ g1[9];
-  assign \$29  = g2[0] ^ g2[8];
-  assign \$31  = \$29  ^ g1[9];
-  assign \$33  = g2[1] ^ g2[9];
-  assign \$35  = \$33  ^ g1[9];
-  assign \$37  = g2[0] ^ g2[7];
-  assign \$3  = g2[1] ^ g2[2];
-  assign \$39  = \$37  ^ g1[9];
-  assign \$41  = g2[1] ^ g2[8];
-  assign \$43  = \$41  ^ g1[9];
-  assign \$45  = g2[2] ^ g2[9];
-  assign \$47  = \$45  ^ g1[9];
-  assign \$49  = g2[1] ^ g2[2];
-  assign \$51  = \$49  ^ g1[9];
-  assign \$53  = g2[2] ^ g2[3];
-  assign \$55  = \$53  ^ g1[9];
-  assign \$57  = g2[4] ^ g2[5];
-  assign \$5  = \$3  ^ g2[5];
-  assign \$59  = \$57  ^ g1[9];
-  assign \$61  = g2[5] ^ g2[6];
-  assign \$63  = \$61  ^ g1[9];
-  assign \$65  = g2[6] ^ g2[7];
-  assign \$67  = \$65  ^ g1[9];
-  assign \$69  = g2[7] ^ g2[8];
-  assign \$71  = \$69  ^ g1[9];
-  assign \$73  = g2[8] ^ g2[9];
-  assign \$75  = \$73  ^ g1[9];
-  assign \$77  = g2[0] ^ g2[3];
-  assign \$7  = \$5  ^ g2[7];
-  assign \$79  = \$77  ^ g1[9];
-  assign \$81  = g2[1] ^ g2[4];
-  assign \$83  = \$81  ^ g1[9];
-  assign \$85  = g2[2] ^ g2[5];
-  assign \$87  = \$85  ^ g1[9];
-  assign \$89  = g2[3] ^ g2[6];
-  assign \$91  = \$89  ^ g1[9];
-  assign \$93  = g2[4] ^ g2[7];
-  assign \$95  = \$93  ^ g1[9];
-  assign \$97  = g2[5] ^ g2[8];
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \g1$next  = { g1[8:0], \$1  };
-    casez (rst)
-      1'h1:
-          \g1$next  = 10'h3ff;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \io_out$next [7:3] = io_out[7:3];
-    \io_out$next [0] = g1[9];
-    \io_out$next [1] = g2[9];
-    (* full_case = 32'd1 *)
-    casez (io_in[6:2])
-      5'h00:
-          \io_out$next [2] = prns[0];
-      5'h01:
-          \io_out$next [2] = prns[1];
-      5'h02:
-          \io_out$next [2] = prns[2];
-      5'h03:
-          \io_out$next [2] = prns[3];
-      5'h04:
-          \io_out$next [2] = prns[4];
-      5'h05:
-          \io_out$next [2] = prns[5];
-      5'h06:
-          \io_out$next [2] = prns[6];
-      5'h07:
-          \io_out$next [2] = prns[7];
-      5'h08:
-          \io_out$next [2] = prns[8];
-      5'h09:
-          \io_out$next [2] = prns[9];
-      5'h0a:
-          \io_out$next [2] = prns[10];
-      5'h0b:
-          \io_out$next [2] = prns[11];
-      5'h0c:
-          \io_out$next [2] = prns[12];
-      5'h0d:
-          \io_out$next [2] = prns[13];
-      5'h0e:
-          \io_out$next [2] = prns[14];
-      5'h0f:
-          \io_out$next [2] = prns[15];
-      5'h10:
-          \io_out$next [2] = prns[16];
-      5'h11:
-          \io_out$next [2] = prns[17];
-      5'h12:
-          \io_out$next [2] = prns[18];
-      5'h13:
-          \io_out$next [2] = prns[19];
-      5'h14:
-          \io_out$next [2] = prns[20];
-      5'h15:
-          \io_out$next [2] = prns[21];
-      5'h16:
-          \io_out$next [2] = prns[22];
-      5'h17:
-          \io_out$next [2] = prns[23];
-      5'h18:
-          \io_out$next [2] = prns[24];
-      5'h19:
-          \io_out$next [2] = prns[25];
-      5'h1a:
-          \io_out$next [2] = prns[26];
-      5'h1b:
-          \io_out$next [2] = prns[27];
-      5'h1c:
-          \io_out$next [2] = prns[28];
-      5'h1d:
-          \io_out$next [2] = prns[29];
-      5'h1e:
-          \io_out$next [2] = prns[30];
-      5'h??:
-          \io_out$next [2] = prns[31];
-    endcase
-    casez (rst)
-      1'h1:
-          \io_out$next  = 8'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \g2$next  = { g2[8:0], \$11  };
-    casez (rst)
-      1'h1:
-          \g2$next  = 10'h3ff;
-    endcase
-  end
-  assign prns[31] = \$139 ;
-  assign prns[30] = \$135 ;
-  assign prns[29] = \$131 ;
-  assign prns[28] = \$127 ;
-  assign prns[27] = \$123 ;
-  assign prns[26] = \$119 ;
-  assign prns[25] = \$115 ;
-  assign prns[24] = \$111 ;
-  assign prns[23] = \$107 ;
-  assign prns[22] = \$103 ;
-  assign prns[21] = \$99 ;
-  assign prns[20] = \$95 ;
-  assign prns[19] = \$91 ;
-  assign prns[18] = \$87 ;
-  assign prns[17] = \$83 ;
-  assign prns[16] = \$79 ;
-  assign prns[15] = \$75 ;
-  assign prns[14] = \$71 ;
-  assign prns[13] = \$67 ;
-  assign prns[12] = \$63 ;
-  assign prns[11] = \$59 ;
-  assign prns[10] = \$55 ;
-  assign prns[9] = \$51 ;
-  assign prns[8] = \$47 ;
-  assign prns[7] = \$43 ;
-  assign prns[6] = \$39 ;
-  assign prns[5] = \$35 ;
-  assign prns[4] = \$31 ;
-  assign prns[3] = \$27 ;
-  assign prns[2] = \$23 ;
-  assign prns[1] = \$19 ;
-  assign prns[0] = \$15 ;
-  assign rst = io_in[1];
-  assign clk = io_in[0];
-endmodule
-
diff --git a/verilog/rtl/098_adc_dac.v b/verilog/rtl/098_adc_dac.v
deleted file mode 100644
index bcf005f..0000000
--- a/verilog/rtl/098_adc_dac.v
+++ /dev/null
@@ -1,605 +0,0 @@
-/* Generated by Yosys 0.22+1 (git sha1 c4a52b1b0, clang 14.0.0-1ubuntu1 -fPIC -Os) */
-
-module adamgreig_tt02_adc_dac(io_in, io_out);
-  reg \$auto$verilog_backend.cc:2083:dump_module$1  = 0;
-  wire adc_comp;
-  wire [11:0] adc_data;
-  wire adc_out;
-  wire [11:0] adc_uart_data;
-  wire adc_uart_ready;
-  wire adc_uart_tx_o;
-  wire adc_uart_valid;
-  wire clk;
-  wire [7:0] dac_data;
-  wire dac_out;
-  wire [7:0] dac_uart_data;
-  wire dac_uart_rx_i;
-  input [7:0] io_in;
-  wire [7:0] io_in;
-  output [7:0] io_out;
-  wire [7:0] io_out;
-  reg [9:0] ready_sr = 10'h000;
-  reg [9:0] \ready_sr$next ;
-  wire rst;
-  always @(posedge clk)
-    ready_sr <= \ready_sr$next ;
-  adc adc (
-    .clk(clk),
-    .comp(adc_comp),
-    .data(adc_data),
-    .out(adc_out),
-    .rst(rst)
-  );
-  adc_uart adc_uart (
-    .clk(clk),
-    .data(adc_uart_data),
-    .ready(adc_uart_ready),
-    .rst(rst),
-    .tx_o(adc_uart_tx_o),
-    .valid(adc_uart_valid)
-  );
-  \dac$1  dac (
-    .clk(clk),
-    .data(dac_data),
-    .out(dac_out),
-    .rst(rst)
-  );
-  dac_uart dac_uart (
-    .clk(clk),
-    .data(dac_uart_data),
-    .rst(rst),
-    .rx_i(dac_uart_rx_i)
-  );
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \ready_sr$next  = { ready_sr[8:0], adc_uart_ready };
-    casez (rst)
-      1'h1:
-          \ready_sr$next  = 10'h000;
-    endcase
-  end
-  assign dac_uart_rx_i = io_in[3];
-  assign dac_data = dac_uart_data;
-  assign adc_uart_valid = ready_sr[9];
-  assign adc_uart_data = adc_data;
-  assign io_out[2] = dac_out;
-  assign io_out[1] = adc_uart_tx_o;
-  assign io_out[0] = adc_out;
-  assign io_out[7:3] = 5'h00;
-  assign adc_comp = io_in[2];
-  assign rst = io_in[1];
-  assign clk = io_in[0];
-endmodule
-
-module adc(rst, comp, out, data, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$2  = 0;
-  wire [12:0] \$1 ;
-  wire [12:0] \$2 ;
-  wire [12:0] \$4 ;
-  wire [12:0] \$5 ;
-  input clk;
-  wire clk;
-  input comp;
-  wire comp;
-  wire [11:0] dac_data;
-  wire dac_out;
-  output [11:0] data;
-  reg [11:0] data = 12'h000;
-  reg [11:0] \data$next ;
-  output out;
-  wire out;
-  input rst;
-  wire rst;
-  assign \$2  = data - 1'h1;
-  assign \$5  = data + 1'h1;
-  always @(posedge clk)
-    data <= \data$next ;
-  dac dac (
-    .clk(clk),
-    .data(dac_data),
-    .out(dac_out),
-    .rst(rst)
-  );
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    (* full_case = 32'd1 *)
-    casez (comp)
-      1'h1:
-          \data$next  = \$2 [11:0];
-      default:
-          \data$next  = \$5 [11:0];
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 12'h000;
-    endcase
-  end
-  assign \$1  = \$2 ;
-  assign \$4  = \$5 ;
-  assign dac_data = data;
-  assign out = dac_out;
-endmodule
-
-module adc_uart(rst, tx_o, data, ready, valid, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$3  = 0;
-  wire \$1 ;
-  wire [8:0] \$10 ;
-  wire [7:0] \$3 ;
-  wire [6:0] \$4 ;
-  wire [8:0] \$7 ;
-  wire [7:0] \$8 ;
-  input clk;
-  wire clk;
-  input [11:0] data;
-  wire [11:0] data;
-  reg [11:0] data_reg = 12'h000;
-  reg [11:0] \data_reg$next ;
-  reg [2:0] fsm_state = 3'h0;
-  reg [2:0] \fsm_state$next ;
-  reg [3:0] nibble;
-  output ready;
-  reg ready;
-  input rst;
-  wire rst;
-  output tx_o;
-  wire tx_o;
-  reg [7:0] uart_data;
-  wire uart_ready;
-  wire uart_tx_o;
-  reg uart_valid;
-  input valid;
-  wire valid;
-  assign \$10  = \$8  - 4'ha;
-  always @(posedge clk)
-    data_reg <= \data_reg$next ;
-  always @(posedge clk)
-    fsm_state <= \fsm_state$next ;
-  assign \$1  = nibble < 4'ha;
-  assign \$4  = nibble + 6'h30;
-  assign \$3  = + \$4 ;
-  assign \$8  = nibble + 7'h41;
-  uart uart (
-    .clk(clk),
-    .data(uart_data),
-    .ready(uart_ready),
-    .rst(rst),
-    .tx_o(uart_tx_o),
-    .valid(uart_valid)
-  );
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    (* full_case = 32'd1 *)
-    casez (\$1 )
-      1'h1:
-          uart_data = \$3 ;
-      default:
-          uart_data = \$10 [7:0];
-    endcase
-    casez (fsm_state)
-      3'h0:
-          /* empty */;
-      3'h1:
-          /* empty */;
-      3'h2:
-          /* empty */;
-      3'h3:
-          /* empty */;
-      3'h4:
-          uart_data = 8'h0a;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    ready = 1'h0;
-    casez (fsm_state)
-      3'h0:
-          ready = uart_ready;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \data_reg$next  = data_reg;
-    casez (fsm_state)
-      3'h0:
-          \data_reg$next  = data;
-    endcase
-    casez (rst)
-      1'h1:
-          \data_reg$next  = 12'h000;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \fsm_state$next  = fsm_state;
-    casez (fsm_state)
-      3'h0:
-          casez (valid)
-            1'h1:
-                \fsm_state$next  = 3'h1;
-          endcase
-      3'h1:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h2;
-          endcase
-      3'h2:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h3;
-          endcase
-      3'h3:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h4;
-          endcase
-      3'h4:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h0;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \fsm_state$next  = 3'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    nibble = 4'h0;
-    casez (fsm_state)
-      3'h0:
-          /* empty */;
-      3'h1:
-          nibble = data_reg[11:8];
-      3'h2:
-          nibble = data_reg[7:4];
-      3'h3:
-          nibble = data_reg[3:0];
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    uart_valid = 1'h0;
-    casez (fsm_state)
-      3'h0:
-          /* empty */;
-      3'h1:
-          uart_valid = 1'h1;
-      3'h2:
-          uart_valid = 1'h1;
-      3'h3:
-          uart_valid = 1'h1;
-      3'h4:
-          uart_valid = 1'h1;
-    endcase
-  end
-  assign \$7  = \$10 ;
-  assign tx_o = uart_tx_o;
-endmodule
-
-module dac(rst, out, data, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$4  = 0;
-  wire [12:0] \$1 ;
-  reg [12:0] acc = 13'h0000;
-  reg [12:0] \acc$next ;
-  input clk;
-  wire clk;
-  input [11:0] data;
-  wire [11:0] data;
-  output out;
-  wire out;
-  input rst;
-  wire rst;
-  assign \$1  = acc[11:0] + data;
-  always @(posedge clk)
-    acc <= \acc$next ;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$4 ) begin end
-    \acc$next  = \$1 ;
-    casez (rst)
-      1'h1:
-          \acc$next  = 13'h0000;
-    endcase
-  end
-  assign out = acc[12];
-endmodule
-
-module \dac$1 (rst, out, data, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$5  = 0;
-  wire [8:0] \$1 ;
-  reg [8:0] acc = 9'h000;
-  reg [8:0] \acc$next ;
-  input clk;
-  wire clk;
-  input [7:0] data;
-  wire [7:0] data;
-  output out;
-  wire out;
-  input rst;
-  wire rst;
-  assign \$1  = acc[7:0] + data;
-  always @(posedge clk)
-    acc <= \acc$next ;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \acc$next  = \$1 ;
-    casez (rst)
-      1'h1:
-          \acc$next  = 9'h000;
-    endcase
-  end
-  assign out = acc[8];
-endmodule
-
-module dac_uart(rst, data, rx_i, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$6  = 0;
-  wire \$1 ;
-  wire \$10 ;
-  wire [4:0] \$12 ;
-  wire [4:0] \$13 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire \$27 ;
-  wire [4:0] \$3 ;
-  wire [4:0] \$4 ;
-  wire \$6 ;
-  wire \$8 ;
-  reg [3:0] bit_idx = 4'h0;
-  reg [3:0] \bit_idx$next ;
-  input clk;
-  wire clk;
-  reg [3:0] ctr = 4'h0;
-  reg [3:0] \ctr$next ;
-  output [7:0] data;
-  reg [7:0] data = 8'h00;
-  reg [7:0] \data$next ;
-  reg fsm_state = 1'h0;
-  reg \fsm_state$next ;
-  input rst;
-  wire rst;
-  input rx_i;
-  wire rx_i;
-  reg [7:0] sr = 8'h00;
-  reg [7:0] \sr$next ;
-  reg valid = 1'h0;
-  reg \valid$next ;
-  assign \$10  = ~ rx_i;
-  assign \$13  = ctr - 1'h1;
-  assign \$15  = ! ctr;
-  assign \$17  = ~ rx_i;
-  assign \$1  = ! ctr;
-  assign \$19  = ! ctr;
-  assign \$21  = bit_idx == 4'h8;
-  assign \$23  = ! ctr;
-  assign \$25  = ! ctr;
-  assign \$27  = bit_idx == 4'h8;
-  always @(posedge clk)
-    bit_idx <= \bit_idx$next ;
-  always @(posedge clk)
-    valid <= \valid$next ;
-  always @(posedge clk)
-    ctr <= \ctr$next ;
-  always @(posedge clk)
-    fsm_state <= \fsm_state$next ;
-  always @(posedge clk)
-    sr <= \sr$next ;
-  always @(posedge clk)
-    data <= \data$next ;
-  assign \$4  = bit_idx + 1'h1;
-  assign \$6  = ! ctr;
-  assign \$8  = bit_idx == 4'h8;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \bit_idx$next  = bit_idx;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          \bit_idx$next  = 4'h0;
-      1'h1:
-          casez (\$1 )
-            1'h1:
-                \bit_idx$next  = \$4 [3:0];
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \bit_idx$next  = 4'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \valid$next  = valid;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          \valid$next  = 1'h0;
-      1'h1:
-          casez (\$6 )
-            1'h1:
-                casez (\$8 )
-                  1'h1:
-                      \valid$next  = 1'h1;
-                endcase
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \valid$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \ctr$next  = ctr;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          casez (\$10 )
-            1'h1:
-                \ctr$next  = 4'he;
-          endcase
-      1'h1:
-        begin
-          \ctr$next  = \$13 [3:0];
-          casez (\$15 )
-            1'h1:
-                \ctr$next  = 4'h9;
-          endcase
-        end
-    endcase
-    casez (rst)
-      1'h1:
-          \ctr$next  = 4'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \fsm_state$next  = fsm_state;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          casez (\$17 )
-            1'h1:
-                \fsm_state$next  = 1'h1;
-          endcase
-      1'h1:
-          casez (\$19 )
-            1'h1:
-                casez (\$21 )
-                  1'h1:
-                      \fsm_state$next  = 1'h0;
-                endcase
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \fsm_state$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \sr$next  = sr;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          /* empty */;
-      1'h1:
-          casez (\$23 )
-            1'h1:
-                \sr$next  = { rx_i, sr[7:1] };
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \sr$next  = 8'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \data$next  = data;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          /* empty */;
-      1'h1:
-          casez (\$25 )
-            1'h1:
-                casez (\$27 )
-                  1'h1:
-                      \data$next  = sr;
-                endcase
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 8'h00;
-    endcase
-  end
-  assign \$3  = \$4 ;
-  assign \$12  = \$13 ;
-endmodule
-
-module uart(rst, tx_o, data, ready, valid, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$7  = 0;
-  wire \$1 ;
-  wire \$3 ;
-  wire \$5 ;
-  wire [4:0] \$7 ;
-  wire [4:0] \$8 ;
-  input clk;
-  wire clk;
-  input [7:0] data;
-  wire [7:0] data;
-  output ready;
-  reg ready;
-  input rst;
-  wire rst;
-  reg [3:0] tx_cnt = 4'h0;
-  reg [3:0] \tx_cnt$next ;
-  output tx_o;
-  wire tx_o;
-  reg [9:0] tx_reg = 10'h001;
-  reg [9:0] \tx_reg$next ;
-  input valid;
-  wire valid;
-  always @(posedge clk)
-    tx_reg <= \tx_reg$next ;
-  always @(posedge clk)
-    tx_cnt <= \tx_cnt$next ;
-  assign \$1  = ! tx_cnt;
-  assign \$3  = ! tx_cnt;
-  assign \$5  = ! tx_cnt;
-  assign \$8  = tx_cnt - 1'h1;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$7 ) begin end
-    (* full_case = 32'd1 *)
-    casez (\$1 )
-      1'h1:
-          ready = 1'h1;
-      default:
-          ready = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$7 ) begin end
-    \tx_reg$next  = tx_reg;
-    (* full_case = 32'd1 *)
-    casez (\$3 )
-      1'h1:
-          casez (valid)
-            1'h1:
-                \tx_reg$next  = { 1'h1, data, 1'h0 };
-          endcase
-      default:
-          \tx_reg$next  = { 1'h1, tx_reg[9:1] };
-    endcase
-    casez (rst)
-      1'h1:
-          \tx_reg$next  = 10'h001;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$7 ) begin end
-    \tx_cnt$next  = tx_cnt;
-    (* full_case = 32'd1 *)
-    casez (\$5 )
-      1'h1:
-          casez (valid)
-            1'h1:
-                \tx_cnt$next  = 4'ha;
-          endcase
-      default:
-          \tx_cnt$next  = \$8 [3:0];
-    endcase
-    casez (rst)
-      1'h1:
-          \tx_cnt$next  = 4'h0;
-    endcase
-  end
-  assign \$7  = \$8 ;
-  assign tx_o = tx_reg[0];
-endmodule
-
diff --git a/verilog/rtl/098_gps_ca_prn.v b/verilog/rtl/098_gps_ca_prn.v
deleted file mode 100644
index c3e6412..0000000
--- a/verilog/rtl/098_gps_ca_prn.v
+++ /dev/null
@@ -1,291 +0,0 @@
-/* Generated by Yosys 0.22+1 (git sha1 c4a52b1b0, clang 14.0.0-1ubuntu1 -fPIC -Os) */
-
-module adamgreig_tt02_gps_ca_prn(io_in, io_out);
-  reg \$auto$verilog_backend.cc:2083:dump_module$1  = 0;
-  wire \$1 ;
-  wire \$101 ;
-  wire \$103 ;
-  wire \$105 ;
-  wire \$107 ;
-  wire \$109 ;
-  wire \$11 ;
-  wire \$111 ;
-  wire \$113 ;
-  wire \$115 ;
-  wire \$117 ;
-  wire \$119 ;
-  wire \$121 ;
-  wire \$123 ;
-  wire \$125 ;
-  wire \$127 ;
-  wire \$129 ;
-  wire \$13 ;
-  wire \$131 ;
-  wire \$133 ;
-  wire \$135 ;
-  wire \$137 ;
-  wire \$139 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire \$27 ;
-  wire \$29 ;
-  wire \$3 ;
-  wire \$31 ;
-  wire \$33 ;
-  wire \$35 ;
-  wire \$37 ;
-  wire \$39 ;
-  wire \$41 ;
-  wire \$43 ;
-  wire \$45 ;
-  wire \$47 ;
-  wire \$49 ;
-  wire \$5 ;
-  wire \$51 ;
-  wire \$53 ;
-  wire \$55 ;
-  wire \$57 ;
-  wire \$59 ;
-  wire \$61 ;
-  wire \$63 ;
-  wire \$65 ;
-  wire \$67 ;
-  wire \$69 ;
-  wire \$7 ;
-  wire \$71 ;
-  wire \$73 ;
-  wire \$75 ;
-  wire \$77 ;
-  wire \$79 ;
-  wire \$81 ;
-  wire \$83 ;
-  wire \$85 ;
-  wire \$87 ;
-  wire \$89 ;
-  wire \$9 ;
-  wire \$91 ;
-  wire \$93 ;
-  wire \$95 ;
-  wire \$97 ;
-  wire \$99 ;
-  wire clk;
-  reg [9:0] g1 = 10'h3ff;
-  reg [9:0] \g1$next ;
-  reg [9:0] g2 = 10'h3ff;
-  reg [9:0] \g2$next ;
-  input [7:0] io_in;
-  wire [7:0] io_in;
-  output [7:0] io_out;
-  reg [7:0] io_out = 8'h00;
-  reg [7:0] \io_out$next ;
-  wire [31:0] prns;
-  wire rst;
-  assign \$9  = \$7  ^ g2[8];
-  assign \$99  = \$97  ^ g1[9];
-  assign \$101  = g2[0] ^ g2[2];
-  assign \$103  = \$101  ^ g1[9];
-  assign \$105  = g2[3] ^ g2[5];
-  assign \$107  = \$105  ^ g1[9];
-  assign \$109  = g2[4] ^ g2[6];
-  assign \$111  = \$109  ^ g1[9];
-  assign \$113  = g2[5] ^ g2[7];
-  assign \$115  = \$113  ^ g1[9];
-  assign \$117  = g2[6] ^ g2[8];
-  assign \$11  = \$9  ^ g2[9];
-  assign \$119  = \$117  ^ g1[9];
-  assign \$121  = g2[7] ^ g2[9];
-  assign \$123  = \$121  ^ g1[9];
-  assign \$125  = g2[0] ^ g2[5];
-  assign \$127  = \$125  ^ g1[9];
-  assign \$129  = g2[1] ^ g2[6];
-  assign \$131  = \$129  ^ g1[9];
-  assign \$133  = g2[2] ^ g2[7];
-  assign \$135  = \$133  ^ g1[9];
-  assign \$137  = g2[3] ^ g2[8];
-  assign \$13  = g2[1] ^ g2[5];
-  assign \$139  = \$137  ^ g1[9];
-  always @(posedge clk)
-    g1 <= \g1$next ;
-  always @(posedge clk)
-    io_out <= \io_out$next ;
-  always @(posedge clk)
-    g2 <= \g2$next ;
-  assign \$15  = \$13  ^ g1[9];
-  assign \$17  = g2[2] ^ g2[6];
-  assign \$1  = g1[2] ^ g1[9];
-  assign \$19  = \$17  ^ g1[9];
-  assign \$21  = g2[3] ^ g2[7];
-  assign \$23  = \$21  ^ g1[9];
-  assign \$25  = g2[4] ^ g2[8];
-  assign \$27  = \$25  ^ g1[9];
-  assign \$29  = g2[0] ^ g2[8];
-  assign \$31  = \$29  ^ g1[9];
-  assign \$33  = g2[1] ^ g2[9];
-  assign \$35  = \$33  ^ g1[9];
-  assign \$37  = g2[0] ^ g2[7];
-  assign \$3  = g2[1] ^ g2[2];
-  assign \$39  = \$37  ^ g1[9];
-  assign \$41  = g2[1] ^ g2[8];
-  assign \$43  = \$41  ^ g1[9];
-  assign \$45  = g2[2] ^ g2[9];
-  assign \$47  = \$45  ^ g1[9];
-  assign \$49  = g2[1] ^ g2[2];
-  assign \$51  = \$49  ^ g1[9];
-  assign \$53  = g2[2] ^ g2[3];
-  assign \$55  = \$53  ^ g1[9];
-  assign \$57  = g2[4] ^ g2[5];
-  assign \$5  = \$3  ^ g2[5];
-  assign \$59  = \$57  ^ g1[9];
-  assign \$61  = g2[5] ^ g2[6];
-  assign \$63  = \$61  ^ g1[9];
-  assign \$65  = g2[6] ^ g2[7];
-  assign \$67  = \$65  ^ g1[9];
-  assign \$69  = g2[7] ^ g2[8];
-  assign \$71  = \$69  ^ g1[9];
-  assign \$73  = g2[8] ^ g2[9];
-  assign \$75  = \$73  ^ g1[9];
-  assign \$77  = g2[0] ^ g2[3];
-  assign \$7  = \$5  ^ g2[7];
-  assign \$79  = \$77  ^ g1[9];
-  assign \$81  = g2[1] ^ g2[4];
-  assign \$83  = \$81  ^ g1[9];
-  assign \$85  = g2[2] ^ g2[5];
-  assign \$87  = \$85  ^ g1[9];
-  assign \$89  = g2[3] ^ g2[6];
-  assign \$91  = \$89  ^ g1[9];
-  assign \$93  = g2[4] ^ g2[7];
-  assign \$95  = \$93  ^ g1[9];
-  assign \$97  = g2[5] ^ g2[8];
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \g1$next  = { g1[8:0], \$1  };
-    casez (rst)
-      1'h1:
-          \g1$next  = 10'h3ff;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \io_out$next [7:3] = io_out[7:3];
-    \io_out$next [0] = g1[9];
-    \io_out$next [1] = g2[9];
-    (* full_case = 32'd1 *)
-    casez (io_in[6:2])
-      5'h00:
-          \io_out$next [2] = prns[0];
-      5'h01:
-          \io_out$next [2] = prns[1];
-      5'h02:
-          \io_out$next [2] = prns[2];
-      5'h03:
-          \io_out$next [2] = prns[3];
-      5'h04:
-          \io_out$next [2] = prns[4];
-      5'h05:
-          \io_out$next [2] = prns[5];
-      5'h06:
-          \io_out$next [2] = prns[6];
-      5'h07:
-          \io_out$next [2] = prns[7];
-      5'h08:
-          \io_out$next [2] = prns[8];
-      5'h09:
-          \io_out$next [2] = prns[9];
-      5'h0a:
-          \io_out$next [2] = prns[10];
-      5'h0b:
-          \io_out$next [2] = prns[11];
-      5'h0c:
-          \io_out$next [2] = prns[12];
-      5'h0d:
-          \io_out$next [2] = prns[13];
-      5'h0e:
-          \io_out$next [2] = prns[14];
-      5'h0f:
-          \io_out$next [2] = prns[15];
-      5'h10:
-          \io_out$next [2] = prns[16];
-      5'h11:
-          \io_out$next [2] = prns[17];
-      5'h12:
-          \io_out$next [2] = prns[18];
-      5'h13:
-          \io_out$next [2] = prns[19];
-      5'h14:
-          \io_out$next [2] = prns[20];
-      5'h15:
-          \io_out$next [2] = prns[21];
-      5'h16:
-          \io_out$next [2] = prns[22];
-      5'h17:
-          \io_out$next [2] = prns[23];
-      5'h18:
-          \io_out$next [2] = prns[24];
-      5'h19:
-          \io_out$next [2] = prns[25];
-      5'h1a:
-          \io_out$next [2] = prns[26];
-      5'h1b:
-          \io_out$next [2] = prns[27];
-      5'h1c:
-          \io_out$next [2] = prns[28];
-      5'h1d:
-          \io_out$next [2] = prns[29];
-      5'h1e:
-          \io_out$next [2] = prns[30];
-      5'h??:
-          \io_out$next [2] = prns[31];
-    endcase
-    casez (rst)
-      1'h1:
-          \io_out$next  = 8'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \g2$next  = { g2[8:0], \$11  };
-    casez (rst)
-      1'h1:
-          \g2$next  = 10'h3ff;
-    endcase
-  end
-  assign prns[31] = \$139 ;
-  assign prns[30] = \$135 ;
-  assign prns[29] = \$131 ;
-  assign prns[28] = \$127 ;
-  assign prns[27] = \$123 ;
-  assign prns[26] = \$119 ;
-  assign prns[25] = \$115 ;
-  assign prns[24] = \$111 ;
-  assign prns[23] = \$107 ;
-  assign prns[22] = \$103 ;
-  assign prns[21] = \$99 ;
-  assign prns[20] = \$95 ;
-  assign prns[19] = \$91 ;
-  assign prns[18] = \$87 ;
-  assign prns[17] = \$83 ;
-  assign prns[16] = \$79 ;
-  assign prns[15] = \$75 ;
-  assign prns[14] = \$71 ;
-  assign prns[13] = \$67 ;
-  assign prns[12] = \$63 ;
-  assign prns[11] = \$59 ;
-  assign prns[10] = \$55 ;
-  assign prns[9] = \$51 ;
-  assign prns[8] = \$47 ;
-  assign prns[7] = \$43 ;
-  assign prns[6] = \$39 ;
-  assign prns[5] = \$35 ;
-  assign prns[4] = \$31 ;
-  assign prns[3] = \$27 ;
-  assign prns[2] = \$23 ;
-  assign prns[1] = \$19 ;
-  assign prns[0] = \$15 ;
-  assign rst = io_in[1];
-  assign clk = io_in[0];
-endmodule
-
diff --git a/verilog/rtl/099_adc_dac.v b/verilog/rtl/099_adc_dac.v
deleted file mode 100644
index bcf005f..0000000
--- a/verilog/rtl/099_adc_dac.v
+++ /dev/null
@@ -1,605 +0,0 @@
-/* Generated by Yosys 0.22+1 (git sha1 c4a52b1b0, clang 14.0.0-1ubuntu1 -fPIC -Os) */
-
-module adamgreig_tt02_adc_dac(io_in, io_out);
-  reg \$auto$verilog_backend.cc:2083:dump_module$1  = 0;
-  wire adc_comp;
-  wire [11:0] adc_data;
-  wire adc_out;
-  wire [11:0] adc_uart_data;
-  wire adc_uart_ready;
-  wire adc_uart_tx_o;
-  wire adc_uart_valid;
-  wire clk;
-  wire [7:0] dac_data;
-  wire dac_out;
-  wire [7:0] dac_uart_data;
-  wire dac_uart_rx_i;
-  input [7:0] io_in;
-  wire [7:0] io_in;
-  output [7:0] io_out;
-  wire [7:0] io_out;
-  reg [9:0] ready_sr = 10'h000;
-  reg [9:0] \ready_sr$next ;
-  wire rst;
-  always @(posedge clk)
-    ready_sr <= \ready_sr$next ;
-  adc adc (
-    .clk(clk),
-    .comp(adc_comp),
-    .data(adc_data),
-    .out(adc_out),
-    .rst(rst)
-  );
-  adc_uart adc_uart (
-    .clk(clk),
-    .data(adc_uart_data),
-    .ready(adc_uart_ready),
-    .rst(rst),
-    .tx_o(adc_uart_tx_o),
-    .valid(adc_uart_valid)
-  );
-  \dac$1  dac (
-    .clk(clk),
-    .data(dac_data),
-    .out(dac_out),
-    .rst(rst)
-  );
-  dac_uart dac_uart (
-    .clk(clk),
-    .data(dac_uart_data),
-    .rst(rst),
-    .rx_i(dac_uart_rx_i)
-  );
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \ready_sr$next  = { ready_sr[8:0], adc_uart_ready };
-    casez (rst)
-      1'h1:
-          \ready_sr$next  = 10'h000;
-    endcase
-  end
-  assign dac_uart_rx_i = io_in[3];
-  assign dac_data = dac_uart_data;
-  assign adc_uart_valid = ready_sr[9];
-  assign adc_uart_data = adc_data;
-  assign io_out[2] = dac_out;
-  assign io_out[1] = adc_uart_tx_o;
-  assign io_out[0] = adc_out;
-  assign io_out[7:3] = 5'h00;
-  assign adc_comp = io_in[2];
-  assign rst = io_in[1];
-  assign clk = io_in[0];
-endmodule
-
-module adc(rst, comp, out, data, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$2  = 0;
-  wire [12:0] \$1 ;
-  wire [12:0] \$2 ;
-  wire [12:0] \$4 ;
-  wire [12:0] \$5 ;
-  input clk;
-  wire clk;
-  input comp;
-  wire comp;
-  wire [11:0] dac_data;
-  wire dac_out;
-  output [11:0] data;
-  reg [11:0] data = 12'h000;
-  reg [11:0] \data$next ;
-  output out;
-  wire out;
-  input rst;
-  wire rst;
-  assign \$2  = data - 1'h1;
-  assign \$5  = data + 1'h1;
-  always @(posedge clk)
-    data <= \data$next ;
-  dac dac (
-    .clk(clk),
-    .data(dac_data),
-    .out(dac_out),
-    .rst(rst)
-  );
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    (* full_case = 32'd1 *)
-    casez (comp)
-      1'h1:
-          \data$next  = \$2 [11:0];
-      default:
-          \data$next  = \$5 [11:0];
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 12'h000;
-    endcase
-  end
-  assign \$1  = \$2 ;
-  assign \$4  = \$5 ;
-  assign dac_data = data;
-  assign out = dac_out;
-endmodule
-
-module adc_uart(rst, tx_o, data, ready, valid, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$3  = 0;
-  wire \$1 ;
-  wire [8:0] \$10 ;
-  wire [7:0] \$3 ;
-  wire [6:0] \$4 ;
-  wire [8:0] \$7 ;
-  wire [7:0] \$8 ;
-  input clk;
-  wire clk;
-  input [11:0] data;
-  wire [11:0] data;
-  reg [11:0] data_reg = 12'h000;
-  reg [11:0] \data_reg$next ;
-  reg [2:0] fsm_state = 3'h0;
-  reg [2:0] \fsm_state$next ;
-  reg [3:0] nibble;
-  output ready;
-  reg ready;
-  input rst;
-  wire rst;
-  output tx_o;
-  wire tx_o;
-  reg [7:0] uart_data;
-  wire uart_ready;
-  wire uart_tx_o;
-  reg uart_valid;
-  input valid;
-  wire valid;
-  assign \$10  = \$8  - 4'ha;
-  always @(posedge clk)
-    data_reg <= \data_reg$next ;
-  always @(posedge clk)
-    fsm_state <= \fsm_state$next ;
-  assign \$1  = nibble < 4'ha;
-  assign \$4  = nibble + 6'h30;
-  assign \$3  = + \$4 ;
-  assign \$8  = nibble + 7'h41;
-  uart uart (
-    .clk(clk),
-    .data(uart_data),
-    .ready(uart_ready),
-    .rst(rst),
-    .tx_o(uart_tx_o),
-    .valid(uart_valid)
-  );
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    (* full_case = 32'd1 *)
-    casez (\$1 )
-      1'h1:
-          uart_data = \$3 ;
-      default:
-          uart_data = \$10 [7:0];
-    endcase
-    casez (fsm_state)
-      3'h0:
-          /* empty */;
-      3'h1:
-          /* empty */;
-      3'h2:
-          /* empty */;
-      3'h3:
-          /* empty */;
-      3'h4:
-          uart_data = 8'h0a;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    ready = 1'h0;
-    casez (fsm_state)
-      3'h0:
-          ready = uart_ready;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \data_reg$next  = data_reg;
-    casez (fsm_state)
-      3'h0:
-          \data_reg$next  = data;
-    endcase
-    casez (rst)
-      1'h1:
-          \data_reg$next  = 12'h000;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \fsm_state$next  = fsm_state;
-    casez (fsm_state)
-      3'h0:
-          casez (valid)
-            1'h1:
-                \fsm_state$next  = 3'h1;
-          endcase
-      3'h1:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h2;
-          endcase
-      3'h2:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h3;
-          endcase
-      3'h3:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h4;
-          endcase
-      3'h4:
-          casez (uart_ready)
-            1'h1:
-                \fsm_state$next  = 3'h0;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \fsm_state$next  = 3'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    nibble = 4'h0;
-    casez (fsm_state)
-      3'h0:
-          /* empty */;
-      3'h1:
-          nibble = data_reg[11:8];
-      3'h2:
-          nibble = data_reg[7:4];
-      3'h3:
-          nibble = data_reg[3:0];
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    uart_valid = 1'h0;
-    casez (fsm_state)
-      3'h0:
-          /* empty */;
-      3'h1:
-          uart_valid = 1'h1;
-      3'h2:
-          uart_valid = 1'h1;
-      3'h3:
-          uart_valid = 1'h1;
-      3'h4:
-          uart_valid = 1'h1;
-    endcase
-  end
-  assign \$7  = \$10 ;
-  assign tx_o = uart_tx_o;
-endmodule
-
-module dac(rst, out, data, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$4  = 0;
-  wire [12:0] \$1 ;
-  reg [12:0] acc = 13'h0000;
-  reg [12:0] \acc$next ;
-  input clk;
-  wire clk;
-  input [11:0] data;
-  wire [11:0] data;
-  output out;
-  wire out;
-  input rst;
-  wire rst;
-  assign \$1  = acc[11:0] + data;
-  always @(posedge clk)
-    acc <= \acc$next ;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$4 ) begin end
-    \acc$next  = \$1 ;
-    casez (rst)
-      1'h1:
-          \acc$next  = 13'h0000;
-    endcase
-  end
-  assign out = acc[12];
-endmodule
-
-module \dac$1 (rst, out, data, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$5  = 0;
-  wire [8:0] \$1 ;
-  reg [8:0] acc = 9'h000;
-  reg [8:0] \acc$next ;
-  input clk;
-  wire clk;
-  input [7:0] data;
-  wire [7:0] data;
-  output out;
-  wire out;
-  input rst;
-  wire rst;
-  assign \$1  = acc[7:0] + data;
-  always @(posedge clk)
-    acc <= \acc$next ;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \acc$next  = \$1 ;
-    casez (rst)
-      1'h1:
-          \acc$next  = 9'h000;
-    endcase
-  end
-  assign out = acc[8];
-endmodule
-
-module dac_uart(rst, data, rx_i, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$6  = 0;
-  wire \$1 ;
-  wire \$10 ;
-  wire [4:0] \$12 ;
-  wire [4:0] \$13 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire \$27 ;
-  wire [4:0] \$3 ;
-  wire [4:0] \$4 ;
-  wire \$6 ;
-  wire \$8 ;
-  reg [3:0] bit_idx = 4'h0;
-  reg [3:0] \bit_idx$next ;
-  input clk;
-  wire clk;
-  reg [3:0] ctr = 4'h0;
-  reg [3:0] \ctr$next ;
-  output [7:0] data;
-  reg [7:0] data = 8'h00;
-  reg [7:0] \data$next ;
-  reg fsm_state = 1'h0;
-  reg \fsm_state$next ;
-  input rst;
-  wire rst;
-  input rx_i;
-  wire rx_i;
-  reg [7:0] sr = 8'h00;
-  reg [7:0] \sr$next ;
-  reg valid = 1'h0;
-  reg \valid$next ;
-  assign \$10  = ~ rx_i;
-  assign \$13  = ctr - 1'h1;
-  assign \$15  = ! ctr;
-  assign \$17  = ~ rx_i;
-  assign \$1  = ! ctr;
-  assign \$19  = ! ctr;
-  assign \$21  = bit_idx == 4'h8;
-  assign \$23  = ! ctr;
-  assign \$25  = ! ctr;
-  assign \$27  = bit_idx == 4'h8;
-  always @(posedge clk)
-    bit_idx <= \bit_idx$next ;
-  always @(posedge clk)
-    valid <= \valid$next ;
-  always @(posedge clk)
-    ctr <= \ctr$next ;
-  always @(posedge clk)
-    fsm_state <= \fsm_state$next ;
-  always @(posedge clk)
-    sr <= \sr$next ;
-  always @(posedge clk)
-    data <= \data$next ;
-  assign \$4  = bit_idx + 1'h1;
-  assign \$6  = ! ctr;
-  assign \$8  = bit_idx == 4'h8;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \bit_idx$next  = bit_idx;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          \bit_idx$next  = 4'h0;
-      1'h1:
-          casez (\$1 )
-            1'h1:
-                \bit_idx$next  = \$4 [3:0];
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \bit_idx$next  = 4'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \valid$next  = valid;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          \valid$next  = 1'h0;
-      1'h1:
-          casez (\$6 )
-            1'h1:
-                casez (\$8 )
-                  1'h1:
-                      \valid$next  = 1'h1;
-                endcase
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \valid$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \ctr$next  = ctr;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          casez (\$10 )
-            1'h1:
-                \ctr$next  = 4'he;
-          endcase
-      1'h1:
-        begin
-          \ctr$next  = \$13 [3:0];
-          casez (\$15 )
-            1'h1:
-                \ctr$next  = 4'h9;
-          endcase
-        end
-    endcase
-    casez (rst)
-      1'h1:
-          \ctr$next  = 4'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \fsm_state$next  = fsm_state;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          casez (\$17 )
-            1'h1:
-                \fsm_state$next  = 1'h1;
-          endcase
-      1'h1:
-          casez (\$19 )
-            1'h1:
-                casez (\$21 )
-                  1'h1:
-                      \fsm_state$next  = 1'h0;
-                endcase
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \fsm_state$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \sr$next  = sr;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          /* empty */;
-      1'h1:
-          casez (\$23 )
-            1'h1:
-                \sr$next  = { rx_i, sr[7:1] };
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \sr$next  = 8'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \data$next  = data;
-    (* full_case = 32'd1 *)
-    casez (fsm_state)
-      1'h0:
-          /* empty */;
-      1'h1:
-          casez (\$25 )
-            1'h1:
-                casez (\$27 )
-                  1'h1:
-                      \data$next  = sr;
-                endcase
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 8'h00;
-    endcase
-  end
-  assign \$3  = \$4 ;
-  assign \$12  = \$13 ;
-endmodule
-
-module uart(rst, tx_o, data, ready, valid, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$7  = 0;
-  wire \$1 ;
-  wire \$3 ;
-  wire \$5 ;
-  wire [4:0] \$7 ;
-  wire [4:0] \$8 ;
-  input clk;
-  wire clk;
-  input [7:0] data;
-  wire [7:0] data;
-  output ready;
-  reg ready;
-  input rst;
-  wire rst;
-  reg [3:0] tx_cnt = 4'h0;
-  reg [3:0] \tx_cnt$next ;
-  output tx_o;
-  wire tx_o;
-  reg [9:0] tx_reg = 10'h001;
-  reg [9:0] \tx_reg$next ;
-  input valid;
-  wire valid;
-  always @(posedge clk)
-    tx_reg <= \tx_reg$next ;
-  always @(posedge clk)
-    tx_cnt <= \tx_cnt$next ;
-  assign \$1  = ! tx_cnt;
-  assign \$3  = ! tx_cnt;
-  assign \$5  = ! tx_cnt;
-  assign \$8  = tx_cnt - 1'h1;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$7 ) begin end
-    (* full_case = 32'd1 *)
-    casez (\$1 )
-      1'h1:
-          ready = 1'h1;
-      default:
-          ready = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$7 ) begin end
-    \tx_reg$next  = tx_reg;
-    (* full_case = 32'd1 *)
-    casez (\$3 )
-      1'h1:
-          casez (valid)
-            1'h1:
-                \tx_reg$next  = { 1'h1, data, 1'h0 };
-          endcase
-      default:
-          \tx_reg$next  = { 1'h1, tx_reg[9:1] };
-    endcase
-    casez (rst)
-      1'h1:
-          \tx_reg$next  = 10'h001;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$7 ) begin end
-    \tx_cnt$next  = tx_cnt;
-    (* full_case = 32'd1 *)
-    casez (\$5 )
-      1'h1:
-          casez (valid)
-            1'h1:
-                \tx_cnt$next  = 4'ha;
-          endcase
-      default:
-          \tx_cnt$next  = \$8 [3:0];
-    endcase
-    casez (rst)
-      1'h1:
-          \tx_cnt$next  = 4'h0;
-    endcase
-  end
-  assign \$7  = \$8 ;
-  assign tx_o = tx_reg[0];
-endmodule
-
diff --git a/verilog/rtl/099_jglim_7seg.v b/verilog/rtl/099_jglim_7seg.v
deleted file mode 100644
index eec8ba5..0000000
--- a/verilog/rtl/099_jglim_7seg.v
+++ /dev/null
@@ -1,15 +0,0 @@
-`default_nettype none
-
-module jglim_7seg(  
-    input [7:0] io_in,
-    output [7:0] io_out
-);
-
-hex7seg seg7(
-    .counter(io_in[3:0]), 
-    .dot(io_in[4]), 
-    .inv(io_in[5]), 
-    .segments(io_out[7:0])
-);
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/100_jglim_7seg.v b/verilog/rtl/100_jglim_7seg.v
deleted file mode 100644
index eec8ba5..0000000
--- a/verilog/rtl/100_jglim_7seg.v
+++ /dev/null
@@ -1,15 +0,0 @@
-`default_nettype none
-
-module jglim_7seg(  
-    input [7:0] io_in,
-    output [7:0] io_out
-);
-
-hex7seg seg7(
-    .counter(io_in[3:0]), 
-    .dot(io_in[4]), 
-    .inv(io_in[5]), 
-    .segments(io_out[7:0])
-);
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/102_alu.v b/verilog/rtl/102_alu.v
deleted file mode 100644
index 235e875..0000000
--- a/verilog/rtl/102_alu.v
+++ /dev/null
@@ -1,99 +0,0 @@
-`timescale 1ns / 1ps
-
-/* ALU Arithmetic and Logic Operations
-----------------------------------------------------------------------
-|opcode |   ALU Operation
-----------------------------------------------------------------------
-| 0000  |   ALU_Out = A + B;
-----------------------------------------------------------------------
-| 0001  |   ALU_Out = A - B;
-----------------------------------------------------------------------
-| 0010  |   ALU_Out = A * B;
-----------------------------------------------------------------------
-| 0011  |   ALU_Out = A / B;
-----------------------------------------------------------------------
-| 0100  |   ALU_Out = A << 1;
-----------------------------------------------------------------------
-| 0101  |   ALU_Out = A >> 1;
-----------------------------------------------------------------------
-| 0110  |   ALU_Out = A << B;
-----------------------------------------------------------------------
-| 0111  |   ALU_Out = A >> B;
-----------------------------------------------------------------------
-| 1000  |   ALU_Out = A and B;
-----------------------------------------------------------------------
-| 1001  |   ALU_Out = A or B;
-----------------------------------------------------------------------
-| 1010  |   ALU_Out = A xor B;
-----------------------------------------------------------------------
-| 1011  |   ALU_Out = A nor B;
-----------------------------------------------------------------------
-| 1100  |   ALU_Out = A nand B;
-----------------------------------------------------------------------
-| 1101  |   ALU_Out = A xnor B;
-----------------------------------------------------------------------
-| 1110  |   ALU_Out = 1 if A>B else 0;
-----------------------------------------------------------------------
-| 1111  |   ALU_Out = 1 if A=B else 0;
-----------------------------------------------------------------------*/
-
-module shan1293_2bitalu(
-           input [7:0] io_in,                  
-           output [7:0] io_out 
-    );
-         alu alu(
-            .A(io_in[7:6]), 
-            .B(io_in[5:4]), 
-            .opcode(io_in[3:0]), 
-            .ALU_Out(io_out[7:0])
-            );
-endmodule
-
-module alu(
-	input [1:0] A,
-	input [1:0] B,
-	input [3:0] opcode,
-	output [7:0] ALU_Out
-);
-
-    reg [7:0] ALU_Result;
-    assign ALU_Out = ALU_Result; // ALU out
-    always @(*)
-    begin
-        case(opcode)
-        4'b0000: // Addition
-           ALU_Result = A + B ; 
-        4'b0001: // Subtraction
-           ALU_Result = A - B ;
-        4'b0010: // Multiplication
-           ALU_Result = A * B;
-        4'b0011: // Division
-           ALU_Result = A/B;
-        4'b0100: // Logical shift left one time
-           ALU_Result = A<<1;
-         4'b0101: // Logical shift right one time
-           ALU_Result = A>>1;
-         4'b0110: // Logical shift left B times
-           ALU_Result = A<<B;
-         4'b0111: // Logical shift right B times
-           ALU_Result = A>>B;
-          4'b1000: //  Logical and 
-           ALU_Result = A & B;
-          4'b1001: //  Logical or
-           ALU_Result = A | B;
-          4'b1010: //  Logical xor 
-           ALU_Result = A ^ B;
-          4'b1011: //  Logical nor
-           ALU_Result = ~(A | B);
-          4'b1100: // Logical nand 
-           ALU_Result = ~(A & B);
-          4'b1101: // Logical xnor
-           ALU_Result = ~(A ^ B);
-          4'b1110: // Greater comparison
-           ALU_Result = (A>B)?4'd1:4'd0 ;
-          4'b1111: // Equal comparison   
-            ALU_Result = (A==B)?4'd1:4'd0 ;
-          default: ALU_Result = A + B ; 
-        endcase
-    end
- endmodule
\ No newline at end of file
diff --git a/verilog/rtl/103_alu.v b/verilog/rtl/103_alu.v
deleted file mode 100644
index 235e875..0000000
--- a/verilog/rtl/103_alu.v
+++ /dev/null
@@ -1,99 +0,0 @@
-`timescale 1ns / 1ps
-
-/* ALU Arithmetic and Logic Operations
-----------------------------------------------------------------------
-|opcode |   ALU Operation
-----------------------------------------------------------------------
-| 0000  |   ALU_Out = A + B;
-----------------------------------------------------------------------
-| 0001  |   ALU_Out = A - B;
-----------------------------------------------------------------------
-| 0010  |   ALU_Out = A * B;
-----------------------------------------------------------------------
-| 0011  |   ALU_Out = A / B;
-----------------------------------------------------------------------
-| 0100  |   ALU_Out = A << 1;
-----------------------------------------------------------------------
-| 0101  |   ALU_Out = A >> 1;
-----------------------------------------------------------------------
-| 0110  |   ALU_Out = A << B;
-----------------------------------------------------------------------
-| 0111  |   ALU_Out = A >> B;
-----------------------------------------------------------------------
-| 1000  |   ALU_Out = A and B;
-----------------------------------------------------------------------
-| 1001  |   ALU_Out = A or B;
-----------------------------------------------------------------------
-| 1010  |   ALU_Out = A xor B;
-----------------------------------------------------------------------
-| 1011  |   ALU_Out = A nor B;
-----------------------------------------------------------------------
-| 1100  |   ALU_Out = A nand B;
-----------------------------------------------------------------------
-| 1101  |   ALU_Out = A xnor B;
-----------------------------------------------------------------------
-| 1110  |   ALU_Out = 1 if A>B else 0;
-----------------------------------------------------------------------
-| 1111  |   ALU_Out = 1 if A=B else 0;
-----------------------------------------------------------------------*/
-
-module shan1293_2bitalu(
-           input [7:0] io_in,                  
-           output [7:0] io_out 
-    );
-         alu alu(
-            .A(io_in[7:6]), 
-            .B(io_in[5:4]), 
-            .opcode(io_in[3:0]), 
-            .ALU_Out(io_out[7:0])
-            );
-endmodule
-
-module alu(
-	input [1:0] A,
-	input [1:0] B,
-	input [3:0] opcode,
-	output [7:0] ALU_Out
-);
-
-    reg [7:0] ALU_Result;
-    assign ALU_Out = ALU_Result; // ALU out
-    always @(*)
-    begin
-        case(opcode)
-        4'b0000: // Addition
-           ALU_Result = A + B ; 
-        4'b0001: // Subtraction
-           ALU_Result = A - B ;
-        4'b0010: // Multiplication
-           ALU_Result = A * B;
-        4'b0011: // Division
-           ALU_Result = A/B;
-        4'b0100: // Logical shift left one time
-           ALU_Result = A<<1;
-         4'b0101: // Logical shift right one time
-           ALU_Result = A>>1;
-         4'b0110: // Logical shift left B times
-           ALU_Result = A<<B;
-         4'b0111: // Logical shift right B times
-           ALU_Result = A>>B;
-          4'b1000: //  Logical and 
-           ALU_Result = A & B;
-          4'b1001: //  Logical or
-           ALU_Result = A | B;
-          4'b1010: //  Logical xor 
-           ALU_Result = A ^ B;
-          4'b1011: //  Logical nor
-           ALU_Result = ~(A | B);
-          4'b1100: // Logical nand 
-           ALU_Result = ~(A & B);
-          4'b1101: // Logical xnor
-           ALU_Result = ~(A ^ B);
-          4'b1110: // Greater comparison
-           ALU_Result = (A>B)?4'd1:4'd0 ;
-          4'b1111: // Equal comparison   
-            ALU_Result = (A==B)?4'd1:4'd0 ;
-          default: ALU_Result = A + B ; 
-        endcase
-    end
- endmodule
\ No newline at end of file
diff --git a/verilog/rtl/104_pic.v b/verilog/rtl/104_pic.v
deleted file mode 100644
index 5c24e3c..0000000
--- a/verilog/rtl/104_pic.v
+++ /dev/null
@@ -1,199 +0,0 @@
-module pic10_core(input clock, reset, output [3:0] prog_adr, input [11:0] prog_data, input [3:0] gpi, output reg [7:0] gpo);
-    wire [7:0] reg_rdata;
-    reg [7:0] result;
-    reg [7:0] w;
-    reg [1:0] phase;
-    reg [3:0] pc;
-    reg [3:0] next_pc;
-    reg skip, next_skip, next_skip_zero;
-    reg reg_we, w_we;
-
-    assign prog_adr = pc;
-
-    always @(posedge clock, negedge reset)
-    begin
-        if (!reset) begin
-            phase <= 2'b0;
-        end else begin
-            phase <= phase + 1'b1;
-        end
-    end
-
-    always @(posedge clock, negedge reset)
-    begin
-        if (!reset) begin
-            pc <= 1'b0;
-            next_pc <= 1'b0;
-            w <= 1'b0;
-            next_skip <= 1'b0;
-        end else begin
-            if (phase == 0) begin
-                skip <= next_skip;
-                next_skip <= 1'b0;
-                next_skip_zero <= 1'b0;
-                reg_we <= 1'b0;
-                w_we <= 1'b0;
-                pc <= next_pc;
-            end else if (phase == 1) begin
-                next_pc <= prog_adr + 1'b1;
-                if (prog_data[11:10] == 2'b00) begin
-                    reg_we <= prog_data[5];
-                    w_we <= ~prog_data[5];
-                    case (prog_data[9:6])
-                        4'b0000: result <= w;
-                        4'b0001: result <= 0;
-                        4'b0010: result <= reg_rdata - w;
-                        4'b0011: result <= reg_rdata - 1;
-                        4'b0100: result <= reg_rdata | w;
-                        4'b0101: result <= reg_rdata & w;
-                        4'b0110: result <= reg_rdata ^ w;
-                        4'b0111: result <= reg_rdata + w;
-                        4'b1000: result <= reg_rdata;
-                        4'b1001: result <= ~reg_rdata;
-                        4'b1010: result <= reg_rdata + 1;
-                        4'b1011: begin result <= reg_rdata - 1; next_skip_zero <= 1'b1; end
-                        4'b1111: begin result <= reg_rdata + 1; next_skip_zero <= 1'b1; end
-                    endcase
-                end else if (prog_data[11:10] == 2'b01) begin
-                    reg_we <= 1'b1;
-                    case (prog_data[9:8])
-                        2'b00: result <= reg_rdata & ~(1 << prog_data[7:5]);
-                        2'b01: result <= reg_rdata | (1 << prog_data[7:5]);
-                        2'b10: begin result <= reg_rdata; next_skip <= ~reg_rdata[prog_data[7:5]]; end
-                        2'b11: begin result <= reg_rdata; next_skip <= reg_rdata[prog_data[7:5]]; end
-                    endcase
-                end else if (prog_data[11:10] == 2'b10) begin
-                    // no call, return
-                    if (!skip)
-                        next_pc <= prog_data[3:0];
-                end else if (prog_data[11:10] == 2'b11) begin
-                    w_we <= 1'b1;
-                    case (prog_data[9:8])
-                        2'b00: result <= prog_data[7:0];
-                        2'b01: result <= prog_data[7:0] | w;
-                        2'b10: result <= prog_data[7:0] & w;
-                        2'b11: result <= prog_data[7:0] ^ w;
-                    endcase
-                end
-            end else if (phase == 2) begin
-                if (next_skip_zero) begin
-                    next_skip <= (result == 0);
-                end
-                if (!skip) begin
-                    if (w_we)
-                        w <= result;
-                end
-            end else if (phase == 3) begin
-                // ...
-            end
-        end
-    end
-
-    wire [2:0] reg_addr = prog_data[2:0];
-    always @(posedge clock) begin
-        if (reg_we && regf_we && (reg_addr == 7))
-            gpo <= result;
-    end
-
-    wire [7:0] regf_data[0:7];
-    assign regf_data[6] = {4'b0000, gpi};
-    assign regf_data[7] = gpo;
-
-    assign reg_rdata = regf_data[reg_addr];
-
-    // register file
-    wire regf_we = phase[1] & !skip;
-
-    generate
-        genvar ii, jj;
-        for (ii = 0; ii < 6; ii = ii + 1'b1) begin:word
-            wire word_we;
-            sky130_fd_sc_hd__and3_1 word_we_i ( // make sure this is really glitch free
-                .A(reg_addr[2:0] == ii),
-                .B(regf_we),
-                .C(reg_we),
-                .X(word_we)
-            );
-            for (jj = 0; jj < 8; jj = jj + 1'b1) begin:bits
-                sky130_fd_sc_hd__dlrtp_1 rfbit_i (
-                    .GATE(word_we),
-                    .RESET_B(reset),
-                    .D(result[jj]),
-                    .Q(regf_data[ii][jj])
-                );
-            end
-        end
-    endgenerate
-
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__dlrtp_1(input GATE, RESET_B, D, output reg Q);
-    always @*
-        if (~RESET_B)
-            Q <= 0;
-        else if (GATE)
-            Q <= D;
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__dlxtp_1(input GATE, D, output reg Q);
-    always @*
-        if (GATE)
-            Q <= D;
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__and3_1(input A, B, C, output X);
-    assign X = A & B & C;
-endmodule
-
-// latch based program memory
-module pic_progmem(input clock, write_data, write_strobe, input [3:0] adr, output [11:0] rdata);
-    localparam K = 16;
-
-    // the program logic
-    reg [27:0] write_sr;
-    always @(posedge clock)
-        write_sr <= {write_data, write_sr[27:1]};
-
-    wire [11:0] data[0:K-1];
-    generate
-        genvar ii, jj;
-        for (ii = 0; ii < K; ii = ii + 1'b1) begin:word
-            for (jj = 0; jj < 12; jj = jj + 1'b1) begin:bits
-                sky130_fd_sc_hd__dlxtp_1 rfbit_i (
-                    .GATE(write_sr[ii + 12] && write_strobe),
-                    .D(write_sr[jj]),
-                    .Q(data[ii][jj])
-                );
-            end
-        end
-    endgenerate
-    assign rdata = data[adr];
-endmodule
-
-module tiny_kinda_pic(input [7:0] io_in, output [7:0] io_out);
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-
-    wire [3:0] prog_adr;
-    wire [11:0] prog_data;
-    pic10_core pic_i (
-        .clock(clk),
-        .reset(reset),
-        .prog_adr(prog_adr),
-        .prog_data(prog_data),
-        .gpi(io_in[7:4]),
-        .gpo(io_out)
-    );
-
-    pic_progmem progmem_i (
-        .clock(clk),
-        .write_strobe(io_in[2]),
-        .write_data(io_in[3]),
-        .adr(prog_adr),
-        .rdata(prog_data)
-    );
-
-endmodule
diff --git a/verilog/rtl/105_browndeer_rv8u.v b/verilog/rtl/105_browndeer_rv8u.v
deleted file mode 100644
index a1ed38b..0000000
--- a/verilog/rtl/105_browndeer_rv8u.v
+++ /dev/null
@@ -1,781 +0,0 @@
-/* browndeer_rv8u.v
- *
- * Copyright (c) 2022 Brown Deer Technology, LLC. (www.browndeertechnology.com)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *    https://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* DAR */
-
-/*
- * RV8U - 8-bit RISC-V Microcore Processor
- *
- * The rv8u (Barentsburg core) is a custom 8-bit RISC-V core supporting 
- * 8-bit data operations with instructions encoded into 16-bit double-words.
- * The core supports the full RISC-V base ISA with the following exceptions.
- * Register file is reduced to 8 registers, with rs2 access limited to x0-x3.
- * Additionally the auipc instruction was removed.  The non-standard ISA
- * designation 'u' was chosen to mean 'microcore' since the core is very small.
- * Programming is supported by a custom assembler we use for developing custom
- * RISC-V cores.  A simple post-processor could be written for other assemblers
- * to directly map instructions generated for the rv32i base ISA, if the
- * assembly instrucitons comply with the reduced rv8u ISA limitations.
- *
- * Pin definitions:
- * input 	in_clk			base serdes clock
- * input		io_in[1]			reset
- * input		io_in[7:2]		6-bit serdes input
- * output	io_out[7:0]		8-bit serdes output
- * 
- */
-
-//module barentsburg_core(
-module browndeer_rv8u(
-
-//	input in_clk,
-//	input [7:1] io_in,
-	input [7:0] io_in, // ZZZ
-	output [7:0] io_out
-
-//	output [BITS-3:0] debug_pc,
-//	output [IBITS-1:0] debug_instr,
-//	output [3:0] debug_valid_out,
-//
-//	input [RBITS-1:0] debug_reg_sel,
-//	output reg [BITS-1:0] debug_reg_dout
-	
-);
-
-	wire in_clk; // ZZZ
-
-	///////////////////////////////////////////////////////////////////////////
-
-	////////////////////////////////
-	////////// Parameters //////////
-	////////////////////////////////
-
-	parameter BITS = 8;
-	parameter IBITS = 16;
-	parameter RBITS = 3;
-	parameter NREG = 8;
-
-	///////////////////////////////////////////////////////////////////////////
-
-	//////////////////////////////////
-	////////// Declarations //////////
-	//////////////////////////////////
-
-	/// pipeline control
-	wire inval;
-	wire valid_out0;
-
-	wire valid_out1;
-
-	reg valid_out3;
-
-	/// flow control
-	reg [BITS-3:0] pc;
-	reg [BITS-3:0] pc_1;
-	reg [BITS-3:0] pc_2;
-	wire pc_jump;
-	reg [BITS-3:0] jump_addr;
-
-	/// instr
-	reg [IBITS-1:0] instr;
-	reg [IBITS-1:0] instr_2;
-
-	/// hazard
-	reg [NREG-1:0] ldr_hzd;
-
-	/// reg control
-//	reg [RBITS-1:0] rd;
-//	reg [RBITS-1:0] rs1;
-//	reg [RBITS-1:0] rs2;
-//	reg [RBITS-1:0] rs3;
-	wire [RBITS-1:0] rd;
-	wire [RBITS-1:0] rs1;
-	wire [RBITS-1:0] rs2;
-	wire reg_we;
-	wire reg_we_arb;
-	reg [BITS-1:0] rd_din;
-	reg [BITS-1:0] nxt_rd_din;
-	reg [RBITS-1:0] rd_sel_arb;
-	reg [BITS-1:0] rs1_dout;
-	reg [BITS-1:0] rs2_dout;
-	reg [RBITS-1:0] rd_3;
-
-	/// imm operand
-	wire ri;
-	reg [BITS-1:0] imm;
-
-	/// reg dependency
-	wire use_rd_e1;
-	wire use_rd_e2;
-	wire use_rs1;
-	wire use_rs2;
-
-	/// IALU
-	reg [3:0] op;
-	wire [BITS-1:0] op_result;
-	wire cc_zero;
-	wire cc_neg;
-	wire cc_v;
-
-	/// ins_
-	wire reg_wen;
-	wire ins_br;
-	wire ins_jal;
-	wire ins_jalr;
-	wire ins_str;
-	wire ins_ldr;
-	wire ins_halt;
-	wire ins_lui;
-	reg ins_ldr_3;
-
-	reg ri_3;
-
-	/// bits alias probably not necessary
-	reg [2:0] funct3;
-
-	///////////////////////////////////////////////////////
-	////////// Declarations PIPELINE_STAGE_0_ILR //////////
-	///////////////////////////////////////////////////////
-
-	// pipeline control
-	reg nxt_valid0;
-
-	// flow control
-	reg [BITS-3:0] pc0;
-	reg [BITS-3:0] nxt_pc, nxt_pc0;
-
-	reg valid0;
-
-	///////////////////////////////////////////////////////
-	/////////// Declarations PIPELINE STAGE 1 IL //////////
-	///////////////////////////////////////////////////////
-
-	wire [IBITS-1:0] nxt_instr;
-	reg valid1;
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// Declarations PIPELINE STAGE 2 ID ///////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	wire en2;
-
-//	reg [2:0] imm210;
-	reg [3:0] imm3210;
-
-	reg valid2;
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// Pipeline Stage 3 E1 Declarations ///////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	wire [BITS-1:0] arg0;
-	reg [BITS-1:0] arg1;
-
-	reg stall;
-
-	reg ben;
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// Pipeline Stage 4 E2 Declarations ///////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	wire en4;
-
-	//////////////////////////////////////////////
-	////////// ISA Decoder Declarations //////////
-	//////////////////////////////////////////////
-
-	wire rv_itype, rv_stype, rv_btype;
-	wire rv_op, rv_op_imm;
-
-	///////////////////////////////////////
-	////////// IALU Declarations //////////
-	///////////////////////////////////////
-
-	wire [BITS-1:0] a_result_sub;
-	wire [BITS-1:0] a_result_srl;
-	reg [BITS-1:0] a_result;
-	reg [7:0] a_sx;
-	reg [BITS-1:0] a_sign_extend;
-	wire [4:0] a_shamt;
-
-	wire run;
-	wire run_not_stall;
-
-	assign run = (~ rst);
-	assign run_not_stall = run & (~ stall);
-
-
-   /////////////////////////
-   ////////// DES //////////
-   /////////////////////////
-
-//   reg des_clk_out;
-   wire des_clk_out;
-   wire [5:0] des_sin;
-//   reg [7:0] des_sout;
-   wire [7:0] des_sout;
-   wire [31:0] des_din;
-   wire [23:0] des_dout;
-//   reg [2:0] des_counter;
-//   reg des_clk_en;
-
-   //////////////////////////
-   ////////// core //////////
-   //////////////////////////
-
-   wire clk;
-   wire rst;
-   reg halt;
-   wire [BITS-3:0] imem_addr;
-   wire [IBITS-1:0] imem_dout;
-   wire [BITS-1:0] dmem_addr;
-   wire [BITS-1:0] dmem_din;
-   wire [BITS-1:0] dmem_dout;
-   wire dmem_we;
-   wire dmem_en;
-
-
-   ///////////////////////////////////////////////////////////////////////////
-
-   ///////////////////////////////////////////////////////////////////////////
-   //////////   DES   ////////////////////////////////////////////////////////
-   ///////////////////////////////////////////////////////////////////////////
-
-	des des(
-   	.in_clk (in_clk),
-   	.rst (rst),
-   	.des_sin (des_sin),
-   	.des_sout (des_sout),
-   	.des_din (des_din),
-   	.des_dout (des_dout),
-   	.des_clk_out (des_clk_out)
-	);
-
-   assign in_clk = io_in[0]; // ZZZ
-   assign rst = io_in[1];
-   assign des_sin = io_in[7:2];
-
-   assign io_out = des_sout;
-
-
-   assign clk = des_clk_out;
-
-   assign imem_dout[15:0] = des_dout[15:0];
-   assign dmem_dout = des_dout[23:16];
-
-   assign des_din[5:0] = imem_addr;
-   assign des_din[13:6] = dmem_addr;
-   assign des_din[21:14] = dmem_din;
-   assign des_din[22] = dmem_we;
-   assign des_din[23] = dmem_en;
-   assign des_din[24] = halt;
-
-	assign des_din[31:25] = 7'd0;
-
-	///////////////////////////////////////////////////////////////////////////
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 0 (ILR)   /////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// pipeline control ///
-
-	assign valid_out0 = valid0 & ~ inval;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			valid0 <= 0;
-		end
-		else if (run) begin
-			if (stall) 
-				valid0 <= valid_out0;
-			else
-				valid0 <= 1;
-		end
-		else begin
-			valid0 <= valid_out0;
-		end
-	end
-
-
-	/// flow control ///
-
-	always @ (*)
-	begin
-		if (pc_jump) begin
-			nxt_pc0 = jump_addr;
-			nxt_pc = jump_addr + 1;
-		end
-		else if (stall) begin
-			nxt_pc0 = pc0;
-			nxt_pc = pc;
-		end
-		else begin
-			nxt_pc0 = pc;
-			nxt_pc = pc + 1;
-		end
-	end
-	assign imem_addr = nxt_pc0;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			pc0 <= 0;
-			pc <= 0;
-		end
-		else if (run) begin
-			pc0 <= nxt_pc0;
-			pc <= nxt_pc;
-		end
-		else begin
-			pc0 <= pc0;
-			pc <= pc;
-		end
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 1 (IL)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// pipeline control ///
-
-	assign valid_out1 = valid1 & ~ inval;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			valid1 <= 0;
-			pc_1 <= 0;
-		end
-		else if (run_not_stall) begin
-			valid1 <= valid_out0;
-			pc_1 <= pc;
-		end
-		else begin
-			valid1 <= valid_out1;
-			pc_1 <= pc_1;
-		end
-	end
-
-
-	/// generate instruction ///
-
-	assign nxt_instr = imem_dout[IBITS-1:0];
-
-	always @ (posedge clk)
-	begin
-		if (rst) 
-			instr <= 0;
-		else if (run_not_stall & valid_out0) 
-			instr <= nxt_instr;
-		else 
-			instr <= instr;
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 2 (ID)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// pipeline control ///
-
-	assign en2 = valid_out1;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			valid2 <= 0;
-		end
-		else if (run_not_stall) begin
-			valid2 <= valid_out1;
-		end
-		else begin
-			valid2 <= valid2;
-		end
-	end
-
-
-	/// pc, instr data flow
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			pc_2 <= 0;
-			instr_2 <= 0;
-		end
-		else if (run_not_stall) begin
-			pc_2 <= pc_1;
-         if (valid_out1)
-            instr_2 <= instr;
-         else
-            instr_2 <= 16'hffff;
-		end
-		else begin
-			pc_2 <= pc_2;
-			instr_2 <= instr_2;
-		end
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 3 (E1)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-
-	always @ (posedge clk)
-	begin
-		if (rst)
-			valid_out3 <= 0;
-		else if (run_not_stall)
-			valid_out3 <= valid2;
-		else if (run & en4)
-			valid_out3 <= 0;
-		else
-			valid_out3 <= valid_out3;
-	end
-
-	assign rd = instr_2[5:3];
-	assign funct3 = instr_2[8:6];
-	assign rs1 = instr_2[11:9];
-	assign rs2[1:0] = instr_2[13:12];
-	assign rs2[2] = 0;
-
-	assign ins_lui	 		= (instr_2[2:0] == 3'b111);
-	assign ins_jal		 	= (instr_2[2:0] == 3'b110);
-	assign ins_jalr	 	= (instr_2[2:0] == 3'b100);
-	assign rv_op_imm 		= (instr_2[2:0] == 3'b001);
-	assign rv_op	 		= (instr_2[2:0] == 3'b011);
-	assign ins_br	 		= (instr_2[2:0] == 3'b010);
-	assign ins_ldr 		= ((instr_2[2:0] == 3'b000) & (~ funct3[2]));
-	assign ins_str 		= ((instr_2[2:0] == 3'b000) & funct3[2]);
-
-	assign use_rd_e1 = reg_wen | ins_jal | ins_jalr | ins_lui;
-	assign use_rd_e2 = (~ funct3[2]) & ins_ldr;
-	assign use_rs1 = ins_ldr | reg_wen | ins_jalr | ins_br | ins_str;
-	assign use_rs2 = (reg_wen & ~ ri_3) | ins_br | ins_str;
-
-	assign ins_halt 		= (instr_2[2:0] == 3'b000) & (funct3 == 3'b000);
-
-	assign rv_itype = ins_ldr | rv_op_imm | ins_jalr;
-	assign rv_stype = ins_str;
-	assign rv_btype = ins_br;
-
-	assign ri = rv_itype | rv_stype;
-	assign reg_wen = rv_op | rv_op_imm;
-
-	always @ (*)
-	begin
-		if (ins_str | ins_ldr | ins_br)
-			op[2:0] = 3'b000;
-		else 
-			op[2:0] = funct3;
-
-		op[3] = ins_br | ((rv_op | ( rv_op_imm & funct3[2])) & instr_2[15]);
-	end
-
-	always @ (*)
-	begin
-		if (rv_itype)
-			imm3210 = { instr_2[15:12] };
-		else
-			imm3210 = { instr_2[14], instr_2[5:3] };
-	end
-	
-	always @ (*)
-	begin
-		if (rv_itype|rv_btype|rv_stype)
-			imm = { instr_2[15], instr_2[15], instr_2[15], instr_2[15], imm3210 };
-		else
-			imm = instr_2[13:6];
-	end
-
-
-	assign reg_we = valid2
-		& (reg_wen|ins_jal|ins_jalr|ins_lui) & (~ stall);
-
-	assign dmem_we = valid2 & ins_str & (~ stall);
-
-	assign arg0 = rs1_dout;
-
-	always @ (*)
-	begin
-		if (ri) begin
-			arg1 = imm[BITS-1:0];
-		end
-		else
-			arg1 = rs2_dout;
-	end
-
-
-	/// IALU ///
-
-	assign a_shamt = arg1[4:0];
-
-	assign a_result_sub = arg0 - arg1;
-
-	assign a_result_srl = arg0 >> a_shamt;
-
-	always @ (*)
-	begin
-		case (arg1[2:0])
-			3'b000: a_sx = 8'b00000000;
-			3'b001: a_sx = 8'b10000000;
-			3'b010: a_sx = 8'b11000000;
-			3'b011: a_sx = 8'b11100000;
-			3'b100: a_sx = 8'b11110000;
-			3'b101: a_sx = 8'b11111000;
-			3'b110: a_sx = 8'b11111100;
-			3'b111: a_sx = 8'b11111110;
-		endcase
-		if (arg0[BITS-1])
-			a_sign_extend = a_sx;
-		else
-			a_sign_extend = 8'd0;
-	end
-
-
-	always @ (*)
-	begin
-		case (op[2:0])
-
-			3'b000: begin
-				if (op[3]) 
-					a_result = a_result_sub;
-				else
-					a_result = arg0 + arg1;
-			end
-
-			3'b001: begin
-				a_result = arg0 << a_shamt; // sll
-			end
-
-			3'b010: begin
-				a_result = { 7'd0, cc_neg }; // slt
-			end
-
-			3'b011: begin
-				a_result = { 7'd0, cc_v}; // sltu
-			end
-
-			3'b100: begin
-				a_result = arg0 ^ arg1; // xor
-			end
-
-			3'b101: begin
-				if (op[3])
-					a_result = a_sign_extend | a_result_srl; // sra
-				else
-					a_result = a_result_srl; // srl
-			end
-
-			3'b110: begin
-				a_result = arg0 | arg1;
-			end
-
-			3'b111: begin
-				a_result = arg0 & arg1;
-			end
-
-		endcase
-	end
-
-	assign cc_neg = a_result_sub[BITS-1];
-	assign cc_zero = (a_result_sub == 0);
-	assign cc_v = ( cc_neg & ~(arg0[BITS-1] ^ arg1[BITS-1])) 
-		| ((~arg0[BITS-1]) & arg1[BITS-1] );
-
-	assign op_result = a_result;
-
-
-	assign dmem_addr = op_result[BITS-1:0];
-	assign dmem_din[BITS-1:0] = rs2_dout;
-	assign dmem_en = (ins_str | ins_ldr) & valid2 & (~ stall);
-
-	always @ (*)
-	begin
-		if (ins_lui)
-//			rd_din = { imm[1:0], 6'd0 };
-			rd_din = { imm[4:0], 3'd0 };
-		else if (ins_jal|ins_jalr) 
-			rd_din = { 2'b00, pc_2 };
-		else
-			rd_din = op_result;
-	end
-
-	always @ (*)
-	begin
-		case(funct3) 
-			3'b000 : ben = cc_zero;	// eq
-			3'b001 : ben = (~cc_zero); // ne
-			3'b010 : ben = 0;
-			3'b011 : ben = 0;
-			3'b100 : ben = cc_neg; // lt
-			3'b101 : ben = (cc_zero | (~cc_neg)); // ge
-			3'b110 : ben = cc_v; // ltu
-			3'b111 : ben = (cc_zero | (~cc_v)); // geu
-		endcase
-	end
-
-
-	always @ (*)
-	begin
-		if (ins_jalr)
-//			jump_addr = op_result[BITS-1:2];
-			jump_addr = op_result[BITS-3:0];
-		else
-			jump_addr = pc_2 + { imm[BITS-3:0] };
-	end
-	assign pc_jump = valid2 & ((ben & ins_br) | ins_jal | ins_jalr);
-
-	assign inval = pc_jump & (~ stall);
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			halt <= 0;
-		end
-		else if (run_not_stall & valid2) begin
-			halt <= ins_halt;
-		end
-		else begin
-			halt <= halt;
-		end
-	end
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			ins_ldr_3 <= 0;
-			rd_3 <= 0;
-			ri_3 <= 0;
-		end
-		else if (run_not_stall) begin
-			ins_ldr_3 <= ins_ldr;
-			rd_3 <= rd;
-			ri_3 <= ri;
-		end
-		else begin
-			ins_ldr_3 <= ins_ldr_3;
-			rd_3 <= rd_3;
-			ri_3 <= ri_3;
-		end
-	end
-
-	always @ (*)
-	begin
-	
-		if ( ldr_hzd == 'd0 )
-			stall = 0;
-		else if ( (use_rs1 & ldr_hzd[rs1]) | (use_rs2 & ldr_hzd[rs2])) // RAW HZD
-			stall = 1;
-		else if ( (use_rd_e2 & ldr_hzd[rd]) | (use_rd_e1) ) // WAW conflict
-			stall = 1;
-		else 
-			stall = 0;
-
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 4 (E2)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-  	assign en4 = valid_out3 & (ins_ldr_3 );
-
-   always @ (*)
-   begin
-
-      if (en4 & ins_ldr_3) begin
-         rd_sel_arb = rd_3;
-      end
-      else begin
-         rd_sel_arb = rd;
-      end
-
-   end
-	assign reg_we_arb = reg_we | (en4 & ins_ldr_3);
-
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// REGISTERS //////////////////////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// write register
-
-	always @ (*)
-	begin
-      	if (en4 & ins_ldr_3) begin
-    	     nxt_rd_din = dmem_dout[BITS-1:0];
-    	  end
-    	  else begin
-    	     nxt_rd_din = rd_din;
-    	  end
-	end
-
-	registers registers(
-   	.clk (clk),
-   	.run (run),
-   	.we (reg_we_arb),
-   	.rd (rd_sel_arb),
-   	.rs1 (rs1),
-   	.rs2 (rs2),
-   	.rd_din (nxt_rd_din),
-   	.rs1_dout (rs1_dout),
-   	.rs2_dout (rs2_dout)
-
-//   	.debug_reg_sel (debug_reg_sel),
-//   	.debug_reg_dout (debug_reg_dout)
-	);
-
-	///////////////////////////////////////////////////////////////////////////
-
-	/////////////////////////////
-	////////   Hazard   ////////
-	/////////////////////////////
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			ldr_hzd <= 0;
-		end
-		else if (run)
-			if (( ~(rd==0)) & (ins_ldr )  & ~ stall) begin
-				ldr_hzd <= ('d1 << rd);
-			end
-			else begin
-				ldr_hzd <= 0;
-			end
-		else begin
-			ldr_hzd <= ldr_hzd;
-		end
-	end
-
-	
-	///////////////////////////////////////////////////////////////////////////
-
-	///////////////////////////
-	////////   DEBUG   ////////
-	///////////////////////////
-
-//	assign debug_pc = pc_2;
-//	assign debug_instr[15:0] = instr_2;
-//	assign debug_valid_out = { valid_out0, valid_out1, valid2, valid_out3 };
-
-endmodule
diff --git a/verilog/rtl/105_pic.v b/verilog/rtl/105_pic.v
deleted file mode 100644
index 5c24e3c..0000000
--- a/verilog/rtl/105_pic.v
+++ /dev/null
@@ -1,199 +0,0 @@
-module pic10_core(input clock, reset, output [3:0] prog_adr, input [11:0] prog_data, input [3:0] gpi, output reg [7:0] gpo);
-    wire [7:0] reg_rdata;
-    reg [7:0] result;
-    reg [7:0] w;
-    reg [1:0] phase;
-    reg [3:0] pc;
-    reg [3:0] next_pc;
-    reg skip, next_skip, next_skip_zero;
-    reg reg_we, w_we;
-
-    assign prog_adr = pc;
-
-    always @(posedge clock, negedge reset)
-    begin
-        if (!reset) begin
-            phase <= 2'b0;
-        end else begin
-            phase <= phase + 1'b1;
-        end
-    end
-
-    always @(posedge clock, negedge reset)
-    begin
-        if (!reset) begin
-            pc <= 1'b0;
-            next_pc <= 1'b0;
-            w <= 1'b0;
-            next_skip <= 1'b0;
-        end else begin
-            if (phase == 0) begin
-                skip <= next_skip;
-                next_skip <= 1'b0;
-                next_skip_zero <= 1'b0;
-                reg_we <= 1'b0;
-                w_we <= 1'b0;
-                pc <= next_pc;
-            end else if (phase == 1) begin
-                next_pc <= prog_adr + 1'b1;
-                if (prog_data[11:10] == 2'b00) begin
-                    reg_we <= prog_data[5];
-                    w_we <= ~prog_data[5];
-                    case (prog_data[9:6])
-                        4'b0000: result <= w;
-                        4'b0001: result <= 0;
-                        4'b0010: result <= reg_rdata - w;
-                        4'b0011: result <= reg_rdata - 1;
-                        4'b0100: result <= reg_rdata | w;
-                        4'b0101: result <= reg_rdata & w;
-                        4'b0110: result <= reg_rdata ^ w;
-                        4'b0111: result <= reg_rdata + w;
-                        4'b1000: result <= reg_rdata;
-                        4'b1001: result <= ~reg_rdata;
-                        4'b1010: result <= reg_rdata + 1;
-                        4'b1011: begin result <= reg_rdata - 1; next_skip_zero <= 1'b1; end
-                        4'b1111: begin result <= reg_rdata + 1; next_skip_zero <= 1'b1; end
-                    endcase
-                end else if (prog_data[11:10] == 2'b01) begin
-                    reg_we <= 1'b1;
-                    case (prog_data[9:8])
-                        2'b00: result <= reg_rdata & ~(1 << prog_data[7:5]);
-                        2'b01: result <= reg_rdata | (1 << prog_data[7:5]);
-                        2'b10: begin result <= reg_rdata; next_skip <= ~reg_rdata[prog_data[7:5]]; end
-                        2'b11: begin result <= reg_rdata; next_skip <= reg_rdata[prog_data[7:5]]; end
-                    endcase
-                end else if (prog_data[11:10] == 2'b10) begin
-                    // no call, return
-                    if (!skip)
-                        next_pc <= prog_data[3:0];
-                end else if (prog_data[11:10] == 2'b11) begin
-                    w_we <= 1'b1;
-                    case (prog_data[9:8])
-                        2'b00: result <= prog_data[7:0];
-                        2'b01: result <= prog_data[7:0] | w;
-                        2'b10: result <= prog_data[7:0] & w;
-                        2'b11: result <= prog_data[7:0] ^ w;
-                    endcase
-                end
-            end else if (phase == 2) begin
-                if (next_skip_zero) begin
-                    next_skip <= (result == 0);
-                end
-                if (!skip) begin
-                    if (w_we)
-                        w <= result;
-                end
-            end else if (phase == 3) begin
-                // ...
-            end
-        end
-    end
-
-    wire [2:0] reg_addr = prog_data[2:0];
-    always @(posedge clock) begin
-        if (reg_we && regf_we && (reg_addr == 7))
-            gpo <= result;
-    end
-
-    wire [7:0] regf_data[0:7];
-    assign regf_data[6] = {4'b0000, gpi};
-    assign regf_data[7] = gpo;
-
-    assign reg_rdata = regf_data[reg_addr];
-
-    // register file
-    wire regf_we = phase[1] & !skip;
-
-    generate
-        genvar ii, jj;
-        for (ii = 0; ii < 6; ii = ii + 1'b1) begin:word
-            wire word_we;
-            sky130_fd_sc_hd__and3_1 word_we_i ( // make sure this is really glitch free
-                .A(reg_addr[2:0] == ii),
-                .B(regf_we),
-                .C(reg_we),
-                .X(word_we)
-            );
-            for (jj = 0; jj < 8; jj = jj + 1'b1) begin:bits
-                sky130_fd_sc_hd__dlrtp_1 rfbit_i (
-                    .GATE(word_we),
-                    .RESET_B(reset),
-                    .D(result[jj]),
-                    .Q(regf_data[ii][jj])
-                );
-            end
-        end
-    endgenerate
-
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__dlrtp_1(input GATE, RESET_B, D, output reg Q);
-    always @*
-        if (~RESET_B)
-            Q <= 0;
-        else if (GATE)
-            Q <= D;
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__dlxtp_1(input GATE, D, output reg Q);
-    always @*
-        if (GATE)
-            Q <= D;
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__and3_1(input A, B, C, output X);
-    assign X = A & B & C;
-endmodule
-
-// latch based program memory
-module pic_progmem(input clock, write_data, write_strobe, input [3:0] adr, output [11:0] rdata);
-    localparam K = 16;
-
-    // the program logic
-    reg [27:0] write_sr;
-    always @(posedge clock)
-        write_sr <= {write_data, write_sr[27:1]};
-
-    wire [11:0] data[0:K-1];
-    generate
-        genvar ii, jj;
-        for (ii = 0; ii < K; ii = ii + 1'b1) begin:word
-            for (jj = 0; jj < 12; jj = jj + 1'b1) begin:bits
-                sky130_fd_sc_hd__dlxtp_1 rfbit_i (
-                    .GATE(write_sr[ii + 12] && write_strobe),
-                    .D(write_sr[jj]),
-                    .Q(data[ii][jj])
-                );
-            end
-        end
-    endgenerate
-    assign rdata = data[adr];
-endmodule
-
-module tiny_kinda_pic(input [7:0] io_in, output [7:0] io_out);
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-
-    wire [3:0] prog_adr;
-    wire [11:0] prog_data;
-    pic10_core pic_i (
-        .clock(clk),
-        .reset(reset),
-        .prog_adr(prog_adr),
-        .prog_data(prog_data),
-        .gpi(io_in[7:4]),
-        .gpo(io_out)
-    );
-
-    pic_progmem progmem_i (
-        .clock(clk),
-        .write_strobe(io_in[2]),
-        .write_data(io_in[3]),
-        .adr(prog_adr),
-        .rdata(prog_data)
-    );
-
-endmodule
diff --git a/verilog/rtl/106_browndeer_rv8u.v b/verilog/rtl/106_browndeer_rv8u.v
deleted file mode 100644
index 4cd5f38..0000000
--- a/verilog/rtl/106_browndeer_rv8u.v
+++ /dev/null
@@ -1,770 +0,0 @@
-/* browndeer_rv8u.v
- *
- * Copyright (c) 2022 Brown Deer Technology, LLC. (www.browndeertechnology.com)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *    https://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* DAR */
-
-/*
- * RV8U - 8-bit RISC-V Microcore Processor
- *
- * The rv8u (Barentsburg core) is a custom 8-bit RISC-V core supporting 
- * 8-bit data operations with instructions encoded into 16-bit double-words.
- * The core supports the full RISC-V base ISA with the following exceptions.
- * Register file is reduced to 8 registers, with rs2 access limited to x0-x3.
- * Additionally the auipc instruction was removed.  The non-standard ISA
- * designation 'u' was chosen to mean 'microcore' since the core is very small.
- * Programming is supported by a custom assembler we use for developing custom
- * RISC-V cores.  A simple post-processor could be written for other assemblers
- * to directly map instructions generated for the rv32i base ISA, if the
- * assembly instrucitons comply with the reduced rv8u ISA limitations.
- *
- * Pin definitions:
- * input 	in_clk			base serdes clock
- * input		io_in[1]			reset
- * input		io_in[7:2]		6-bit serdes input
- * output	io_out[7:0]		8-bit serdes output
- * 
- */
-
-//module barentsburg_core(
-module browndeer_rv8u(
-
-//	input in_clk,
-//	input [7:1] io_in,
-	input [7:0] io_in, // ZZZ
-	output [7:0] io_out
-
-//	output [BITS-3:0] debug_pc,
-//	output [IBITS-1:0] debug_instr,
-//	output [3:0] debug_valid_out,
-//
-//	input [RBITS-1:0] debug_reg_sel,
-//	output reg [BITS-1:0] debug_reg_dout
-	
-);
-
-	wire in_clk; // ZZZ
-
-	///////////////////////////////////////////////////////////////////////////
-
-	////////////////////////////////
-	////////// Parameters //////////
-	////////////////////////////////
-
-	parameter BITS = 8;
-	parameter IBITS = 16;
-	parameter RBITS = 3;
-	parameter NREG = 8;
-
-	///////////////////////////////////////////////////////////////////////////
-
-	//////////////////////////////////
-	////////// Declarations //////////
-	//////////////////////////////////
-
-	/// pipeline control
-	wire inval;
-	wire valid_out0;
-
-	wire valid_out1;
-
-	reg valid_out3;
-
-	/// flow control
-	reg [BITS-3:0] pc;
-	reg [BITS-3:0] pc_1;
-	reg [BITS-3:0] pc_2;
-	wire pc_jump;
-	reg [BITS-3:0] jump_addr;
-
-	/// instr
-	reg [IBITS-1:0] instr;
-	reg [IBITS-1:0] instr_2;
-
-	/// hazard
-	reg [NREG-1:0] ldr_hzd;
-
-	/// reg control
-	wire [RBITS-1:0] rd;
-	wire [RBITS-1:0] rs1;
-	wire [RBITS-1:0] rs2;
-	wire reg_we;
-	wire reg_we_arb;
-	reg [BITS-1:0] rd_din;
-	reg [BITS-1:0] nxt_rd_din;
-	reg [RBITS-1:0] rd_sel_arb;
-	reg [BITS-1:0] rs1_dout;
-	reg [BITS-1:0] rs2_dout;
-	reg [RBITS-1:0] rd_3;
-
-	/// imm operand
-	wire ri;
-	reg [BITS-1:0] imm;
-
-	/// reg dependency
-	wire use_rd_e1;
-	wire use_rd_e2;
-	wire use_rs1;
-	wire use_rs2;
-
-	/// IALU
-	reg [3:0] op;
-	wire [BITS-1:0] op_result;
-	wire cc_zero;
-	wire cc_neg;
-	wire cc_v;
-
-	/// ins_
-	wire reg_wen;
-	wire ins_br;
-	wire ins_jal;
-	wire ins_jalr;
-	wire ins_str;
-	wire ins_ldr;
-	wire ins_halt;
-	wire ins_lui;
-	reg ins_ldr_3;
-
-	reg ri_3;
-
-	/// bits alias probably not necessary
-	wire [2:0] funct3;
-
-	///////////////////////////////////////////////////////
-	////////// Declarations PIPELINE_STAGE_0_ILR //////////
-	///////////////////////////////////////////////////////
-
-	// pipeline control
-	reg nxt_valid0;
-
-	// flow control
-	reg [BITS-3:0] pc0;
-	reg [BITS-3:0] nxt_pc, nxt_pc0;
-
-	reg valid0;
-
-	///////////////////////////////////////////////////////
-	/////////// Declarations PIPELINE STAGE 1 IL //////////
-	///////////////////////////////////////////////////////
-
-	wire [IBITS-1:0] nxt_instr;
-	reg valid1;
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// Declarations PIPELINE STAGE 2 ID ///////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	wire en2;
-
-	reg [3:0] imm3210;
-
-	reg valid2;
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// Pipeline Stage 3 E1 Declarations ///////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	wire [BITS-1:0] arg0;
-	reg [BITS-1:0] arg1;
-
-	reg stall;
-
-	reg ben;
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// Pipeline Stage 4 E2 Declarations ///////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	wire en4;
-
-	//////////////////////////////////////////////
-	////////// ISA Decoder Declarations //////////
-	//////////////////////////////////////////////
-
-	wire rv_itype, rv_stype, rv_btype;
-	wire rv_op, rv_op_imm;
-
-	///////////////////////////////////////
-	////////// IALU Declarations //////////
-	///////////////////////////////////////
-
-	wire [BITS-1:0] a_result_sub;
-	wire [BITS-1:0] a_result_srl;
-	reg [BITS-1:0] a_result;
-	reg [7:0] a_sx;
-	reg [BITS-1:0] a_sign_extend;
-	wire [4:0] a_shamt;
-
-	wire run;
-	wire run_not_stall;
-
-	assign run = (~ rst);
-	assign run_not_stall = run & (~ stall);
-
-
-   /////////////////////////
-   ////////// DES //////////
-   /////////////////////////
-
-   wire des_clk_out;
-   wire [5:0] des_sin;
-   wire [7:0] des_sout;
-   wire [31:0] des_din;
-   wire [23:0] des_dout;
-
-   //////////////////////////
-   ////////// core //////////
-   //////////////////////////
-
-   wire clk;
-   wire rst;
-   reg halt;
-   wire [BITS-3:0] imem_addr;
-   wire [IBITS-1:0] imem_dout;
-   wire [BITS-1:0] dmem_addr;
-   wire [BITS-1:0] dmem_din;
-   wire [BITS-1:0] dmem_dout;
-   wire dmem_we;
-   wire dmem_en;
-
-
-   ///////////////////////////////////////////////////////////////////////////
-
-   ///////////////////////////////////////////////////////////////////////////
-   //////////   DES   ////////////////////////////////////////////////////////
-   ///////////////////////////////////////////////////////////////////////////
-
-	des des(
-   	.in_clk (in_clk),
-   	.rst (rst),
-   	.des_sin (des_sin),
-   	.des_sout (des_sout),
-   	.des_din (des_din),
-   	.des_dout (des_dout),
-   	.des_clk_out (des_clk_out)
-	);
-
-   assign in_clk = io_in[0]; // ZZZ
-   assign rst = io_in[1];
-   assign des_sin = io_in[7:2];
-
-   assign io_out = des_sout;
-
-
-   assign clk = des_clk_out;
-
-   assign imem_dout[15:0] = des_dout[15:0];
-   assign dmem_dout = des_dout[23:16];
-
-   assign des_din[5:0] = imem_addr;
-   assign des_din[13:6] = dmem_addr;
-   assign des_din[21:14] = dmem_din;
-   assign des_din[22] = dmem_we;
-   assign des_din[23] = dmem_en;
-   assign des_din[24] = halt;
-
-	assign des_din[31:25] = 7'd0;
-
-	///////////////////////////////////////////////////////////////////////////
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 0 (ILR)   /////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// pipeline control ///
-
-	assign valid_out0 = valid0 & ~ inval;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			valid0 <= 0;
-		end
-		else if (run) begin
-			if (stall) 
-				valid0 <= valid_out0;
-			else
-				valid0 <= 1;
-		end
-		else begin
-			valid0 <= valid_out0;
-		end
-	end
-
-
-	/// flow control ///
-
-	always @ (*)
-	begin
-		if (pc_jump) begin
-			nxt_pc0 = jump_addr;
-			nxt_pc = jump_addr + 1;
-		end
-		else if (stall) begin
-			nxt_pc0 = pc0;
-			nxt_pc = pc;
-		end
-		else begin
-			nxt_pc0 = pc;
-			nxt_pc = pc + 1;
-		end
-	end
-	assign imem_addr = nxt_pc0;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			pc0 <= 0;
-			pc <= 0;
-		end
-		else if (run) begin
-			pc0 <= nxt_pc0;
-			pc <= nxt_pc;
-		end
-		else begin
-			pc0 <= pc0;
-			pc <= pc;
-		end
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 1 (IL)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// pipeline control ///
-
-	assign valid_out1 = valid1 & ~ inval;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			valid1 <= 0;
-			pc_1 <= 0;
-		end
-		else if (run_not_stall) begin
-			valid1 <= valid_out0;
-			pc_1 <= pc;
-		end
-		else begin
-			valid1 <= valid_out1;
-			pc_1 <= pc_1;
-		end
-	end
-
-
-	/// generate instruction ///
-
-	assign nxt_instr = imem_dout[IBITS-1:0];
-
-	always @ (posedge clk)
-	begin
-		if (rst) 
-			instr <= 0;
-		else if (run_not_stall & valid_out0) 
-			instr <= nxt_instr;
-		else 
-			instr <= instr;
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 2 (ID)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// pipeline control ///
-
-	assign en2 = valid_out1;
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			valid2 <= 0;
-		end
-		else if (run_not_stall) begin
-			valid2 <= valid_out1;
-		end
-		else begin
-			valid2 <= valid2;
-		end
-	end
-
-
-	/// pc, instr data flow
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			pc_2 <= 0;
-			instr_2 <= 0;
-		end
-		else if (run_not_stall) begin
-			pc_2 <= pc_1;
-         if (valid_out1)
-            instr_2 <= instr;
-         else
-            instr_2 <= 16'hffff;
-		end
-		else begin
-			pc_2 <= pc_2;
-			instr_2 <= instr_2;
-		end
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 3 (E1)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-
-	always @ (posedge clk)
-	begin
-		if (rst)
-			valid_out3 <= 0;
-		else if (run_not_stall)
-			valid_out3 <= valid2;
-		else if (run & en4)
-			valid_out3 <= 0;
-		else
-			valid_out3 <= valid_out3;
-	end
-
-	assign rd = instr_2[5:3];
-	assign funct3 = instr_2[8:6];
-	assign rs1 = instr_2[11:9];
-	assign rs2[1:0] = instr_2[13:12];
-	assign rs2[2] = 0;
-
-	assign ins_lui	 		= (instr_2[2:0] == 3'b111);
-	assign ins_jal		 	= (instr_2[2:0] == 3'b110);
-	assign ins_jalr	 	= (instr_2[2:0] == 3'b100);
-	assign rv_op_imm 		= (instr_2[2:0] == 3'b001);
-	assign rv_op	 		= (instr_2[2:0] == 3'b011);
-	assign ins_br	 		= (instr_2[2:0] == 3'b010);
-	assign ins_ldr 		= ((instr_2[2:0] == 3'b000) & (~ funct3[2]));
-	assign ins_str 		= ((instr_2[2:0] == 3'b000) & funct3[2]);
-
-	assign use_rd_e1 = reg_wen | ins_jal | ins_jalr | ins_lui;
-	assign use_rd_e2 = (~ funct3[2]) & ins_ldr;
-	assign use_rs1 = ins_ldr | reg_wen | ins_jalr | ins_br | ins_str;
-	assign use_rs2 = (reg_wen & ~ ri_3) | ins_br | ins_str;
-
-	assign ins_halt 		= (instr_2[2:0] == 3'b000) & (funct3 == 3'b000);
-
-	assign rv_itype = ins_ldr | rv_op_imm | ins_jalr;
-	assign rv_stype = ins_str;
-	assign rv_btype = ins_br;
-
-	assign ri = rv_itype | rv_stype;
-	assign reg_wen = rv_op | rv_op_imm;
-
-	always @ (*)
-	begin
-		if (ins_str | ins_ldr | ins_br)
-			op[2:0] = 3'b000;
-		else 
-			op[2:0] = funct3;
-
-		op[3] = ins_br | ((rv_op | ( rv_op_imm & funct3[2])) & instr_2[15]);
-	end
-
-	always @ (*)
-	begin
-		if (rv_itype)
-			imm3210 = { instr_2[15:12] };
-		else
-			imm3210 = { instr_2[14], instr_2[5:3] };
-	end
-	
-	always @ (*)
-	begin
-		if (rv_itype|rv_btype|rv_stype)
-			imm = { instr_2[15], instr_2[15], instr_2[15], instr_2[15], imm3210 };
-		else
-			imm = instr_2[13:6];
-	end
-
-
-	assign reg_we = valid2
-		& (reg_wen|ins_jal|ins_jalr|ins_lui) & (~ stall);
-
-	assign dmem_we = valid2 & ins_str & (~ stall);
-
-	assign arg0 = rs1_dout;
-
-	always @ (*)
-	begin
-		if (ri) begin
-			arg1 = imm[BITS-1:0];
-		end
-		else
-			arg1 = rs2_dout;
-	end
-
-
-	/// IALU ///
-
-	assign a_shamt = arg1[4:0];
-
-	assign a_result_sub = arg0 - arg1;
-
-	assign a_result_srl = arg0 >> a_shamt;
-
-	always @ (*)
-	begin
-		case (arg1[2:0])
-			3'b000: a_sx = 8'b00000000;
-			3'b001: a_sx = 8'b10000000;
-			3'b010: a_sx = 8'b11000000;
-			3'b011: a_sx = 8'b11100000;
-			3'b100: a_sx = 8'b11110000;
-			3'b101: a_sx = 8'b11111000;
-			3'b110: a_sx = 8'b11111100;
-			3'b111: a_sx = 8'b11111110;
-		endcase
-		if (arg0[BITS-1])
-			a_sign_extend = a_sx;
-		else
-			a_sign_extend = 8'd0;
-	end
-
-
-	always @ (*)
-	begin
-		case (op[2:0])
-
-			3'b000: begin
-				if (op[3]) 
-					a_result = a_result_sub;
-				else
-					a_result = arg0 + arg1;
-			end
-
-			3'b001: begin
-				a_result = arg0 << a_shamt; // sll
-			end
-
-			3'b010: begin
-				a_result = { 7'd0, cc_neg }; // slt
-			end
-
-			3'b011: begin
-				a_result = { 7'd0, cc_v}; // sltu
-			end
-
-			3'b100: begin
-				a_result = arg0 ^ arg1; // xor
-			end
-
-			3'b101: begin
-				if (op[3])
-					a_result = a_sign_extend | a_result_srl; // sra
-				else
-					a_result = a_result_srl; // srl
-			end
-
-			3'b110: begin
-				a_result = arg0 | arg1;
-			end
-
-			3'b111: begin
-				a_result = arg0 & arg1;
-			end
-
-		endcase
-	end
-
-	assign cc_neg = a_result_sub[BITS-1];
-	assign cc_zero = (a_result_sub == 0);
-	assign cc_v = ( cc_neg & ~(arg0[BITS-1] ^ arg1[BITS-1])) 
-		| ((~arg0[BITS-1]) & arg1[BITS-1] );
-
-	assign op_result = a_result;
-
-
-	assign dmem_addr = op_result[BITS-1:0];
-	assign dmem_din[BITS-1:0] = rs2_dout;
-	assign dmem_en = (ins_str | ins_ldr) & valid2 & (~ stall);
-
-	always @ (*)
-	begin
-		if (ins_lui)
-			rd_din = { imm[4:0], 3'd0 };
-		else if (ins_jal|ins_jalr) 
-			rd_din = { 2'b00, pc_2 };
-		else
-			rd_din = op_result;
-	end
-
-	always @ (*)
-	begin
-		case(funct3) 
-			3'b000 : ben = cc_zero;	// eq
-			3'b001 : ben = (~cc_zero); // ne
-			3'b010 : ben = 0;
-			3'b011 : ben = 0;
-			3'b100 : ben = cc_neg; // lt
-			3'b101 : ben = (cc_zero | (~cc_neg)); // ge
-			3'b110 : ben = cc_v; // ltu
-			3'b111 : ben = (cc_zero | (~cc_v)); // geu
-		endcase
-	end
-
-
-	always @ (*)
-	begin
-		if (ins_jalr)
-			jump_addr = op_result[BITS-3:0];
-		else
-			jump_addr = pc_2 + { imm[BITS-3:0] };
-	end
-	assign pc_jump = valid2 & ((ben & ins_br) | ins_jal | ins_jalr);
-
-	assign inval = pc_jump & (~ stall);
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			halt <= 0;
-		end
-		else if (run_not_stall & valid2) begin
-			halt <= ins_halt;
-		end
-		else begin
-			halt <= halt;
-		end
-	end
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			ins_ldr_3 <= 0;
-			rd_3 <= 0;
-			ri_3 <= 0;
-		end
-		else if (run_not_stall) begin
-			ins_ldr_3 <= ins_ldr;
-			rd_3 <= rd;
-			ri_3 <= ri;
-		end
-		else begin
-			ins_ldr_3 <= ins_ldr_3;
-			rd_3 <= rd_3;
-			ri_3 <= ri_3;
-		end
-	end
-
-	always @ (*)
-	begin
-	
-		if ( ldr_hzd == 'd0 )
-			stall = 0;
-		else if ( (use_rs1 & ldr_hzd[rs1]) | (use_rs2 & ldr_hzd[rs2])) // RAW HZD
-			stall = 1;
-		else if ( (use_rd_e2 & ldr_hzd[rd]) | (use_rd_e1) ) // WAW conflict
-			stall = 1;
-		else 
-			stall = 0;
-
-	end
-
-
-	///////////////////////////////////////////////////////////////////////////
-	//////////   PIPELINE STAGE 4 (E2)   //////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-  	assign en4 = valid_out3 & (ins_ldr_3 );
-
-   always @ (*)
-   begin
-
-      if (en4 & ins_ldr_3) begin
-         rd_sel_arb = rd_3;
-      end
-      else begin
-         rd_sel_arb = rd;
-      end
-
-   end
-	assign reg_we_arb = reg_we | (en4 & ins_ldr_3);
-
-
-	///////////////////////////////////////////////////////////////////////////
-	////////// REGISTERS //////////////////////////////////////////////////////
-	///////////////////////////////////////////////////////////////////////////
-
-	/// write register
-
-	always @ (*)
-	begin
-      	if (en4 & ins_ldr_3) begin
-    	     nxt_rd_din = dmem_dout[BITS-1:0];
-    	  end
-    	  else begin
-    	     nxt_rd_din = rd_din;
-    	  end
-	end
-
-	registers registers(
-   	.clk (clk),
-   	.run (run),
-   	.we (reg_we_arb),
-   	.rd (rd_sel_arb),
-   	.rs1 (rs1),
-   	.rs2 (rs2),
-   	.rd_din (nxt_rd_din),
-   	.rs1_dout (rs1_dout),
-   	.rs2_dout (rs2_dout)
-
-//   	.debug_reg_sel (debug_reg_sel),
-//   	.debug_reg_dout (debug_reg_dout)
-	);
-
-	///////////////////////////////////////////////////////////////////////////
-
-	/////////////////////////////
-	////////   Hazard   ////////
-	/////////////////////////////
-
-	always @ (posedge clk)
-	begin
-		if (rst) begin
-			ldr_hzd <= 0;
-		end
-		else if (run)
-			if (( ~(rd==0)) & (ins_ldr )  & ~ stall) begin
-				ldr_hzd <= ('d1 << rd);
-			end
-			else begin
-				ldr_hzd <= 0;
-			end
-		else begin
-			ldr_hzd <= ldr_hzd;
-		end
-	end
-
-	
-	///////////////////////////////////////////////////////////////////////////
-
-	///////////////////////////
-	////////   DEBUG   ////////
-	///////////////////////////
-
-//	assign debug_pc = pc_2;
-//	assign debug_instr[15:0] = instr_2;
-//	assign debug_valid_out = { valid_out0, valid_out1, valid2, valid_out3 };
-
-endmodule
diff --git a/verilog/rtl/107_melody.v b/verilog/rtl/107_melody.v
deleted file mode 100644
index d397187..0000000
--- a/verilog/rtl/107_melody.v
+++ /dev/null
@@ -1,122 +0,0 @@
-`default_nettype none
-
-module prog_melody_gen (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    reg [9:0] div_tmr = 0;
-    reg tick;
-    reg state;
-    reg [7:0] curr_tone;
-
-    reg [5:0] tone_seq;
-    wire [3:0] rom_rdata;
-
-    wire clock = io_in[0];
-    wire reload = io_in[1];
-    wire restart = io_in[2];
-
-    wire pgm_data = io_in[3];
-    wire pgm_strobe = io_in[4];
-
-    assign io_out[7:1] = 1'b0;
-
-    always @(posedge clock, posedge restart) begin
-        if (restart) begin
-            div_tmr <= 0;
-            tone_seq <= 0;
-            curr_tone <= 0;
-            tick <= 1'b0;
-            state <= 1'b0;
-        end else begin
-            {tick, div_tmr} <= div_tmr + 1'b1;
-            if (tick) begin
-                if (!state) begin
-                    tone_seq <= tone_seq + 1'b1;
-                    if (rom_rdata == 15)
-                        curr_tone <= 0; // silence
-                    else
-                        curr_tone <= 12 + rom_rdata; // note
-                end else begin
-                    curr_tone <= 0; // gap between notes
-                end
-                state <= ~state;
-            end
-        end
-    end
-
-    reg [7:0] mel_gen = 0;
-    reg mel_out;
-    always @(posedge clock) begin
-        if (mel_gen >= curr_tone)
-            mel_gen <= 0;
-        else 
-            mel_gen <= mel_gen + 1'b1;
-        mel_out <= mel_gen > (curr_tone / 2);
-    end
-
-    assign io_out[0] = mel_out;
-
-    localparam C = 4'd11, CS = 4'd10, D = 4'd9, E = 4'd7, F = 4'd6, FS = 4'd5, G = 4'd4, GS = 4'd3, A = 4'd2, AS = 4'd1, B = 4'd0, S = 4'd15;
-    localparam [4*64:0] JINGLE_BELS = {
-        E, E, E, S, E, E, E, S,
-        E, G, C, D, E, S, F, F,
-        F, F, F, E, E, E, E, E,
-        D, D, E, D, S, G, S, E,
-        E, E, S, E, E, E, S, E,
-        G, C, D, E, S, F, F, F,
-        F, F, E, E, E, E, F, F,
-        E, D, C, S, S, S, S, S
-    };
-
-    wire [3:0] tone_rom[0:63];
-
-    // program shift register
-    reg [10:0] write_sr;
-    always @(posedge clock)
-        write_sr <= {pgm_data, write_sr[10:1]};
-
-    wire [5:0] pgm_word_sel = write_sr[10:5];
-    wire [3:0] pgm_write_data = write_sr[3:0];
-
-    // the tone RAM
-    generate
-        genvar ii;
-        genvar jj;
-        for (ii = 0; ii < 64; ii = ii + 1'b1) begin : words
-            wire word_we;
-            sky130_fd_sc_hd__and2_1 word_we_i ( // make sure this is really glitch free
-                .A(pgm_word_sel == ii),
-                .B(pgm_strobe),
-                .X(word_we)
-            );
-            for (jj = 0; jj < 4; jj = jj + 1'b1) begin : bits
-                localparam pgm_bit = JINGLE_BELS[(63 - ii) * 4 + jj];
-                wire lat_o;
-                sky130_fd_sc_hd__dlrtp_1 rfbit_i (
-                    .GATE(word_we),
-                    .RESET_B(reload),
-                    .D(pgm_write_data[jj]),
-                    .Q(lat_o)
-                );
-                assign tone_rom[ii][jj] = lat_o ^ pgm_bit;
-            end
-        end
-    endgenerate
-
-    assign rom_rdata = tone_rom[tone_seq];
-
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__dlrtp_1(input GATE, RESET_B, D, output reg Q);
-    always @*
-        if (~RESET_B)
-            Q <= 0;
-        else if (GATE)
-            Q <= D;
-endmodule
-(* blackbox *)
-module sky130_fd_sc_hd__and2_1(input A, B, output X);
-    assign X = A & B;
-endmodule
diff --git a/verilog/rtl/108_melody.v b/verilog/rtl/108_melody.v
deleted file mode 100644
index d397187..0000000
--- a/verilog/rtl/108_melody.v
+++ /dev/null
@@ -1,122 +0,0 @@
-`default_nettype none
-
-module prog_melody_gen (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    reg [9:0] div_tmr = 0;
-    reg tick;
-    reg state;
-    reg [7:0] curr_tone;
-
-    reg [5:0] tone_seq;
-    wire [3:0] rom_rdata;
-
-    wire clock = io_in[0];
-    wire reload = io_in[1];
-    wire restart = io_in[2];
-
-    wire pgm_data = io_in[3];
-    wire pgm_strobe = io_in[4];
-
-    assign io_out[7:1] = 1'b0;
-
-    always @(posedge clock, posedge restart) begin
-        if (restart) begin
-            div_tmr <= 0;
-            tone_seq <= 0;
-            curr_tone <= 0;
-            tick <= 1'b0;
-            state <= 1'b0;
-        end else begin
-            {tick, div_tmr} <= div_tmr + 1'b1;
-            if (tick) begin
-                if (!state) begin
-                    tone_seq <= tone_seq + 1'b1;
-                    if (rom_rdata == 15)
-                        curr_tone <= 0; // silence
-                    else
-                        curr_tone <= 12 + rom_rdata; // note
-                end else begin
-                    curr_tone <= 0; // gap between notes
-                end
-                state <= ~state;
-            end
-        end
-    end
-
-    reg [7:0] mel_gen = 0;
-    reg mel_out;
-    always @(posedge clock) begin
-        if (mel_gen >= curr_tone)
-            mel_gen <= 0;
-        else 
-            mel_gen <= mel_gen + 1'b1;
-        mel_out <= mel_gen > (curr_tone / 2);
-    end
-
-    assign io_out[0] = mel_out;
-
-    localparam C = 4'd11, CS = 4'd10, D = 4'd9, E = 4'd7, F = 4'd6, FS = 4'd5, G = 4'd4, GS = 4'd3, A = 4'd2, AS = 4'd1, B = 4'd0, S = 4'd15;
-    localparam [4*64:0] JINGLE_BELS = {
-        E, E, E, S, E, E, E, S,
-        E, G, C, D, E, S, F, F,
-        F, F, F, E, E, E, E, E,
-        D, D, E, D, S, G, S, E,
-        E, E, S, E, E, E, S, E,
-        G, C, D, E, S, F, F, F,
-        F, F, E, E, E, E, F, F,
-        E, D, C, S, S, S, S, S
-    };
-
-    wire [3:0] tone_rom[0:63];
-
-    // program shift register
-    reg [10:0] write_sr;
-    always @(posedge clock)
-        write_sr <= {pgm_data, write_sr[10:1]};
-
-    wire [5:0] pgm_word_sel = write_sr[10:5];
-    wire [3:0] pgm_write_data = write_sr[3:0];
-
-    // the tone RAM
-    generate
-        genvar ii;
-        genvar jj;
-        for (ii = 0; ii < 64; ii = ii + 1'b1) begin : words
-            wire word_we;
-            sky130_fd_sc_hd__and2_1 word_we_i ( // make sure this is really glitch free
-                .A(pgm_word_sel == ii),
-                .B(pgm_strobe),
-                .X(word_we)
-            );
-            for (jj = 0; jj < 4; jj = jj + 1'b1) begin : bits
-                localparam pgm_bit = JINGLE_BELS[(63 - ii) * 4 + jj];
-                wire lat_o;
-                sky130_fd_sc_hd__dlrtp_1 rfbit_i (
-                    .GATE(word_we),
-                    .RESET_B(reload),
-                    .D(pgm_write_data[jj]),
-                    .Q(lat_o)
-                );
-                assign tone_rom[ii][jj] = lat_o ^ pgm_bit;
-            end
-        end
-    endgenerate
-
-    assign rom_rdata = tone_rom[tone_seq];
-
-endmodule
-
-(* blackbox *)
-module sky130_fd_sc_hd__dlrtp_1(input GATE, RESET_B, D, output reg Q);
-    always @*
-        if (~RESET_B)
-            Q <= 0;
-        else if (GATE)
-            Q <= D;
-endmodule
-(* blackbox *)
-module sky130_fd_sc_hd__and2_1(input A, B, output X);
-    assign X = A & B;
-endmodule
diff --git a/verilog/rtl/108_rotaryencoder.v b/verilog/rtl/108_rotaryencoder.v
deleted file mode 100644
index 02ab56e..0000000
--- a/verilog/rtl/108_rotaryencoder.v
+++ /dev/null
@@ -1,44 +0,0 @@
-`default_nettype none
-
-module vaishnavachath_rotary_toplevel (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-    wire clk_in = io_in[0];
-    wire reset = io_in[1];
-    wire rt_a;
-    wire rt_b;
-    wire tm_enable = io_in[4];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    reg [3:0] enc_byte = 0;
-    reg [3:0] counter = 0;
-    reg rt_a_delayed, rt_b_delayed, clk_msb_delayed;
-    assign rt_a = tm_enable ? counter[3] : io_in[2];
-    assign rt_b = tm_enable ? clk_msb_delayed : io_in[3];
-    wire count_enable = rt_a ^ rt_a_delayed ^ rt_b ^ rt_b_delayed;
-    wire count_direction = rt_a ^ rt_b_delayed;
-
-    always @(posedge clk_in) rt_a_delayed <= rt_a;
-    always @(posedge clk_in) rt_b_delayed <= rt_b;
-    always @(posedge clk_in) clk_msb_delayed <= counter[3];
-
-    always @(posedge clk_in) begin
-         if(count_enable) begin
-            if(count_direction) enc_byte<=enc_byte+1; else enc_byte<=enc_byte-1;
-        end
-    end
-
-
-    always @(posedge clk_in) begin
-        if (reset) begin
-            counter <= 0;
-        end else begin
-            counter <= counter + 1'b1;
-        end
-    end
-
-    seg7 seg7(.counter(enc_byte), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/109_rotaryencoder.v b/verilog/rtl/109_rotaryencoder.v
deleted file mode 100644
index 02ab56e..0000000
--- a/verilog/rtl/109_rotaryencoder.v
+++ /dev/null
@@ -1,44 +0,0 @@
-`default_nettype none
-
-module vaishnavachath_rotary_toplevel (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-    wire clk_in = io_in[0];
-    wire reset = io_in[1];
-    wire rt_a;
-    wire rt_b;
-    wire tm_enable = io_in[4];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    reg [3:0] enc_byte = 0;
-    reg [3:0] counter = 0;
-    reg rt_a_delayed, rt_b_delayed, clk_msb_delayed;
-    assign rt_a = tm_enable ? counter[3] : io_in[2];
-    assign rt_b = tm_enable ? clk_msb_delayed : io_in[3];
-    wire count_enable = rt_a ^ rt_a_delayed ^ rt_b ^ rt_b_delayed;
-    wire count_direction = rt_a ^ rt_b_delayed;
-
-    always @(posedge clk_in) rt_a_delayed <= rt_a;
-    always @(posedge clk_in) rt_b_delayed <= rt_b;
-    always @(posedge clk_in) clk_msb_delayed <= counter[3];
-
-    always @(posedge clk_in) begin
-         if(count_enable) begin
-            if(count_direction) enc_byte<=enc_byte+1; else enc_byte<=enc_byte-1;
-        end
-    end
-
-
-    always @(posedge clk_in) begin
-        if (reset) begin
-            counter <= 0;
-        end else begin
-            counter <= counter + 1'b1;
-        end
-    end
-
-    seg7 seg7(.counter(enc_byte), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/111_rotary_encoder.v b/verilog/rtl/111_rotary_encoder.v
deleted file mode 100644
index 3b1a2ff..0000000
--- a/verilog/rtl/111_rotary_encoder.v
+++ /dev/null
@@ -1,78 +0,0 @@
-`timescale 1ns / 1ps
-`default_nettype none
-
-//////////////////////////////////////////////////////////////////////////////////
-// Company: 
-// Engineer: 
-// 
-// Create Date: 30.11.2022 08:21:55
-// Design Name: 
-// Module Name: rotary_encoder
-// Project Name: 
-// Target Devices: 
-// Tool Versions: 
-// Description: 
-// 
-// Dependencies: 
-// 
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-// 
-//////////////////////////////////////////////////////////////////////////////////
-
-module rotary_encoder (
-  input wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-    wire encA = io_in[2];
-    wire encB = io_in[3];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    assign io_out[7] = 0;
-    
-    reg [7:0] delay_counter;
-    reg [3:0] digit;
-    reg old_value;
-
-    always @(posedge clk) begin
-        // if reset, set counter to 0
-        if (reset) begin
-            digit <= 0;
-            old_value <= encA;
-            delay_counter <= 0;
-        end else begin
-            if (delay_counter != 0) begin
-                delay_counter <= delay_counter - 1'b1;
-            end
-            if (encA == 1 && old_value == 0 && delay_counter == 0) begin
-                delay_counter = 125; //IOrefreshrate = 12.5Khz => clock = 6.25KHz => delay 20ms = 125 cycles
-                //rising edge on A
-                if(encB == 0) begin
-                    // increment digit
-                    digit <= digit + 1'b1;
-    
-                    // only count from 0 to 9
-                    if (digit == 9) begin
-                        digit <= 0;
-                    end
-                end else begin
-                    // decrement digit
-                    if (digit == 0) begin
-                        digit <= 9;
-                    end else begin    
-                        digit <= digit - 1'b1;
-                    end 
-                end             
-            end
-            old_value = encA;
-        end
-    end 
-
-    // instantiate segment display
-    seg7 seg7(.counter(digit), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/112_frog.v b/verilog/rtl/112_frog.v
deleted file mode 100644
index d496b40..0000000
--- a/verilog/rtl/112_frog.v
+++ /dev/null
@@ -1,119 +0,0 @@
-`default_nettype none
-
-module frog(
-    input [7:0] io_in,
-    output [7:0] io_out
-    );
-    
-    localparam OP_NGA = 4'h0;
-    localparam OP_AND = 4'h1;
-    localparam OP_OR  = 4'h2;
-    localparam OP_XOR = 4'h3;
-    localparam OP_SLL = 4'h4;
-    localparam OP_SRL = 4'h5;
-    localparam OP_SRA = 4'h6;
-    localparam OP_ADD = 4'h7;
-    localparam OP_NOP = 4'h8;
-    localparam OP_BEQ = 4'h9;
-    localparam OP_BLE = 4'hA;
-    localparam OP_JMP = 4'hB;
-    localparam OP_LDA = 4'hC;
-    localparam OP_LDB = 4'hD;
-    localparam OP_STA = 4'hE;
-    localparam OP_STB = 4'hF;
-    
-    wire clk = io_in[0];
-    wire rst_p = io_in[1];
-    wire[3:0] data_in = io_in[5:2];
-    wire fast = io_in[7];
-    
-    wire wcyc;
-    wire[6:0] addr;
-    
-    reg[3:0] reg_a;
-    reg[3:0] reg_b;
-    reg[6:0] tmp;
-    reg[6:0] pc;
-    
-    reg[2:0] opcode_lsb;
-        
-    localparam STATE_ADDR  = 3'h0; //Fetch
-    localparam STATE_OP    = 3'h1; //Execute
-    localparam STATE_MEM1  = 3'h2; //AddrH
-    localparam STATE_MEM2  = 3'h3; //AddrL
-    localparam STATE_MEM3  = 3'h4; //Load or Put Write ADDR
-    localparam STATE_MEM4  = 3'h5; //Write DATA
-    reg[2:0] state;
-    reg[2:0] next_state;
-
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) begin
-            opcode_lsb <= 0;
-        end else begin
-            if(next_state == STATE_OP)
-                opcode_lsb <= 0;
-            else if(state == STATE_OP) begin
-                opcode_lsb <= data_in[2:0];
-            end
-        end
-    end
-
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) state <= STATE_ADDR;
-        else state <= next_state;
-    end 
-    
-    always@(*) begin
-        next_state <= fast ? STATE_OP : STATE_ADDR;
-        case(state)
-            STATE_ADDR: next_state <= STATE_OP;
-            STATE_OP: if(data_in[3] & |data_in[2:0]) next_state <= STATE_MEM1;
-            STATE_MEM1: next_state <= STATE_MEM2;
-            STATE_MEM2: if(opcode_lsb[2]) next_state <= STATE_MEM3;
-            STATE_MEM3: if(opcode_lsb[1]) next_state <= STATE_MEM4;
-        endcase
-    end
-    
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) begin
-            reg_a <= 0;
-            reg_b <= 0;
-        end else begin
-            if(state == STATE_OP)
-                case(data_in[2:0])
-                    OP_AND: reg_a <= reg_a & reg_b;
-                    OP_NGA: reg_a <= ~reg_a + 1;
-                    OP_OR:  reg_a <= reg_a | reg_b;
-                    OP_XOR: reg_a <= reg_a ^ reg_b;
-                    OP_SLL: reg_a <= reg_a << reg_b[1:0];
-                    OP_SRL: reg_a <= reg_a >> reg_b[1:0];
-                    OP_SRA: reg_a <= reg_a >>> reg_b[1:0];
-                    OP_ADD: reg_a <= reg_a + reg_b;
-                endcase
-            else if(state == STATE_MEM3 && !opcode_lsb[1])
-                if(opcode_lsb[0]) reg_b <= data_in;
-                else reg_a <= data_in;
-        end
-    end
-    
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p)
-            tmp <= 0;
-        else if(state == STATE_MEM1) tmp[6:4] <= data_in[2:0];
-        else if(state == STATE_MEM2) tmp[3:0] <= data_in;
-    end    
-    
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) pc <= 0;
-        else if(state == STATE_MEM2 && ((opcode_lsb[2:0]==OP_BLE[2:0]) && (reg_a <= reg_b))) pc <= pc + {tmp[6:4],data_in};
-        else if(state == STATE_MEM2 && ((opcode_lsb[2:0]==OP_BEQ[2:0]) && (reg_a == reg_b))) pc <= pc + {tmp[6:4],data_in};
-        else if(state == STATE_MEM2 && (opcode_lsb[2:0]==OP_JMP)) pc <= {tmp[6:4],data_in};
-        else if(state == STATE_OP || state == STATE_MEM1 || state == STATE_MEM2) pc <= pc + 1;
-    end
-    
-    assign wcyc = ((state == STATE_MEM3) || (state == STATE_MEM4)) & opcode_lsb[1];
-    assign addr = ((state == STATE_MEM3) || (state == STATE_MEM4)) ? tmp : pc;
-    assign io_out[6:0] = state == STATE_MEM4 ? (opcode_lsb[0] ? {3'b0,reg_b} : {3'b0,reg_a}) : addr;
-    assign io_out[7] = wcyc;
-    
-endmodule
diff --git a/verilog/rtl/112_rotary_encoder.v b/verilog/rtl/112_rotary_encoder.v
deleted file mode 100644
index 3b1a2ff..0000000
--- a/verilog/rtl/112_rotary_encoder.v
+++ /dev/null
@@ -1,78 +0,0 @@
-`timescale 1ns / 1ps
-`default_nettype none
-
-//////////////////////////////////////////////////////////////////////////////////
-// Company: 
-// Engineer: 
-// 
-// Create Date: 30.11.2022 08:21:55
-// Design Name: 
-// Module Name: rotary_encoder
-// Project Name: 
-// Target Devices: 
-// Tool Versions: 
-// Description: 
-// 
-// Dependencies: 
-// 
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-// 
-//////////////////////////////////////////////////////////////////////////////////
-
-module rotary_encoder (
-  input wire [7:0] io_in,
-  output wire [7:0] io_out
-);
-
-    wire clk = io_in[0];
-    wire reset = io_in[1];
-    wire encA = io_in[2];
-    wire encB = io_in[3];
-    wire [6:0] led_out;
-    assign io_out[6:0] = led_out;
-    assign io_out[7] = 0;
-    
-    reg [7:0] delay_counter;
-    reg [3:0] digit;
-    reg old_value;
-
-    always @(posedge clk) begin
-        // if reset, set counter to 0
-        if (reset) begin
-            digit <= 0;
-            old_value <= encA;
-            delay_counter <= 0;
-        end else begin
-            if (delay_counter != 0) begin
-                delay_counter <= delay_counter - 1'b1;
-            end
-            if (encA == 1 && old_value == 0 && delay_counter == 0) begin
-                delay_counter = 125; //IOrefreshrate = 12.5Khz => clock = 6.25KHz => delay 20ms = 125 cycles
-                //rising edge on A
-                if(encB == 0) begin
-                    // increment digit
-                    digit <= digit + 1'b1;
-    
-                    // only count from 0 to 9
-                    if (digit == 9) begin
-                        digit <= 0;
-                    end
-                end else begin
-                    // decrement digit
-                    if (digit == 0) begin
-                        digit <= 9;
-                    end else begin    
-                        digit <= digit - 1'b1;
-                    end 
-                end             
-            end
-            old_value = encA;
-        end
-    end 
-
-    // instantiate segment display
-    seg7 seg7(.counter(digit), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/113_frog.v b/verilog/rtl/113_frog.v
deleted file mode 100644
index d496b40..0000000
--- a/verilog/rtl/113_frog.v
+++ /dev/null
@@ -1,119 +0,0 @@
-`default_nettype none
-
-module frog(
-    input [7:0] io_in,
-    output [7:0] io_out
-    );
-    
-    localparam OP_NGA = 4'h0;
-    localparam OP_AND = 4'h1;
-    localparam OP_OR  = 4'h2;
-    localparam OP_XOR = 4'h3;
-    localparam OP_SLL = 4'h4;
-    localparam OP_SRL = 4'h5;
-    localparam OP_SRA = 4'h6;
-    localparam OP_ADD = 4'h7;
-    localparam OP_NOP = 4'h8;
-    localparam OP_BEQ = 4'h9;
-    localparam OP_BLE = 4'hA;
-    localparam OP_JMP = 4'hB;
-    localparam OP_LDA = 4'hC;
-    localparam OP_LDB = 4'hD;
-    localparam OP_STA = 4'hE;
-    localparam OP_STB = 4'hF;
-    
-    wire clk = io_in[0];
-    wire rst_p = io_in[1];
-    wire[3:0] data_in = io_in[5:2];
-    wire fast = io_in[7];
-    
-    wire wcyc;
-    wire[6:0] addr;
-    
-    reg[3:0] reg_a;
-    reg[3:0] reg_b;
-    reg[6:0] tmp;
-    reg[6:0] pc;
-    
-    reg[2:0] opcode_lsb;
-        
-    localparam STATE_ADDR  = 3'h0; //Fetch
-    localparam STATE_OP    = 3'h1; //Execute
-    localparam STATE_MEM1  = 3'h2; //AddrH
-    localparam STATE_MEM2  = 3'h3; //AddrL
-    localparam STATE_MEM3  = 3'h4; //Load or Put Write ADDR
-    localparam STATE_MEM4  = 3'h5; //Write DATA
-    reg[2:0] state;
-    reg[2:0] next_state;
-
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) begin
-            opcode_lsb <= 0;
-        end else begin
-            if(next_state == STATE_OP)
-                opcode_lsb <= 0;
-            else if(state == STATE_OP) begin
-                opcode_lsb <= data_in[2:0];
-            end
-        end
-    end
-
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) state <= STATE_ADDR;
-        else state <= next_state;
-    end 
-    
-    always@(*) begin
-        next_state <= fast ? STATE_OP : STATE_ADDR;
-        case(state)
-            STATE_ADDR: next_state <= STATE_OP;
-            STATE_OP: if(data_in[3] & |data_in[2:0]) next_state <= STATE_MEM1;
-            STATE_MEM1: next_state <= STATE_MEM2;
-            STATE_MEM2: if(opcode_lsb[2]) next_state <= STATE_MEM3;
-            STATE_MEM3: if(opcode_lsb[1]) next_state <= STATE_MEM4;
-        endcase
-    end
-    
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) begin
-            reg_a <= 0;
-            reg_b <= 0;
-        end else begin
-            if(state == STATE_OP)
-                case(data_in[2:0])
-                    OP_AND: reg_a <= reg_a & reg_b;
-                    OP_NGA: reg_a <= ~reg_a + 1;
-                    OP_OR:  reg_a <= reg_a | reg_b;
-                    OP_XOR: reg_a <= reg_a ^ reg_b;
-                    OP_SLL: reg_a <= reg_a << reg_b[1:0];
-                    OP_SRL: reg_a <= reg_a >> reg_b[1:0];
-                    OP_SRA: reg_a <= reg_a >>> reg_b[1:0];
-                    OP_ADD: reg_a <= reg_a + reg_b;
-                endcase
-            else if(state == STATE_MEM3 && !opcode_lsb[1])
-                if(opcode_lsb[0]) reg_b <= data_in;
-                else reg_a <= data_in;
-        end
-    end
-    
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p)
-            tmp <= 0;
-        else if(state == STATE_MEM1) tmp[6:4] <= data_in[2:0];
-        else if(state == STATE_MEM2) tmp[3:0] <= data_in;
-    end    
-    
-    always@(posedge clk or posedge rst_p) begin
-        if(rst_p) pc <= 0;
-        else if(state == STATE_MEM2 && ((opcode_lsb[2:0]==OP_BLE[2:0]) && (reg_a <= reg_b))) pc <= pc + {tmp[6:4],data_in};
-        else if(state == STATE_MEM2 && ((opcode_lsb[2:0]==OP_BEQ[2:0]) && (reg_a == reg_b))) pc <= pc + {tmp[6:4],data_in};
-        else if(state == STATE_MEM2 && (opcode_lsb[2:0]==OP_JMP)) pc <= {tmp[6:4],data_in};
-        else if(state == STATE_OP || state == STATE_MEM1 || state == STATE_MEM2) pc <= pc + 1;
-    end
-    
-    assign wcyc = ((state == STATE_MEM3) || (state == STATE_MEM4)) & opcode_lsb[1];
-    assign addr = ((state == STATE_MEM3) || (state == STATE_MEM4)) ? tmp : pc;
-    assign io_out[6:0] = state == STATE_MEM4 ? (opcode_lsb[0] ? {3'b0,reg_b} : {3'b0,reg_a}) : addr;
-    assign io_out[7] = wcyc;
-    
-endmodule
diff --git a/verilog/rtl/113_swalense_top.v b/verilog/rtl/113_swalense_top.v
deleted file mode 100644
index 17f77e9..0000000
--- a/verilog/rtl/113_swalense_top.v
+++ /dev/null
@@ -1,772 +0,0 @@
-/* Generated by Yosys 0.23+8 (git sha1 48659ee2b, clang 14.0.0 -fPIC -Os) */
-
-module counter(rst, wrap, init_value, max_value, inc, strobe, reset, value, updating_strobe, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$1  = 0;
-  wire \$1 ;
-  wire [9:0] \$11 ;
-  wire [8:0] \$12 ;
-  wire [8:0] \$14 ;
-  wire [1:0] \$15 ;
-  wire [9:0] \$18 ;
-  wire [7:0] \$20 ;
-  wire \$3 ;
-  wire \$5 ;
-  wire \$7 ;
-  wire \$9 ;
-  wire can_update;
-  input clk;
-  wire clk;
-  input inc;
-  wire inc;
-  input [7:0] init_value;
-  wire [7:0] init_value;
-  input [7:0] max_value;
-  wire [7:0] max_value;
-  input reset;
-  wire reset;
-  input rst;
-  wire rst;
-  input strobe;
-  wire strobe;
-  output updating_strobe;
-  wire updating_strobe;
-  output [7:0] value;
-  reg [7:0] value = 8'h00;
-  reg [7:0] \value$next ;
-  input wrap;
-  wire wrap;
-  assign \$9  = strobe & \$7 ;
-  assign \$12  = + value;
-  assign \$15  = inc ? 2'h1 : 2'h3;
-  assign \$14  = + $signed(\$15 );
-  assign \$18  = $signed(\$12 ) + $signed(\$14 );
-  assign \$1  = value != max_value;
-  assign \$20  = inc ? 8'h00 : max_value;
-  always @(posedge clk)
-    value <= \value$next ;
-  assign \$3  = | value;
-  assign \$5  = inc ? \$1  : \$3 ;
-  assign \$7  = wrap | can_update;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \value$next  = value;
-    casez ({ updating_strobe, reset })
-      2'b?1:
-          \value$next  = init_value;
-      2'b1?:
-          (* full_case = 32'd1 *)
-          casez (can_update)
-            1'h1:
-                \value$next  = \$18 [7:0];
-            default:
-                \value$next  = \$20 ;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \value$next  = 8'h00;
-    endcase
-  end
-  assign \$11  = \$18 ;
-  assign updating_strobe = \$9 ;
-  assign can_update = \$5 ;
-endmodule
-
-module decoder(rst, channels, direction, force_x2, debounce, x1_value, strobe_x2, strobe_x4, strobe_x1, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$2  = 0;
-  wire \$1 ;
-  wire \$11 ;
-  wire \$13 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire \$27 ;
-  wire \$29 ;
-  wire \$3 ;
-  wire [1:0] \$5 ;
-  wire \$7 ;
-  wire \$9 ;
-  input [1:0] channels;
-  wire [1:0] channels;
-  input clk;
-  wire clk;
-  input debounce;
-  wire debounce;
-  wire dir;
-  output direction;
-  reg direction = 1'h0;
-  reg \direction$next ;
-  input force_x2;
-  wire force_x2;
-  reg [1:0] prev_channels = 2'h0;
-  reg [1:0] \prev_channels$next ;
-  input rst;
-  wire rst;
-  output strobe_x1;
-  wire strobe_x1;
-  output strobe_x2;
-  wire strobe_x2;
-  output strobe_x4;
-  reg strobe_x4 = 1'h0;
-  reg \strobe_x4$next ;
-  input [1:0] x1_value;
-  wire [1:0] x1_value;
-  assign \$9  = \$3  | \$7 ;
-  assign \$11  = strobe_x4 & \$9 ;
-  assign \$13  = channels == x1_value;
-  assign \$15  = strobe_x4 & \$13 ;
-  assign \$17  = force_x2 ? strobe_x2 : \$15 ;
-  assign \$1  = channels[0] ^ prev_channels[1];
-  assign \$19  = channels != prev_channels;
-  assign \$21  = dir == direction;
-  assign \$23  = ~ debounce;
-  assign \$25  = \$21  | \$23 ;
-  assign \$27  = channels != prev_channels;
-  assign \$29  = channels != prev_channels;
-  always @(posedge clk)
-    strobe_x4 <= \strobe_x4$next ;
-  always @(posedge clk)
-    prev_channels <= \prev_channels$next ;
-  always @(posedge clk)
-    direction <= \direction$next ;
-  assign \$3  = channels == x1_value;
-  assign \$5  = ~ x1_value;
-  assign \$7  = channels == \$5 ;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    \strobe_x4$next  = 1'h0;
-    casez (\$19 )
-      1'h1:
-          \strobe_x4$next  = \$25 ;
-    endcase
-    casez (rst)
-      1'h1:
-          \strobe_x4$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    \prev_channels$next  = prev_channels;
-    casez (\$27 )
-      1'h1:
-          \prev_channels$next  = channels;
-    endcase
-    casez (rst)
-      1'h1:
-          \prev_channels$next  = channels;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    \direction$next  = direction;
-    casez (\$29 )
-      1'h1:
-          \direction$next  = dir;
-    endcase
-    casez (rst)
-      1'h1:
-          \direction$next  = 1'h0;
-    endcase
-  end
-  assign strobe_x1 = \$17 ;
-  assign strobe_x2 = \$11 ;
-  assign dir = \$1 ;
-endmodule
-
-module dev(rst, channels, force_x2, cs, sck, sdi, tx, pwm_signal, direction, counter, clk);
-  wire \$2 ;
-  wire \$4 ;
-  wire \$6 ;
-  wire [1:0] \$signal ;
-  input [1:0] channels;
-  wire [1:0] channels;
-  input clk;
-  wire clk;
-  output [7:0] counter;
-  wire [7:0] counter;
-  wire counter_inc;
-  wire [7:0] counter_init_value;
-  wire [7:0] counter_max_value;
-  wire counter_reset;
-  wire counter_strobe;
-  wire counter_updating_strobe;
-  wire [7:0] counter_value;
-  wire counter_wrap;
-  input cs;
-  wire cs;
-  wire decoder_debounce;
-  wire decoder_force_x2;
-  wire decoder_strobe_x1;
-  wire decoder_strobe_x2;
-  wire decoder_strobe_x4;
-  wire [1:0] decoder_x1_value;
-  output direction;
-  wire direction;
-  input force_x2;
-  wire force_x2;
-  wire gearbox_enable;
-  wire gearbox_strobe;
-  wire [7:0] gearbox_timer_cycles;
-  wire [7:0] pwm_duty;
-  wire [7:0] pwm_max_duty;
-  output pwm_signal;
-  wire pwm_signal;
-  input rst;
-  wire rst;
-  input sck;
-  wire sck;
-  input sdi;
-  wire sdi;
-  wire serial_out_strobe;
-  wire [7:0] serial_out_word;
-  wire spi_busy;
-  wire spi_cs;
-  wire [31:0] spi_data;
-  wire spi_force_x2;
-  wire spi_sck;
-  wire spi_sdi;
-  wire spi_strobe;
-  output tx;
-  wire tx;
-  assign \$2  = force_x2 | spi_force_x2;
-  assign \$4  = ~ spi_busy;
-  assign \$6  = \$4  & gearbox_strobe;
-  counter \counter$1  (
-    .clk(clk),
-    .inc(counter_inc),
-    .init_value(counter_init_value),
-    .max_value(counter_max_value),
-    .reset(counter_reset),
-    .rst(rst),
-    .strobe(counter_strobe),
-    .updating_strobe(counter_updating_strobe),
-    .value(counter_value),
-    .wrap(counter_wrap)
-  );
-  decoder decoder (
-    .channels(channels),
-    .clk(clk),
-    .debounce(decoder_debounce),
-    .direction(direction),
-    .force_x2(decoder_force_x2),
-    .rst(rst),
-    .strobe_x1(decoder_strobe_x1),
-    .strobe_x2(decoder_strobe_x2),
-    .strobe_x4(decoder_strobe_x4),
-    .x1_value(decoder_x1_value)
-  );
-  gearbox gearbox (
-    .clk(clk),
-    .enable(gearbox_enable),
-    .rst(rst),
-    .strobe(gearbox_strobe),
-    .strobe_x1(decoder_strobe_x1),
-    .strobe_x2(decoder_strobe_x2),
-    .strobe_x4(decoder_strobe_x4),
-    .timer_cycles(gearbox_timer_cycles)
-  );
-  pwm pwm (
-    .clk(clk),
-    .duty(pwm_duty),
-    .max_duty(pwm_max_duty),
-    .pwm_signal(pwm_signal),
-    .rst(rst)
-  );
-  serial_out serial_out (
-    .clk(clk),
-    .rst(rst),
-    .strobe(serial_out_strobe),
-    .tx(tx),
-    .word(serial_out_word)
-  );
-  spi spi (
-    .busy(spi_busy),
-    .clk(clk),
-    .cs(spi_cs),
-    .data(spi_data),
-    .rst(rst),
-    .sck(spi_sck),
-    .sdi(spi_sdi),
-    .strobe(spi_strobe)
-  );
-  assign serial_out_strobe = counter_updating_strobe;
-  assign serial_out_word = counter_value;
-  assign pwm_max_duty = counter_max_value;
-  assign pwm_duty = counter_value;
-  assign counter = counter_value;
-  assign counter_reset = spi_strobe;
-  assign counter_strobe = \$6 ;
-  assign counter_inc = direction;
-  assign { counter_max_value, counter_init_value, gearbox_timer_cycles, \$signal , spi_force_x2, decoder_x1_value, decoder_debounce, counter_wrap, gearbox_enable } = spi_data;
-  assign spi_sdi = sdi;
-  assign spi_sck = sck;
-  assign spi_cs = cs;
-  assign decoder_force_x2 = \$2 ;
-endmodule
-
-module gearbox(rst, enable, timer_cycles, strobe, strobe_x2, strobe_x4, strobe_x1, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$3  = 0;
-  wire [8:0] \$1 ;
-  wire [5:0] \$10 ;
-  wire [5:0] \$11 ;
-  wire \$13 ;
-  wire \$14 ;
-  wire \$17 ;
-  wire [5:0] \$19 ;
-  wire [8:0] \$2 ;
-  wire [5:0] \$20 ;
-  wire [4:0] \$22 ;
-  wire [4:0] \$23 ;
-  wire [1:0] \$25 ;
-  wire \$27 ;
-  wire \$29 ;
-  wire \$31 ;
-  wire \$4 ;
-  wire \$6 ;
-  wire \$8 ;
-  input clk;
-  wire clk;
-  input enable;
-  wire enable;
-  wire [1:0] g;
-  wire [1:0] gear;
-  reg [7:0] period = 8'h7f;
-  reg [7:0] \period$next ;
-  input rst;
-  wire rst;
-  output strobe;
-  reg strobe;
-  input strobe_x1;
-  wire strobe_x1;
-  input strobe_x2;
-  wire strobe_x2;
-  input strobe_x4;
-  wire strobe_x4;
-  reg [4:0] threshold = 5'h00;
-  reg [4:0] \threshold$next ;
-  input [7:0] timer_cycles;
-  wire [7:0] timer_cycles;
-  assign \$11  = threshold - 1'h1;
-  assign \$14  = & threshold;
-  assign \$13  = ~ \$14 ;
-  assign \$17  = strobe_x4 & \$13 ;
-  assign \$20  = threshold + 1'h1;
-  assign \$25  = g[1] ? 2'h2 : g;
-  assign \$2  = period + 1'h1;
-  assign \$29  = enable ? strobe_x2 : strobe_x1;
-  assign \$31  = enable ? strobe_x4 : strobe_x1;
-  always @(posedge clk)
-    period <= \period$next ;
-  always @(posedge clk)
-    threshold <= \threshold$next ;
-  assign \$4  = period == timer_cycles;
-  assign \$6  = period == timer_cycles;
-  assign \$8  = | threshold;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \period$next  = \$2 [7:0];
-    casez (\$4 )
-      1'h1:
-          \period$next  = 8'h00;
-    endcase
-    casez (rst)
-      1'h1:
-          \period$next  = 8'h7f;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \threshold$next  = threshold;
-    casez (\$6 )
-      1'h1:
-          casez (\$8 )
-            1'h1:
-                \threshold$next  = \$11 [4:0];
-          endcase
-    endcase
-    casez (\$17 )
-      1'h1:
-          \threshold$next  = \$20 [4:0];
-    endcase
-    casez (rst)
-      1'h1:
-          \threshold$next  = 5'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    (* full_case = 32'd1 *)
-    casez (gear)
-      2'h0:
-          strobe = \$27 ;
-      2'h1:
-          strobe = \$29 ;
-      2'h?:
-          strobe = \$31 ;
-    endcase
-  end
-  assign \$1  = \$2 ;
-  assign \$10  = \$11 ;
-  assign \$19  = \$20 ;
-  assign \$22  = \$23 ;
-  assign gear = \$25 ;
-  assign g = \$23 [1:0];
-  assign \$23  = { 3'h0, threshold[4:3] };
-  assign \$27  = strobe_x1;
-endmodule
-
-module pwm(rst, pwm_signal, duty, max_duty, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$4  = 0;
-  wire [8:0] \$1 ;
-  wire \$10 ;
-  wire \$12 ;
-  wire [8:0] \$2 ;
-  wire \$4 ;
-  wire \$6 ;
-  wire \$8 ;
-  input clk;
-  wire clk;
-  reg [7:0] counter = 8'h00;
-  reg [7:0] \counter$next ;
-  input [7:0] duty;
-  wire [7:0] duty;
-  input [7:0] max_duty;
-  wire [7:0] max_duty;
-  output pwm_signal;
-  reg pwm_signal = 1'h0;
-  reg \pwm_signal$next ;
-  input rst;
-  wire rst;
-  assign \$10  = counter == duty;
-  assign \$12  = | duty;
-  always @(posedge clk)
-    counter <= \counter$next ;
-  always @(posedge clk)
-    pwm_signal <= \pwm_signal$next ;
-  assign \$2  = counter + 1'h1;
-  assign \$4  = counter == max_duty;
-  assign \$6  = counter == duty;
-  assign \$8  = counter == max_duty;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$4 ) begin end
-    \counter$next  = \$2 [7:0];
-    casez ({ \$6 , \$4  })
-      2'b?1:
-          \counter$next  = 8'h00;
-    endcase
-    casez (rst)
-      1'h1:
-          \counter$next  = 8'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$4 ) begin end
-    \pwm_signal$next  = pwm_signal;
-    casez ({ \$10 , \$8  })
-      2'b?1:
-          \pwm_signal$next  = \$12 ;
-      2'b1?:
-          \pwm_signal$next  = 1'h0;
-    endcase
-    casez (rst)
-      1'h1:
-          \pwm_signal$next  = 1'h0;
-    endcase
-  end
-  assign \$1  = \$2 ;
-endmodule
-
-module serial_out(rst, tx, word, strobe, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$5  = 0;
-  wire \$1 ;
-  wire \$10 ;
-  wire [13:0] \$3 ;
-  wire \$5 ;
-  wire [4:0] \$7 ;
-  wire [4:0] \$8 ;
-  input clk;
-  wire clk;
-  reg [13:0] data = 14'h0001;
-  reg [13:0] \data$next ;
-  reg [3:0] i = 4'h0;
-  reg [3:0] \i$next ;
-  input rst;
-  wire rst;
-  reg start = 1'h0;
-  reg \start$next ;
-  input strobe;
-  wire strobe;
-  output tx;
-  wire tx;
-  input [7:0] word;
-  wire [7:0] word;
-  assign \$10  = | i;
-  always @(posedge clk)
-    data <= \data$next ;
-  always @(posedge clk)
-    i <= \i$next ;
-  always @(posedge clk)
-    start <= \start$next ;
-  assign \$1  = | i;
-  assign \$3  = + data[13:1];
-  assign \$5  = | i;
-  assign \$8  = i - 1'h1;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \data$next  = data;
-    casez ({ start, \$1  })
-      2'b?1:
-          \data$next  = \$3 ;
-      2'b1?:
-          \data$next  = { 5'h1f, word, 1'h0 };
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 14'h0001;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \i$next  = i;
-    casez ({ start, \$5  })
-      2'b?1:
-          \i$next  = \$8 [3:0];
-      2'b1?:
-          \i$next  = 4'hd;
-    endcase
-    casez (rst)
-      1'h1:
-          \i$next  = 4'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \start$next  = start;
-    casez ({ start, \$10  })
-      2'b?1:
-          /* empty */;
-      2'b1?:
-          \start$next  = 1'h0;
-    endcase
-    casez (strobe)
-      1'h1:
-          \start$next  = 1'h1;
-    endcase
-    casez (rst)
-      1'h1:
-          \start$next  = 1'h0;
-    endcase
-  end
-  assign \$7  = \$8 ;
-  assign tx = data[0];
-endmodule
-
-module spi(rst, cs, sck, sdi, data, busy, strobe, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$6  = 0;
-  wire \$1 ;
-  wire \$11 ;
-  wire \$13 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire [6:0] \$27 ;
-  wire [6:0] \$28 ;
-  wire \$3 ;
-  wire \$30 ;
-  wire \$32 ;
-  wire \$34 ;
-  wire \$36 ;
-  wire \$38 ;
-  wire \$40 ;
-  wire \$42 ;
-  wire \$44 ;
-  wire \$46 ;
-  wire \$48 ;
-  wire \$5 ;
-  wire \$50 ;
-  wire \$52 ;
-  wire \$7 ;
-  wire \$9 ;
-  (* \amaranth.sample_reg  = 32'd1 *)
-  reg \$sample$s$cs$sync$1  = 1'h0;
-  wire \$sample$s$cs$sync$1$next ;
-  (* \amaranth.sample_reg  = 32'd1 *)
-  reg \$sample$s$sck$sync$1  = 1'h0;
-  wire \$sample$s$sck$sync$1$next ;
-  output busy;
-  reg busy = 1'h0;
-  reg \busy$next ;
-  input clk;
-  wire clk;
-  input cs;
-  wire cs;
-  output [31:0] data;
-  reg [31:0] data = 32'd520109572;
-  reg [31:0] \data$next ;
-  reg [5:0] i = 6'h00;
-  reg [5:0] \i$next ;
-  input rst;
-  wire rst;
-  input sck;
-  wire sck;
-  input sdi;
-  wire sdi;
-  output strobe;
-  reg strobe = 1'h0;
-  reg \strobe$next ;
-  assign \$9  = ~ \$sample$s$sck$sync$1 ;
-  assign \$11  = \$9  & sck;
-  assign \$13  = i == 6'h20;
-  assign \$15  = ~ cs;
-  assign \$17  = \$sample$s$cs$sync$1  & \$15 ;
-  assign \$1  = ~ cs;
-  assign \$19  = ~ \$sample$s$cs$sync$1 ;
-  assign \$21  = \$19  & cs;
-  assign \$23  = ~ \$sample$s$sck$sync$1 ;
-  assign \$25  = \$23  & sck;
-  assign \$28  = i + 1'h1;
-  assign \$30  = ~ cs;
-  assign \$32  = \$sample$s$cs$sync$1  & \$30 ;
-  assign \$34  = ~ \$sample$s$cs$sync$1 ;
-  assign \$36  = \$34  & cs;
-  assign \$38  = ~ \$sample$s$sck$sync$1 ;
-  assign \$3  = \$sample$s$cs$sync$1  & \$1 ;
-  assign \$40  = \$38  & sck;
-  assign \$42  = ~ cs;
-  assign \$44  = \$sample$s$cs$sync$1  & \$42 ;
-  assign \$46  = ~ \$sample$s$cs$sync$1 ;
-  assign \$48  = \$46  & cs;
-  assign \$50  = ~ \$sample$s$sck$sync$1 ;
-  assign \$52  = \$50  & sck;
-  always @(posedge clk)
-    \$sample$s$cs$sync$1  <= \$sample$s$cs$sync$1$next ;
-  always @(posedge clk)
-    \$sample$s$sck$sync$1  <= \$sample$s$sck$sync$1$next ;
-  always @(posedge clk)
-    strobe <= \strobe$next ;
-  always @(posedge clk)
-    i <= \i$next ;
-  always @(posedge clk)
-    busy <= \busy$next ;
-  always @(posedge clk)
-    data <= \data$next ;
-  assign \$5  = ~ \$sample$s$cs$sync$1 ;
-  assign \$7  = \$5  & cs;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \strobe$next  = 1'h0;
-    casez ({ busy, \$3  })
-      2'b?1:
-          /* empty */;
-      2'b1?:
-          casez ({ \$11 , \$7  })
-            2'b?1:
-                \strobe$next  = \$13 ;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \strobe$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \i$next  = i;
-    casez ({ busy, \$17  })
-      2'b?1:
-          \i$next  = 6'h00;
-      2'b1?:
-          casez ({ \$25 , \$21  })
-            2'b?1:
-                /* empty */;
-            2'b1?:
-                \i$next  = \$28 [5:0];
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \i$next  = 6'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \busy$next  = busy;
-    casez ({ busy, \$32  })
-      2'b?1:
-          \busy$next  = 1'h1;
-      2'b1?:
-          casez ({ \$40 , \$36  })
-            2'b?1:
-                \busy$next  = 1'h0;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \busy$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \data$next  = data;
-    casez ({ busy, \$44  })
-      2'b?1:
-          /* empty */;
-      2'b1?:
-          casez ({ \$52 , \$48  })
-            2'b?1:
-                /* empty */;
-            2'b1?:
-                \data$next  = { data[30:0], sdi };
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 32'd520109572;
-    endcase
-  end
-  assign \$27  = \$28 ;
-  assign \$sample$s$sck$sync$1$next  = sck;
-  assign \$sample$s$cs$sync$1$next  = cs;
-endmodule
-
-module swalense_top(io_in, io_out);
-  wire [1:0] dev_channels;
-  wire dev_clk;
-  wire [7:0] dev_counter;
-  wire dev_cs;
-  wire dev_direction;
-  wire dev_force_x2;
-  wire dev_pwm_signal;
-  wire dev_rst;
-  wire dev_sck;
-  wire dev_sdi;
-  wire dev_tx;
-  input [7:0] io_in;
-  wire [7:0] io_in;
-  output [7:0] io_out;
-  wire [7:0] io_out;
-  dev dev (
-    .channels(dev_channels),
-    .clk(dev_clk),
-    .counter(dev_counter),
-    .cs(dev_cs),
-    .direction(dev_direction),
-    .force_x2(dev_force_x2),
-    .pwm_signal(dev_pwm_signal),
-    .rst(dev_rst),
-    .sck(dev_sck),
-    .sdi(dev_sdi),
-    .tx(dev_tx)
-  );
-  assign io_out = { dev_counter[4:0], dev_direction, dev_pwm_signal, dev_tx };
-  assign { dev_sdi, dev_sck, dev_cs, dev_force_x2, dev_channels } = io_in[7:2];
-  assign dev_rst = io_in[1];
-  assign dev_clk = io_in[0];
-endmodule
-
diff --git a/verilog/rtl/114_luthor2k_top_tto.v b/verilog/rtl/114_luthor2k_top_tto.v
deleted file mode 100644
index 5a37f80..0000000
--- a/verilog/rtl/114_luthor2k_top_tto.v
+++ /dev/null
@@ -1,32 +0,0 @@
-`default_nettype none
-
-module luthor2k_top_tto
-  #(parameter CLOCK_RATE=9600)
-  (
-   input [7:0]  io_in,
-   output [7:0] io_out
-   );
-  
-  // INPUTS
-  wire                      clk_ascii   = io_in[0];
-  wire                      clk_baudot = io_in[1];
-  wire                      baudot_input = io_in[2];
-  
-  // OUTPUTS
-  wire                      ascii_serial_output;
-  wire                      baudot_ready_out;
-  wire               [4:0]  baudot_byte_out;
-
-  assign io_out[0] = ascii_serial_output;
-  assign io_out[1] = baudot_ready_out;  
-  //assign io_out[2] = 
-  assign io_out[3] = baudot_byte_out[0];
-  assign io_out[4] = baudot_byte_out[1];
-  assign io_out[5] = baudot_byte_out[2];
-  assign io_out[6] = baudot_byte_out[3];
-  assign io_out[7] = baudot_byte_out[4];
-
-  // instatiate converter  .function_pin(top_pin)
-  main main(.v65b531(clk_ascii), .v3c4a34(clk_baudot), .vcb44a7(baudot_input), .v7c2fea(ascii_serial_output), .v40cda4(baudot_ready_out), .v4d3fdd(baudot_byte_out));
-  
-endmodule
diff --git a/verilog/rtl/114_swalense_top.v b/verilog/rtl/114_swalense_top.v
deleted file mode 100644
index 17f77e9..0000000
--- a/verilog/rtl/114_swalense_top.v
+++ /dev/null
@@ -1,772 +0,0 @@
-/* Generated by Yosys 0.23+8 (git sha1 48659ee2b, clang 14.0.0 -fPIC -Os) */
-
-module counter(rst, wrap, init_value, max_value, inc, strobe, reset, value, updating_strobe, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$1  = 0;
-  wire \$1 ;
-  wire [9:0] \$11 ;
-  wire [8:0] \$12 ;
-  wire [8:0] \$14 ;
-  wire [1:0] \$15 ;
-  wire [9:0] \$18 ;
-  wire [7:0] \$20 ;
-  wire \$3 ;
-  wire \$5 ;
-  wire \$7 ;
-  wire \$9 ;
-  wire can_update;
-  input clk;
-  wire clk;
-  input inc;
-  wire inc;
-  input [7:0] init_value;
-  wire [7:0] init_value;
-  input [7:0] max_value;
-  wire [7:0] max_value;
-  input reset;
-  wire reset;
-  input rst;
-  wire rst;
-  input strobe;
-  wire strobe;
-  output updating_strobe;
-  wire updating_strobe;
-  output [7:0] value;
-  reg [7:0] value = 8'h00;
-  reg [7:0] \value$next ;
-  input wrap;
-  wire wrap;
-  assign \$9  = strobe & \$7 ;
-  assign \$12  = + value;
-  assign \$15  = inc ? 2'h1 : 2'h3;
-  assign \$14  = + $signed(\$15 );
-  assign \$18  = $signed(\$12 ) + $signed(\$14 );
-  assign \$1  = value != max_value;
-  assign \$20  = inc ? 8'h00 : max_value;
-  always @(posedge clk)
-    value <= \value$next ;
-  assign \$3  = | value;
-  assign \$5  = inc ? \$1  : \$3 ;
-  assign \$7  = wrap | can_update;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$1 ) begin end
-    \value$next  = value;
-    casez ({ updating_strobe, reset })
-      2'b?1:
-          \value$next  = init_value;
-      2'b1?:
-          (* full_case = 32'd1 *)
-          casez (can_update)
-            1'h1:
-                \value$next  = \$18 [7:0];
-            default:
-                \value$next  = \$20 ;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \value$next  = 8'h00;
-    endcase
-  end
-  assign \$11  = \$18 ;
-  assign updating_strobe = \$9 ;
-  assign can_update = \$5 ;
-endmodule
-
-module decoder(rst, channels, direction, force_x2, debounce, x1_value, strobe_x2, strobe_x4, strobe_x1, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$2  = 0;
-  wire \$1 ;
-  wire \$11 ;
-  wire \$13 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire \$27 ;
-  wire \$29 ;
-  wire \$3 ;
-  wire [1:0] \$5 ;
-  wire \$7 ;
-  wire \$9 ;
-  input [1:0] channels;
-  wire [1:0] channels;
-  input clk;
-  wire clk;
-  input debounce;
-  wire debounce;
-  wire dir;
-  output direction;
-  reg direction = 1'h0;
-  reg \direction$next ;
-  input force_x2;
-  wire force_x2;
-  reg [1:0] prev_channels = 2'h0;
-  reg [1:0] \prev_channels$next ;
-  input rst;
-  wire rst;
-  output strobe_x1;
-  wire strobe_x1;
-  output strobe_x2;
-  wire strobe_x2;
-  output strobe_x4;
-  reg strobe_x4 = 1'h0;
-  reg \strobe_x4$next ;
-  input [1:0] x1_value;
-  wire [1:0] x1_value;
-  assign \$9  = \$3  | \$7 ;
-  assign \$11  = strobe_x4 & \$9 ;
-  assign \$13  = channels == x1_value;
-  assign \$15  = strobe_x4 & \$13 ;
-  assign \$17  = force_x2 ? strobe_x2 : \$15 ;
-  assign \$1  = channels[0] ^ prev_channels[1];
-  assign \$19  = channels != prev_channels;
-  assign \$21  = dir == direction;
-  assign \$23  = ~ debounce;
-  assign \$25  = \$21  | \$23 ;
-  assign \$27  = channels != prev_channels;
-  assign \$29  = channels != prev_channels;
-  always @(posedge clk)
-    strobe_x4 <= \strobe_x4$next ;
-  always @(posedge clk)
-    prev_channels <= \prev_channels$next ;
-  always @(posedge clk)
-    direction <= \direction$next ;
-  assign \$3  = channels == x1_value;
-  assign \$5  = ~ x1_value;
-  assign \$7  = channels == \$5 ;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    \strobe_x4$next  = 1'h0;
-    casez (\$19 )
-      1'h1:
-          \strobe_x4$next  = \$25 ;
-    endcase
-    casez (rst)
-      1'h1:
-          \strobe_x4$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    \prev_channels$next  = prev_channels;
-    casez (\$27 )
-      1'h1:
-          \prev_channels$next  = channels;
-    endcase
-    casez (rst)
-      1'h1:
-          \prev_channels$next  = channels;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$2 ) begin end
-    \direction$next  = direction;
-    casez (\$29 )
-      1'h1:
-          \direction$next  = dir;
-    endcase
-    casez (rst)
-      1'h1:
-          \direction$next  = 1'h0;
-    endcase
-  end
-  assign strobe_x1 = \$17 ;
-  assign strobe_x2 = \$11 ;
-  assign dir = \$1 ;
-endmodule
-
-module dev(rst, channels, force_x2, cs, sck, sdi, tx, pwm_signal, direction, counter, clk);
-  wire \$2 ;
-  wire \$4 ;
-  wire \$6 ;
-  wire [1:0] \$signal ;
-  input [1:0] channels;
-  wire [1:0] channels;
-  input clk;
-  wire clk;
-  output [7:0] counter;
-  wire [7:0] counter;
-  wire counter_inc;
-  wire [7:0] counter_init_value;
-  wire [7:0] counter_max_value;
-  wire counter_reset;
-  wire counter_strobe;
-  wire counter_updating_strobe;
-  wire [7:0] counter_value;
-  wire counter_wrap;
-  input cs;
-  wire cs;
-  wire decoder_debounce;
-  wire decoder_force_x2;
-  wire decoder_strobe_x1;
-  wire decoder_strobe_x2;
-  wire decoder_strobe_x4;
-  wire [1:0] decoder_x1_value;
-  output direction;
-  wire direction;
-  input force_x2;
-  wire force_x2;
-  wire gearbox_enable;
-  wire gearbox_strobe;
-  wire [7:0] gearbox_timer_cycles;
-  wire [7:0] pwm_duty;
-  wire [7:0] pwm_max_duty;
-  output pwm_signal;
-  wire pwm_signal;
-  input rst;
-  wire rst;
-  input sck;
-  wire sck;
-  input sdi;
-  wire sdi;
-  wire serial_out_strobe;
-  wire [7:0] serial_out_word;
-  wire spi_busy;
-  wire spi_cs;
-  wire [31:0] spi_data;
-  wire spi_force_x2;
-  wire spi_sck;
-  wire spi_sdi;
-  wire spi_strobe;
-  output tx;
-  wire tx;
-  assign \$2  = force_x2 | spi_force_x2;
-  assign \$4  = ~ spi_busy;
-  assign \$6  = \$4  & gearbox_strobe;
-  counter \counter$1  (
-    .clk(clk),
-    .inc(counter_inc),
-    .init_value(counter_init_value),
-    .max_value(counter_max_value),
-    .reset(counter_reset),
-    .rst(rst),
-    .strobe(counter_strobe),
-    .updating_strobe(counter_updating_strobe),
-    .value(counter_value),
-    .wrap(counter_wrap)
-  );
-  decoder decoder (
-    .channels(channels),
-    .clk(clk),
-    .debounce(decoder_debounce),
-    .direction(direction),
-    .force_x2(decoder_force_x2),
-    .rst(rst),
-    .strobe_x1(decoder_strobe_x1),
-    .strobe_x2(decoder_strobe_x2),
-    .strobe_x4(decoder_strobe_x4),
-    .x1_value(decoder_x1_value)
-  );
-  gearbox gearbox (
-    .clk(clk),
-    .enable(gearbox_enable),
-    .rst(rst),
-    .strobe(gearbox_strobe),
-    .strobe_x1(decoder_strobe_x1),
-    .strobe_x2(decoder_strobe_x2),
-    .strobe_x4(decoder_strobe_x4),
-    .timer_cycles(gearbox_timer_cycles)
-  );
-  pwm pwm (
-    .clk(clk),
-    .duty(pwm_duty),
-    .max_duty(pwm_max_duty),
-    .pwm_signal(pwm_signal),
-    .rst(rst)
-  );
-  serial_out serial_out (
-    .clk(clk),
-    .rst(rst),
-    .strobe(serial_out_strobe),
-    .tx(tx),
-    .word(serial_out_word)
-  );
-  spi spi (
-    .busy(spi_busy),
-    .clk(clk),
-    .cs(spi_cs),
-    .data(spi_data),
-    .rst(rst),
-    .sck(spi_sck),
-    .sdi(spi_sdi),
-    .strobe(spi_strobe)
-  );
-  assign serial_out_strobe = counter_updating_strobe;
-  assign serial_out_word = counter_value;
-  assign pwm_max_duty = counter_max_value;
-  assign pwm_duty = counter_value;
-  assign counter = counter_value;
-  assign counter_reset = spi_strobe;
-  assign counter_strobe = \$6 ;
-  assign counter_inc = direction;
-  assign { counter_max_value, counter_init_value, gearbox_timer_cycles, \$signal , spi_force_x2, decoder_x1_value, decoder_debounce, counter_wrap, gearbox_enable } = spi_data;
-  assign spi_sdi = sdi;
-  assign spi_sck = sck;
-  assign spi_cs = cs;
-  assign decoder_force_x2 = \$2 ;
-endmodule
-
-module gearbox(rst, enable, timer_cycles, strobe, strobe_x2, strobe_x4, strobe_x1, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$3  = 0;
-  wire [8:0] \$1 ;
-  wire [5:0] \$10 ;
-  wire [5:0] \$11 ;
-  wire \$13 ;
-  wire \$14 ;
-  wire \$17 ;
-  wire [5:0] \$19 ;
-  wire [8:0] \$2 ;
-  wire [5:0] \$20 ;
-  wire [4:0] \$22 ;
-  wire [4:0] \$23 ;
-  wire [1:0] \$25 ;
-  wire \$27 ;
-  wire \$29 ;
-  wire \$31 ;
-  wire \$4 ;
-  wire \$6 ;
-  wire \$8 ;
-  input clk;
-  wire clk;
-  input enable;
-  wire enable;
-  wire [1:0] g;
-  wire [1:0] gear;
-  reg [7:0] period = 8'h7f;
-  reg [7:0] \period$next ;
-  input rst;
-  wire rst;
-  output strobe;
-  reg strobe;
-  input strobe_x1;
-  wire strobe_x1;
-  input strobe_x2;
-  wire strobe_x2;
-  input strobe_x4;
-  wire strobe_x4;
-  reg [4:0] threshold = 5'h00;
-  reg [4:0] \threshold$next ;
-  input [7:0] timer_cycles;
-  wire [7:0] timer_cycles;
-  assign \$11  = threshold - 1'h1;
-  assign \$14  = & threshold;
-  assign \$13  = ~ \$14 ;
-  assign \$17  = strobe_x4 & \$13 ;
-  assign \$20  = threshold + 1'h1;
-  assign \$25  = g[1] ? 2'h2 : g;
-  assign \$2  = period + 1'h1;
-  assign \$29  = enable ? strobe_x2 : strobe_x1;
-  assign \$31  = enable ? strobe_x4 : strobe_x1;
-  always @(posedge clk)
-    period <= \period$next ;
-  always @(posedge clk)
-    threshold <= \threshold$next ;
-  assign \$4  = period == timer_cycles;
-  assign \$6  = period == timer_cycles;
-  assign \$8  = | threshold;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \period$next  = \$2 [7:0];
-    casez (\$4 )
-      1'h1:
-          \period$next  = 8'h00;
-    endcase
-    casez (rst)
-      1'h1:
-          \period$next  = 8'h7f;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    \threshold$next  = threshold;
-    casez (\$6 )
-      1'h1:
-          casez (\$8 )
-            1'h1:
-                \threshold$next  = \$11 [4:0];
-          endcase
-    endcase
-    casez (\$17 )
-      1'h1:
-          \threshold$next  = \$20 [4:0];
-    endcase
-    casez (rst)
-      1'h1:
-          \threshold$next  = 5'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$3 ) begin end
-    (* full_case = 32'd1 *)
-    casez (gear)
-      2'h0:
-          strobe = \$27 ;
-      2'h1:
-          strobe = \$29 ;
-      2'h?:
-          strobe = \$31 ;
-    endcase
-  end
-  assign \$1  = \$2 ;
-  assign \$10  = \$11 ;
-  assign \$19  = \$20 ;
-  assign \$22  = \$23 ;
-  assign gear = \$25 ;
-  assign g = \$23 [1:0];
-  assign \$23  = { 3'h0, threshold[4:3] };
-  assign \$27  = strobe_x1;
-endmodule
-
-module pwm(rst, pwm_signal, duty, max_duty, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$4  = 0;
-  wire [8:0] \$1 ;
-  wire \$10 ;
-  wire \$12 ;
-  wire [8:0] \$2 ;
-  wire \$4 ;
-  wire \$6 ;
-  wire \$8 ;
-  input clk;
-  wire clk;
-  reg [7:0] counter = 8'h00;
-  reg [7:0] \counter$next ;
-  input [7:0] duty;
-  wire [7:0] duty;
-  input [7:0] max_duty;
-  wire [7:0] max_duty;
-  output pwm_signal;
-  reg pwm_signal = 1'h0;
-  reg \pwm_signal$next ;
-  input rst;
-  wire rst;
-  assign \$10  = counter == duty;
-  assign \$12  = | duty;
-  always @(posedge clk)
-    counter <= \counter$next ;
-  always @(posedge clk)
-    pwm_signal <= \pwm_signal$next ;
-  assign \$2  = counter + 1'h1;
-  assign \$4  = counter == max_duty;
-  assign \$6  = counter == duty;
-  assign \$8  = counter == max_duty;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$4 ) begin end
-    \counter$next  = \$2 [7:0];
-    casez ({ \$6 , \$4  })
-      2'b?1:
-          \counter$next  = 8'h00;
-    endcase
-    casez (rst)
-      1'h1:
-          \counter$next  = 8'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$4 ) begin end
-    \pwm_signal$next  = pwm_signal;
-    casez ({ \$10 , \$8  })
-      2'b?1:
-          \pwm_signal$next  = \$12 ;
-      2'b1?:
-          \pwm_signal$next  = 1'h0;
-    endcase
-    casez (rst)
-      1'h1:
-          \pwm_signal$next  = 1'h0;
-    endcase
-  end
-  assign \$1  = \$2 ;
-endmodule
-
-module serial_out(rst, tx, word, strobe, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$5  = 0;
-  wire \$1 ;
-  wire \$10 ;
-  wire [13:0] \$3 ;
-  wire \$5 ;
-  wire [4:0] \$7 ;
-  wire [4:0] \$8 ;
-  input clk;
-  wire clk;
-  reg [13:0] data = 14'h0001;
-  reg [13:0] \data$next ;
-  reg [3:0] i = 4'h0;
-  reg [3:0] \i$next ;
-  input rst;
-  wire rst;
-  reg start = 1'h0;
-  reg \start$next ;
-  input strobe;
-  wire strobe;
-  output tx;
-  wire tx;
-  input [7:0] word;
-  wire [7:0] word;
-  assign \$10  = | i;
-  always @(posedge clk)
-    data <= \data$next ;
-  always @(posedge clk)
-    i <= \i$next ;
-  always @(posedge clk)
-    start <= \start$next ;
-  assign \$1  = | i;
-  assign \$3  = + data[13:1];
-  assign \$5  = | i;
-  assign \$8  = i - 1'h1;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \data$next  = data;
-    casez ({ start, \$1  })
-      2'b?1:
-          \data$next  = \$3 ;
-      2'b1?:
-          \data$next  = { 5'h1f, word, 1'h0 };
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 14'h0001;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \i$next  = i;
-    casez ({ start, \$5  })
-      2'b?1:
-          \i$next  = \$8 [3:0];
-      2'b1?:
-          \i$next  = 4'hd;
-    endcase
-    casez (rst)
-      1'h1:
-          \i$next  = 4'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$5 ) begin end
-    \start$next  = start;
-    casez ({ start, \$10  })
-      2'b?1:
-          /* empty */;
-      2'b1?:
-          \start$next  = 1'h0;
-    endcase
-    casez (strobe)
-      1'h1:
-          \start$next  = 1'h1;
-    endcase
-    casez (rst)
-      1'h1:
-          \start$next  = 1'h0;
-    endcase
-  end
-  assign \$7  = \$8 ;
-  assign tx = data[0];
-endmodule
-
-module spi(rst, cs, sck, sdi, data, busy, strobe, clk);
-  reg \$auto$verilog_backend.cc:2083:dump_module$6  = 0;
-  wire \$1 ;
-  wire \$11 ;
-  wire \$13 ;
-  wire \$15 ;
-  wire \$17 ;
-  wire \$19 ;
-  wire \$21 ;
-  wire \$23 ;
-  wire \$25 ;
-  wire [6:0] \$27 ;
-  wire [6:0] \$28 ;
-  wire \$3 ;
-  wire \$30 ;
-  wire \$32 ;
-  wire \$34 ;
-  wire \$36 ;
-  wire \$38 ;
-  wire \$40 ;
-  wire \$42 ;
-  wire \$44 ;
-  wire \$46 ;
-  wire \$48 ;
-  wire \$5 ;
-  wire \$50 ;
-  wire \$52 ;
-  wire \$7 ;
-  wire \$9 ;
-  (* \amaranth.sample_reg  = 32'd1 *)
-  reg \$sample$s$cs$sync$1  = 1'h0;
-  wire \$sample$s$cs$sync$1$next ;
-  (* \amaranth.sample_reg  = 32'd1 *)
-  reg \$sample$s$sck$sync$1  = 1'h0;
-  wire \$sample$s$sck$sync$1$next ;
-  output busy;
-  reg busy = 1'h0;
-  reg \busy$next ;
-  input clk;
-  wire clk;
-  input cs;
-  wire cs;
-  output [31:0] data;
-  reg [31:0] data = 32'd520109572;
-  reg [31:0] \data$next ;
-  reg [5:0] i = 6'h00;
-  reg [5:0] \i$next ;
-  input rst;
-  wire rst;
-  input sck;
-  wire sck;
-  input sdi;
-  wire sdi;
-  output strobe;
-  reg strobe = 1'h0;
-  reg \strobe$next ;
-  assign \$9  = ~ \$sample$s$sck$sync$1 ;
-  assign \$11  = \$9  & sck;
-  assign \$13  = i == 6'h20;
-  assign \$15  = ~ cs;
-  assign \$17  = \$sample$s$cs$sync$1  & \$15 ;
-  assign \$1  = ~ cs;
-  assign \$19  = ~ \$sample$s$cs$sync$1 ;
-  assign \$21  = \$19  & cs;
-  assign \$23  = ~ \$sample$s$sck$sync$1 ;
-  assign \$25  = \$23  & sck;
-  assign \$28  = i + 1'h1;
-  assign \$30  = ~ cs;
-  assign \$32  = \$sample$s$cs$sync$1  & \$30 ;
-  assign \$34  = ~ \$sample$s$cs$sync$1 ;
-  assign \$36  = \$34  & cs;
-  assign \$38  = ~ \$sample$s$sck$sync$1 ;
-  assign \$3  = \$sample$s$cs$sync$1  & \$1 ;
-  assign \$40  = \$38  & sck;
-  assign \$42  = ~ cs;
-  assign \$44  = \$sample$s$cs$sync$1  & \$42 ;
-  assign \$46  = ~ \$sample$s$cs$sync$1 ;
-  assign \$48  = \$46  & cs;
-  assign \$50  = ~ \$sample$s$sck$sync$1 ;
-  assign \$52  = \$50  & sck;
-  always @(posedge clk)
-    \$sample$s$cs$sync$1  <= \$sample$s$cs$sync$1$next ;
-  always @(posedge clk)
-    \$sample$s$sck$sync$1  <= \$sample$s$sck$sync$1$next ;
-  always @(posedge clk)
-    strobe <= \strobe$next ;
-  always @(posedge clk)
-    i <= \i$next ;
-  always @(posedge clk)
-    busy <= \busy$next ;
-  always @(posedge clk)
-    data <= \data$next ;
-  assign \$5  = ~ \$sample$s$cs$sync$1 ;
-  assign \$7  = \$5  & cs;
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \strobe$next  = 1'h0;
-    casez ({ busy, \$3  })
-      2'b?1:
-          /* empty */;
-      2'b1?:
-          casez ({ \$11 , \$7  })
-            2'b?1:
-                \strobe$next  = \$13 ;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \strobe$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \i$next  = i;
-    casez ({ busy, \$17  })
-      2'b?1:
-          \i$next  = 6'h00;
-      2'b1?:
-          casez ({ \$25 , \$21  })
-            2'b?1:
-                /* empty */;
-            2'b1?:
-                \i$next  = \$28 [5:0];
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \i$next  = 6'h00;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \busy$next  = busy;
-    casez ({ busy, \$32  })
-      2'b?1:
-          \busy$next  = 1'h1;
-      2'b1?:
-          casez ({ \$40 , \$36  })
-            2'b?1:
-                \busy$next  = 1'h0;
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \busy$next  = 1'h0;
-    endcase
-  end
-  always @* begin
-    if (\$auto$verilog_backend.cc:2083:dump_module$6 ) begin end
-    \data$next  = data;
-    casez ({ busy, \$44  })
-      2'b?1:
-          /* empty */;
-      2'b1?:
-          casez ({ \$52 , \$48  })
-            2'b?1:
-                /* empty */;
-            2'b1?:
-                \data$next  = { data[30:0], sdi };
-          endcase
-    endcase
-    casez (rst)
-      1'h1:
-          \data$next  = 32'd520109572;
-    endcase
-  end
-  assign \$27  = \$28 ;
-  assign \$sample$s$sck$sync$1$next  = sck;
-  assign \$sample$s$cs$sync$1$next  = cs;
-endmodule
-
-module swalense_top(io_in, io_out);
-  wire [1:0] dev_channels;
-  wire dev_clk;
-  wire [7:0] dev_counter;
-  wire dev_cs;
-  wire dev_direction;
-  wire dev_force_x2;
-  wire dev_pwm_signal;
-  wire dev_rst;
-  wire dev_sck;
-  wire dev_sdi;
-  wire dev_tx;
-  input [7:0] io_in;
-  wire [7:0] io_in;
-  output [7:0] io_out;
-  wire [7:0] io_out;
-  dev dev (
-    .channels(dev_channels),
-    .clk(dev_clk),
-    .counter(dev_counter),
-    .cs(dev_cs),
-    .direction(dev_direction),
-    .force_x2(dev_force_x2),
-    .pwm_signal(dev_pwm_signal),
-    .rst(dev_rst),
-    .sck(dev_sck),
-    .sdi(dev_sdi),
-    .tx(dev_tx)
-  );
-  assign io_out = { dev_counter[4:0], dev_direction, dev_pwm_signal, dev_tx };
-  assign { dev_sdi, dev_sck, dev_cs, dev_force_x2, dev_channels } = io_in[7:2];
-  assign dev_rst = io_in[1];
-  assign dev_clk = io_in[0];
-endmodule
-
diff --git a/verilog/rtl/115_luthor2k_top_tto.v b/verilog/rtl/115_luthor2k_top_tto.v
deleted file mode 100644
index 5a37f80..0000000
--- a/verilog/rtl/115_luthor2k_top_tto.v
+++ /dev/null
@@ -1,32 +0,0 @@
-`default_nettype none
-
-module luthor2k_top_tto
-  #(parameter CLOCK_RATE=9600)
-  (
-   input [7:0]  io_in,
-   output [7:0] io_out
-   );
-  
-  // INPUTS
-  wire                      clk_ascii   = io_in[0];
-  wire                      clk_baudot = io_in[1];
-  wire                      baudot_input = io_in[2];
-  
-  // OUTPUTS
-  wire                      ascii_serial_output;
-  wire                      baudot_ready_out;
-  wire               [4:0]  baudot_byte_out;
-
-  assign io_out[0] = ascii_serial_output;
-  assign io_out[1] = baudot_ready_out;  
-  //assign io_out[2] = 
-  assign io_out[3] = baudot_byte_out[0];
-  assign io_out[4] = baudot_byte_out[1];
-  assign io_out[5] = baudot_byte_out[2];
-  assign io_out[6] = baudot_byte_out[3];
-  assign io_out[7] = baudot_byte_out[4];
-
-  // instatiate converter  .function_pin(top_pin)
-  main main(.v65b531(clk_ascii), .v3c4a34(clk_baudot), .vcb44a7(baudot_input), .v7c2fea(ascii_serial_output), .v40cda4(baudot_ready_out), .v4d3fdd(baudot_byte_out));
-  
-endmodule
diff --git a/verilog/rtl/116_Asma_Mohsin_conv_enc_core.v b/verilog/rtl/116_Asma_Mohsin_conv_enc_core.v
deleted file mode 100644
index 58756c7..0000000
--- a/verilog/rtl/116_Asma_Mohsin_conv_enc_core.v
+++ /dev/null
@@ -1,42 +0,0 @@
-module Asma_Mohsin_conv_enc_core(// Inputs
- input [7:0]io_in,
-// Output
- output [7:0]io_out
-);
-parameter [4:0] POLY_1 = 5'b10111 ;
-parameter [4:0] POLY_2 = 5'b11001 ;
-// Inputs
-wire clk ;
-wire rst_n ;
-wire data_valid ;
-wire d_in ;
-
-assign clk = io_in[0];
-assign rst_n=io_in[1];
-assign data_valid=io_in[2];
-assign d_in=io_in[3];
-
-// Output
-
-//output [1:0] enc_dout ;
-reg [4:0] shift_reg ;
-reg [1:0] codeword ;
-wire [1:0] enc_dout ;
-// Shift Input Data in 5 bits lenght register
-always @(posedge clk or negedge rst_n)
-begin
-if(~rst_n)
-shift_reg <= 5'd0 ;
-else if(data_valid)
-shift_reg <= {d_in, shift_reg[4:1]} ;
-else
-shift_reg <= 5'd0 ;
-end
-always @(shift_reg)
-begin
-codeword[0] = ^(POLY_2 & shift_reg) ;
-codeword[1] = ^(POLY_1 & shift_reg) ;
-end
-assign io_out = codeword ;
-endmodule
-
diff --git a/verilog/rtl/117_Asma_Mohsin_conv_enc_core.v b/verilog/rtl/117_Asma_Mohsin_conv_enc_core.v
deleted file mode 100644
index 58756c7..0000000
--- a/verilog/rtl/117_Asma_Mohsin_conv_enc_core.v
+++ /dev/null
@@ -1,42 +0,0 @@
-module Asma_Mohsin_conv_enc_core(// Inputs
- input [7:0]io_in,
-// Output
- output [7:0]io_out
-);
-parameter [4:0] POLY_1 = 5'b10111 ;
-parameter [4:0] POLY_2 = 5'b11001 ;
-// Inputs
-wire clk ;
-wire rst_n ;
-wire data_valid ;
-wire d_in ;
-
-assign clk = io_in[0];
-assign rst_n=io_in[1];
-assign data_valid=io_in[2];
-assign d_in=io_in[3];
-
-// Output
-
-//output [1:0] enc_dout ;
-reg [4:0] shift_reg ;
-reg [1:0] codeword ;
-wire [1:0] enc_dout ;
-// Shift Input Data in 5 bits lenght register
-always @(posedge clk or negedge rst_n)
-begin
-if(~rst_n)
-shift_reg <= 5'd0 ;
-else if(data_valid)
-shift_reg <= {d_in, shift_reg[4:1]} ;
-else
-shift_reg <= 5'd0 ;
-end
-always @(shift_reg)
-begin
-codeword[0] = ^(POLY_2 & shift_reg) ;
-codeword[1] = ^(POLY_1 & shift_reg) ;
-end
-assign io_out = codeword ;
-endmodule
-
diff --git a/verilog/rtl/117_stevenmburns_toplevel.v b/verilog/rtl/117_stevenmburns_toplevel.v
deleted file mode 100644
index 2549487..0000000
--- a/verilog/rtl/117_stevenmburns_toplevel.v
+++ /dev/null
@@ -1,16 +0,0 @@
-module stevenmburns_toplevel(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  
-ScanBinary u0(.clock(io_in[0]),
-	.reset(io_in[1]),
-	.io_ld(io_in[2]),
-	.io_u_bit(io_in[3]),
-	.io_v_bit(io_in[4]),
-	.io_z_bit(io_out[0]),
-	.io_done(io_out[1]));
-
-assign io_out[7:2] = 6'b0;
-
-endmodule
diff --git a/verilog/rtl/118_stevenmburns_toplevel.v b/verilog/rtl/118_stevenmburns_toplevel.v
deleted file mode 100644
index 2549487..0000000
--- a/verilog/rtl/118_stevenmburns_toplevel.v
+++ /dev/null
@@ -1,16 +0,0 @@
-module stevenmburns_toplevel(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  
-ScanBinary u0(.clock(io_in[0]),
-	.reset(io_in[1]),
-	.io_ld(io_in[2]),
-	.io_u_bit(io_in[3]),
-	.io_v_bit(io_in[4]),
-	.io_z_bit(io_out[0]),
-	.io_done(io_out[1]));
-
-assign io_out[7:2] = 6'b0;
-
-endmodule
diff --git a/verilog/rtl/119_rglenn_hex_to_7_seg.v b/verilog/rtl/119_rglenn_hex_to_7_seg.v
deleted file mode 100644
index 671dc49..0000000
--- a/verilog/rtl/119_rglenn_hex_to_7_seg.v
+++ /dev/null
@@ -1,25 +0,0 @@
-`default_nettype none
-
-module rglenn_hex_to_7_seg (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-    wire latch = io_in[0];
-    wire blank = io_in[1];
-    wire [4:0] data = io_in[5:2];
-    wire [6:0] led_out;
-    assign io_out[6:0] = blank ? 7'b0000000 : led_out;
-    assign io_out[7] = io_in[6]; // decimal point
-
-    // external clock is 1000Hz, so need 10 bit counter
-    reg [3:0] data_reg;
-
-    always @(posedge latch) begin
-        data_reg <= data;
-    end
-
-    // instantiate segment display
-    hex2seg7 hex2seg7(.data(data_reg), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/120_rglenn_hex_to_7_seg.v b/verilog/rtl/120_rglenn_hex_to_7_seg.v
deleted file mode 100644
index 671dc49..0000000
--- a/verilog/rtl/120_rglenn_hex_to_7_seg.v
+++ /dev/null
@@ -1,25 +0,0 @@
-`default_nettype none
-
-module rglenn_hex_to_7_seg (
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-    
-    wire latch = io_in[0];
-    wire blank = io_in[1];
-    wire [4:0] data = io_in[5:2];
-    wire [6:0] led_out;
-    assign io_out[6:0] = blank ? 7'b0000000 : led_out;
-    assign io_out[7] = io_in[6]; // decimal point
-
-    // external clock is 1000Hz, so need 10 bit counter
-    reg [3:0] data_reg;
-
-    always @(posedge latch) begin
-        data_reg <= data;
-    end
-
-    // instantiate segment display
-    hex2seg7 hex2seg7(.data(data_reg), .segments(led_out));
-
-endmodule
diff --git a/verilog/rtl/120_zymason.sv b/verilog/rtl/120_zymason.sv
deleted file mode 100644
index 38cdafe..0000000
--- a/verilog/rtl/120_zymason.sv
+++ /dev/null
@@ -1,188 +0,0 @@
-`default_nettype none
-
-// Top-level design module, acting only as a wrapper
-module zymason_tinytop (
-  input  logic [7:0] io_in,
-  output logic [7:0] io_out);
-
-  Zymason_Tiny1 p0 (.clock(io_in[0]), .reset(io_in[1]), .RW(io_in[2]),
-                    .sel(io_in[3]), .pin_in(io_in[7:4]), .io_out);
-
-endmodule : zymason_tinytop
-
-
-
-// Primary design module
-module Zymason_Tiny1 (
-  input  logic       clock, reset,
-  input  logic       RW, sel,
-  input  logic [3:0] pin_in,
-  output tri   [7:0] io_out);
-  localparam NUM_DIGITS = 12;   // The number of total digits that can be stored
-
-  logic [6:0] dig_out[NUM_DIGITS-1:0];    // Unpacked digit output array
-  logic [NUM_DIGITS-1:0] dig_en;          // Enable line for each digit
-  logic pos_en, pulse;
-
-
-  // Shift register for selecting current display digit in both modes
-  // Control FSM
-  // Clocking module to generate slow pulses for display cycling in R-mode
-  Zymason_ShiftReg #(NUM_DIGITS) s0 (.clock, .reset, .en(pos_en), .out(dig_en));
-  Zymason_FSM f0 (.clock, .reset, .RW, .sel, .pulse, .pos_en);
-  Zymason_PulseGen p0 (.clock, .reset, .spd({pin_in, sel}), .pulse);
-
-  genvar i;
-  generate
-    for (i=0; i<NUM_DIGITS; i=i+1) begin: STR
-      Zymason_DigStore ds (.clock, .reset, .en(dig_en[i]), .sel, .RW, .pin_in,
-                          .dig_out(dig_out[i]));
-      Zymason_Drive dr (.en(dig_en[i]), .val(dig_out[i]), .out(io_out[6:0]));
-    end
-  endgenerate
-
-  // Mode indicator
-  assign io_out[7] = RW;
-
-endmodule : Zymason_Tiny1
-
-
-
-
-module Zymason_Drive (
-  input  logic       en,
-  input  logic [6:0] val,
-  output tri   [6:0] out);
-
-  assign out = en ? val : 7'bz;
-
-endmodule : Zymason_Drive
-
-
-
-// Control state machine for Zymason_Tiny1
-module Zymason_FSM (
-  input  logic clock, reset,
-  input  logic RW, sel, pulse,
-  output logic pos_en);
-
-  // assign st_out = state;
-
-  enum logic [1:0] {INIT, SCAN, WRT0, WRT1} state, nextState;
-
-  // Explicit-style FSM
-  always_ff @(posedge clock, posedge reset) begin
-    if (reset)
-      state <= INIT;
-    else
-      state <= nextState;
-  end
-
-  // Next-state logic
-  always_comb begin
-    case (state)
-      INIT: nextState = RW ? WRT0 : SCAN;
-      SCAN: nextState = RW ? WRT0 : SCAN;
-      WRT0: nextState = sel ? WRT1 : WRT0;
-      WRT1: nextState = RW ? (sel ? WRT1 : WRT0) : SCAN;
-      default: nextState = INIT;
-    endcase
-  end
-
-  // Output logic
-  always_comb begin
-    case (state)
-      INIT: pos_en = 1'b0;
-      SCAN: pos_en = ~RW & pulse;
-      WRT0: pos_en = 1'b0;
-      WRT1: pos_en = RW & ~sel;
-      default: pos_en = 1'b0;
-    endcase
-  end
-
-endmodule : Zymason_FSM
-
-
-
-// Single digit storage instance
-module Zymason_DigStore (
-  input  logic       clock, reset,
-  input  logic       en, sel, RW,
-  input  logic [3:0] pin_in,
-  output logic [6:0] dig_out);
-
-  // 2 implicit registers with a synchronous reset
-  always_ff @(posedge clock, posedge reset) begin
-    if (reset)
-      dig_out <= 7'd0;
-    else begin
-      if (en & ~sel & RW)
-        dig_out[3:0] <= pin_in;
-      else if (en & sel & RW)
-        dig_out[6:4] <= pin_in[2:0];
-    end
-  end
-
-endmodule : Zymason_DigStore
-
-
-
-// Read-only left-shift register that resets to ...0001
-module Zymason_ShiftReg
-  #(parameter DW = 2)
-  (input logic clock, reset,
-  input  logic en,
-  output logic [DW-1:0] out);
-
-  logic [DW:0] long_out;
-  logic tmp;
-
-  assign out = long_out[DW-1:0];
-  assign tmp = long_out[DW-1];
-
-  always_ff @(posedge clock, posedge reset) begin
-    if (reset) begin
-      long_out <= 1;
-    end
-    else if (en) begin
-      long_out <= {long_out, tmp};
-    end
-  end
-
-endmodule : Zymason_ShiftReg
-
-
-
-// Internal clocking pulse, expecting 6.25kHz clock as input
-module Zymason_PulseGen (
-  input  logic       clock, reset,
-  input  logic [4:0] spd,
-  output logic       pulse);
-
-  logic [8:0] count;
-  logic [4:0] lowCount;
-
-  logic en_low;
-  logic temp_pulse;
-
-  // Invariant counter to produce pulses at 12.1Hz
-  always_ff @(posedge clock) begin
-    if (reset)
-      count <= 9'd0;
-    else
-      count <= count + 9'd1;
-  end
-
-  // Variable counter to find spd
-  always_ff @(posedge clock) begin
-    if (reset | pulse)
-      lowCount <= 5'd0;
-    else if (en_low & spd[0])
-      lowCount <= lowCount + 5'd1;
-  end
-
-  // pulse is asserted for a single cycle since its counter immediately resets
-  assign pulse = ((lowCount[4:1] == spd[4:1]) & spd[0]) ? en_low : 1'b0;
-  assign en_low = (count == 9'd0) ? 1'b1 : 1'b0;
-
-endmodule : Zymason_PulseGen
\ No newline at end of file
diff --git a/verilog/rtl/121_zymason.sv b/verilog/rtl/121_zymason.sv
deleted file mode 100644
index 38cdafe..0000000
--- a/verilog/rtl/121_zymason.sv
+++ /dev/null
@@ -1,188 +0,0 @@
-`default_nettype none
-
-// Top-level design module, acting only as a wrapper
-module zymason_tinytop (
-  input  logic [7:0] io_in,
-  output logic [7:0] io_out);
-
-  Zymason_Tiny1 p0 (.clock(io_in[0]), .reset(io_in[1]), .RW(io_in[2]),
-                    .sel(io_in[3]), .pin_in(io_in[7:4]), .io_out);
-
-endmodule : zymason_tinytop
-
-
-
-// Primary design module
-module Zymason_Tiny1 (
-  input  logic       clock, reset,
-  input  logic       RW, sel,
-  input  logic [3:0] pin_in,
-  output tri   [7:0] io_out);
-  localparam NUM_DIGITS = 12;   // The number of total digits that can be stored
-
-  logic [6:0] dig_out[NUM_DIGITS-1:0];    // Unpacked digit output array
-  logic [NUM_DIGITS-1:0] dig_en;          // Enable line for each digit
-  logic pos_en, pulse;
-
-
-  // Shift register for selecting current display digit in both modes
-  // Control FSM
-  // Clocking module to generate slow pulses for display cycling in R-mode
-  Zymason_ShiftReg #(NUM_DIGITS) s0 (.clock, .reset, .en(pos_en), .out(dig_en));
-  Zymason_FSM f0 (.clock, .reset, .RW, .sel, .pulse, .pos_en);
-  Zymason_PulseGen p0 (.clock, .reset, .spd({pin_in, sel}), .pulse);
-
-  genvar i;
-  generate
-    for (i=0; i<NUM_DIGITS; i=i+1) begin: STR
-      Zymason_DigStore ds (.clock, .reset, .en(dig_en[i]), .sel, .RW, .pin_in,
-                          .dig_out(dig_out[i]));
-      Zymason_Drive dr (.en(dig_en[i]), .val(dig_out[i]), .out(io_out[6:0]));
-    end
-  endgenerate
-
-  // Mode indicator
-  assign io_out[7] = RW;
-
-endmodule : Zymason_Tiny1
-
-
-
-
-module Zymason_Drive (
-  input  logic       en,
-  input  logic [6:0] val,
-  output tri   [6:0] out);
-
-  assign out = en ? val : 7'bz;
-
-endmodule : Zymason_Drive
-
-
-
-// Control state machine for Zymason_Tiny1
-module Zymason_FSM (
-  input  logic clock, reset,
-  input  logic RW, sel, pulse,
-  output logic pos_en);
-
-  // assign st_out = state;
-
-  enum logic [1:0] {INIT, SCAN, WRT0, WRT1} state, nextState;
-
-  // Explicit-style FSM
-  always_ff @(posedge clock, posedge reset) begin
-    if (reset)
-      state <= INIT;
-    else
-      state <= nextState;
-  end
-
-  // Next-state logic
-  always_comb begin
-    case (state)
-      INIT: nextState = RW ? WRT0 : SCAN;
-      SCAN: nextState = RW ? WRT0 : SCAN;
-      WRT0: nextState = sel ? WRT1 : WRT0;
-      WRT1: nextState = RW ? (sel ? WRT1 : WRT0) : SCAN;
-      default: nextState = INIT;
-    endcase
-  end
-
-  // Output logic
-  always_comb begin
-    case (state)
-      INIT: pos_en = 1'b0;
-      SCAN: pos_en = ~RW & pulse;
-      WRT0: pos_en = 1'b0;
-      WRT1: pos_en = RW & ~sel;
-      default: pos_en = 1'b0;
-    endcase
-  end
-
-endmodule : Zymason_FSM
-
-
-
-// Single digit storage instance
-module Zymason_DigStore (
-  input  logic       clock, reset,
-  input  logic       en, sel, RW,
-  input  logic [3:0] pin_in,
-  output logic [6:0] dig_out);
-
-  // 2 implicit registers with a synchronous reset
-  always_ff @(posedge clock, posedge reset) begin
-    if (reset)
-      dig_out <= 7'd0;
-    else begin
-      if (en & ~sel & RW)
-        dig_out[3:0] <= pin_in;
-      else if (en & sel & RW)
-        dig_out[6:4] <= pin_in[2:0];
-    end
-  end
-
-endmodule : Zymason_DigStore
-
-
-
-// Read-only left-shift register that resets to ...0001
-module Zymason_ShiftReg
-  #(parameter DW = 2)
-  (input logic clock, reset,
-  input  logic en,
-  output logic [DW-1:0] out);
-
-  logic [DW:0] long_out;
-  logic tmp;
-
-  assign out = long_out[DW-1:0];
-  assign tmp = long_out[DW-1];
-
-  always_ff @(posedge clock, posedge reset) begin
-    if (reset) begin
-      long_out <= 1;
-    end
-    else if (en) begin
-      long_out <= {long_out, tmp};
-    end
-  end
-
-endmodule : Zymason_ShiftReg
-
-
-
-// Internal clocking pulse, expecting 6.25kHz clock as input
-module Zymason_PulseGen (
-  input  logic       clock, reset,
-  input  logic [4:0] spd,
-  output logic       pulse);
-
-  logic [8:0] count;
-  logic [4:0] lowCount;
-
-  logic en_low;
-  logic temp_pulse;
-
-  // Invariant counter to produce pulses at 12.1Hz
-  always_ff @(posedge clock) begin
-    if (reset)
-      count <= 9'd0;
-    else
-      count <= count + 9'd1;
-  end
-
-  // Variable counter to find spd
-  always_ff @(posedge clock) begin
-    if (reset | pulse)
-      lowCount <= 5'd0;
-    else if (en_low & spd[0])
-      lowCount <= lowCount + 5'd1;
-  end
-
-  // pulse is asserted for a single cycle since its counter immediately resets
-  assign pulse = ((lowCount[4:1] == spd[4:1]) & spd[0]) ? en_low : 1'b0;
-  assign en_low = (count == 9'd0) ? 1'b1 : 1'b0;
-
-endmodule : Zymason_PulseGen
\ No newline at end of file
diff --git a/verilog/rtl/122_klei22_ra.v b/verilog/rtl/122_klei22_ra.v
deleted file mode 100644
index 914da63..0000000
--- a/verilog/rtl/122_klei22_ra.v
+++ /dev/null
@@ -1,54 +0,0 @@
-`default_nettype none
-
-module klei22_ra #(
-    parameter RA_SIZE = 8,
-    parameter BITS_PER_ELEM = 5
-) (
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-  wire clk = io_in[0];
-  wire rst = io_in[1];
-  wire i_data_clk = io_in[2];
-  wire start_calc;
-  wire [4:0] i_value = io_in[7:3];
-
-  wire [BITS_PER_ELEM - 1:0] ra_out;
-  assign io_out[BITS_PER_ELEM-1:0] = {3'b000, ra_out[4:0]};
-
-
-  parameter SRL_SIZE = RA_SIZE + 1;  // RA_SIZE valid inputs and one stale input
-  parameter TOTAL_SRL_BITS = 5 * SRL_SIZE;
-  wire [TOTAL_SRL_BITS - 1:0] taps;
-
-  shift_register_line #(
-      .TOTAL_TAPS(SRL_SIZE),
-      .BITS_PER_ELEM(BITS_PER_ELEM),
-      .TOTAL_BITS(TOTAL_SRL_BITS)
-  ) srl_1 (
-      .clk(clk),
-      .rst(rst),
-      .i_value(i_value[4:0]),
-      .i_data_clk(i_data_clk),
-      .o_start_calc(start_calc),
-      .o_taps(taps[TOTAL_SRL_BITS-1:0])
-  );
-
-  // rolling sums RA_SIZE elements + 1 stale element
-  parameter RA_NUM_ELEM = RA_SIZE;
-  parameter MAX_BITS = 8;  // log_2(31 * 8) = 7.9 ~ 8; where 31 is largest valut for 5 bit elem
-  rolling_average #(
-      .BITS_PER_ELEM(BITS_PER_ELEM),
-      .MAX_BITS(8)
-  ) ra_1 (
-      .clk(clk),
-      .rst(rst),
-      .i_new(taps[4:0]),
-      .i_old(taps[(4 + 5 * 9):(0 + 5 * 8)]),
-      .i_start_calc(start_calc),
-      .o_ra(ra_out[BITS_PER_ELEM-1:0])
-  );
-
-
-endmodule
diff --git a/verilog/rtl/123_klei22_ra.v b/verilog/rtl/123_klei22_ra.v
deleted file mode 100644
index 914da63..0000000
--- a/verilog/rtl/123_klei22_ra.v
+++ /dev/null
@@ -1,54 +0,0 @@
-`default_nettype none
-
-module klei22_ra #(
-    parameter RA_SIZE = 8,
-    parameter BITS_PER_ELEM = 5
-) (
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-  wire clk = io_in[0];
-  wire rst = io_in[1];
-  wire i_data_clk = io_in[2];
-  wire start_calc;
-  wire [4:0] i_value = io_in[7:3];
-
-  wire [BITS_PER_ELEM - 1:0] ra_out;
-  assign io_out[BITS_PER_ELEM-1:0] = {3'b000, ra_out[4:0]};
-
-
-  parameter SRL_SIZE = RA_SIZE + 1;  // RA_SIZE valid inputs and one stale input
-  parameter TOTAL_SRL_BITS = 5 * SRL_SIZE;
-  wire [TOTAL_SRL_BITS - 1:0] taps;
-
-  shift_register_line #(
-      .TOTAL_TAPS(SRL_SIZE),
-      .BITS_PER_ELEM(BITS_PER_ELEM),
-      .TOTAL_BITS(TOTAL_SRL_BITS)
-  ) srl_1 (
-      .clk(clk),
-      .rst(rst),
-      .i_value(i_value[4:0]),
-      .i_data_clk(i_data_clk),
-      .o_start_calc(start_calc),
-      .o_taps(taps[TOTAL_SRL_BITS-1:0])
-  );
-
-  // rolling sums RA_SIZE elements + 1 stale element
-  parameter RA_NUM_ELEM = RA_SIZE;
-  parameter MAX_BITS = 8;  // log_2(31 * 8) = 7.9 ~ 8; where 31 is largest valut for 5 bit elem
-  rolling_average #(
-      .BITS_PER_ELEM(BITS_PER_ELEM),
-      .MAX_BITS(8)
-  ) ra_1 (
-      .clk(clk),
-      .rst(rst),
-      .i_new(taps[4:0]),
-      .i_old(taps[(4 + 5 * 9):(0 + 5 * 8)]),
-      .i_start_calc(start_calc),
-      .o_ra(ra_out[BITS_PER_ELEM-1:0])
-  );
-
-
-endmodule
diff --git a/verilog/rtl/123_w5s8.v b/verilog/rtl/123_w5s8.v
deleted file mode 100644
index 2378dd1..0000000
--- a/verilog/rtl/123_w5s8.v
+++ /dev/null
@@ -1,279 +0,0 @@
-`default_nettype none
-module afoote_w5s8_tt02_utm_core(
-    input clock,
-    input reset,
-    input mode,
-    input [2:0] encoded_state_in,
-    input [2:0] sym_in,
-    input sym_in_valid,
-    output [2:0] new_sym,
-    output direction,
-    output [2:0] encoded_next_state
-);
-
-reg [7:0] stored_state;
-reg [2:0] symbuf;
-reg symbuf_valid;
-
-wire [7:0] state_in;
-wire [7:0] state;
-wire [7:0] next_state;
-wire [2:0] sym;
-
-always @(posedge clock) begin
-    if (reset) begin
-        stored_state <= 8'h01;
-    end
-    else if (sym_in_valid && symbuf_valid) begin
-        stored_state <= next_state;
-    end
-    else begin
-        stored_state <= stored_state;
-    end
-end
-
-always @(posedge clock) begin
-    if (reset) begin
-        symbuf <= 3'b0;
-    end
-    else if (sym_in_valid) begin
-        symbuf <= sym_in;
-    end
-    else begin
-        symbuf <= symbuf;
-    end
-end
-
-always @(posedge clock) begin
-    if (reset) begin
-        symbuf_valid <= 0;
-    end
-    else if (sym_in_valid) begin
-        symbuf_valid <= 1;
-    end
-    else begin
-        symbuf_valid <= symbuf_valid;
-    end
-end
-
-afoote_w5s8_tt02_decoder_3to8 decode_state_in(
-    .in(encoded_state_in),
-    .out(state_in)
-);
-
-assign state = (mode == 0) ? state_in : stored_state;
-assign sym = (mode == 0) ? sym_in : symbuf;
-
-afoote_w5s8_tt02_direction direction_block(
-    .state(state),
-    .s2(sym[2]),
-    .s1(sym[1]),
-    .s0(sym[0]),
-    .direction(direction)
-);
-
-afoote_w5s8_tt02_next_state next_state_block(
-    .state_in(state),
-    .s2(sym[2]),
-    .s1(sym[1]),
-    .s0(sym[0]),
-    .state_out(next_state));
-
-afoote_w5s8_tt02_new_symbol new_sym_block(
-    .state_in(state),
-    .s2(sym[2]),
-    .s1(sym[1]),
-    .s0(sym[0]),
-    .z2(new_sym[2]),
-    .z1(new_sym[1]),
-    .z0(new_sym[0])
-);
-
-afoote_w5s8_tt02_encoder_8to3 encode_state_out(
-    .in(next_state),
-    .out(encoded_next_state)
-);
-
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_direction(
-    input [7:0] state,
-    input s2,
-    input s1,
-    input s0,
-    // 0 = left, 1 = right
-    output direction
-);
-
-wire a,b,c,d,e,f,g,h;
-
-assign a = state[0];
-assign b = state[1];
-assign c = state[2];
-assign d = state[3];
-assign e = state[4];
-assign f = state[5];
-assign g = state[6];
-assign h = state[7];
-
-assign direction = ((a | e | f) & s1)
-                 | (((a & s0) | b | c | (e & s0) | f | g | h) & s2)
-                 | ((d | (e & (~s1) & (~s0))) & (~s2))
-                 | (g & (~s1));
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_next_state(
-    input [7:0] state_in,
-    input s2,
-    input s1,
-    input s0,
-    output [7:0] state_out
-);
-
-wire a,b,c,d,e,f,g,h;
-
-assign a = state_in[0];
-assign b = state_in[1];
-assign c = state_in[2];
-assign d = state_in[3];
-assign e = state_in[4];
-assign f = state_in[5];
-assign g = state_in[6];
-assign h = state_in[7];
-
-wire sym_0;
-assign sym_0 = (~s2) & (~s1) & (~s0);
-
-// next H
-assign state_out[7] = s2 & ((s0 & (b | c)) | h);
-
-// next G
-assign state_out[6] = (s2 & ( ((b | c) & (~s0)) | g)) | (f & s1);
-
-// next F
-assign state_out[5] = (e & (~s2) & s0) | (f & (~(s2 | s1))) | (s1 & (g | h));
-
-// next E
-assign state_out[4] = (a & s2 & (~s0)) | (d & (~s2) & s0) | (e & (s1 | (s2 & s0)));
-
-// next D
-assign state_out[3] = (b & s1) | (d & s2) | (e & (~s1) & (~s0));
-
-// next C
-assign state_out[2] = (a & (~s2) & s0) | (c & (~(s2 | s1))) | (d & sym_0);
-
-// next B
-assign state_out[1] = (a & sym_0) | (b & (~(s2 | s1))) | (c & s1) | (f & s2);
-
-// next A
-assign state_out[0] = (a & (s1 | (s2 & s0))) | (d & s1) | ((g | h) & (~(s2 | s1)));
-
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_new_symbol(
-    input [7:0] state_in,
-    input s2,
-    input s1,
-    input s0,
-    output z2,
-    output z1,
-    output z0
-);
-
-wire a,b,c,d,e,f,g,h;
-
-assign a = state_in[0];
-assign b = state_in[1];
-assign c = state_in[2];
-assign d = state_in[3];
-assign e = state_in[4];
-assign f = state_in[5];
-assign g = state_in[6];
-assign h = state_in[7];
-
-assign z2 = ((~s2) & b) | (d & s0) | c | (e & (s0 | s1)) | (f & (~(s2 | s1)));
-assign z1 = (a & (~s2)) | (d & (s2 | s1) & (~s0)) | (e & s2 & (~s0));
-assign z0 = (s0 & ((a & s2) | (~a))) | (h & s1);
-
-endmodule
-
-module afoote_w5s8_tt02_decoder_3to8(
-    input [2:0] in,
-    output [7:0] out
-);
-
-assign out[0] = (~in[2]) & (~in[1]) & (~in[0]);
-assign out[1] = (~in[2]) & (~in[1]) & ( in[0]);
-assign out[2] = (~in[2]) & ( in[1]) & (~in[0]);
-assign out[3] = (~in[2]) & ( in[1]) & ( in[0]);
-assign out[4] = ( in[2]) & (~in[1]) & (~in[0]);
-assign out[5] = ( in[2]) & (~in[1]) & ( in[0]);
-assign out[6] = ( in[2]) & ( in[1]) & (~in[0]);
-assign out[7] = ( in[2]) & ( in[1]) & ( in[0]);
-
-endmodule
-
-module afoote_w5s8_tt02_encoder_8to3(
-    input [7:0] in,
-    output [2:0] out
-);
-
-assign out[0] = in[1] | in[3] | in[5] | in[7];
-assign out[1] = in[2] | in[3] | in[6] | in[7];
-assign out[2] = in[4] | in[5] | in[6] | in[7];
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_top(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-wire mode;
-wire clock;
-wire reset;
-
-wire direction;
-
-wire sym_valid;
-wire [2:0] sym_in;
-wire [2:0] new_sym;
-
-// 1-hot state in & out
-wire [7:0] state_in;
-wire [7:0] state_out;
-
-// 3-bit dense encoding of state in & out
-wire [2:0] encoded_state_in;
-wire [2:0] encoded_state_out;
-
-assign mode = io_in[7];
-assign clock = io_in[0];
-assign reset = (mode == 0) ? 1'b1 : io_in[1];
-
-assign encoded_state_in = (mode == 0) ? io_in[3:1] : 3'b0;
-assign io_out[7:5] = encoded_state_out;
-
-assign sym_valid = (mode == 0) ? 1'b0 : io_in[2];
-assign sym_in = io_in[6:4];
-assign io_out[4:2] = new_sym;
-
-assign io_out[1] = direction;
-assign io_out[0] = 1'b0;
-
-afoote_w5s8_tt02_utm_core core(
-    .clock(clock),
-    .reset(reset),
-    .mode(mode),
-    .encoded_state_in(encoded_state_in),
-    .sym_in(sym_in),
-    .sym_in_valid(sym_valid),
-    .new_sym(new_sym),
-    .direction(direction),
-    .encoded_next_state(encoded_state_out)
-);
-
-endmodule
diff --git a/verilog/rtl/124_w5s8.v b/verilog/rtl/124_w5s8.v
deleted file mode 100644
index 2378dd1..0000000
--- a/verilog/rtl/124_w5s8.v
+++ /dev/null
@@ -1,279 +0,0 @@
-`default_nettype none
-module afoote_w5s8_tt02_utm_core(
-    input clock,
-    input reset,
-    input mode,
-    input [2:0] encoded_state_in,
-    input [2:0] sym_in,
-    input sym_in_valid,
-    output [2:0] new_sym,
-    output direction,
-    output [2:0] encoded_next_state
-);
-
-reg [7:0] stored_state;
-reg [2:0] symbuf;
-reg symbuf_valid;
-
-wire [7:0] state_in;
-wire [7:0] state;
-wire [7:0] next_state;
-wire [2:0] sym;
-
-always @(posedge clock) begin
-    if (reset) begin
-        stored_state <= 8'h01;
-    end
-    else if (sym_in_valid && symbuf_valid) begin
-        stored_state <= next_state;
-    end
-    else begin
-        stored_state <= stored_state;
-    end
-end
-
-always @(posedge clock) begin
-    if (reset) begin
-        symbuf <= 3'b0;
-    end
-    else if (sym_in_valid) begin
-        symbuf <= sym_in;
-    end
-    else begin
-        symbuf <= symbuf;
-    end
-end
-
-always @(posedge clock) begin
-    if (reset) begin
-        symbuf_valid <= 0;
-    end
-    else if (sym_in_valid) begin
-        symbuf_valid <= 1;
-    end
-    else begin
-        symbuf_valid <= symbuf_valid;
-    end
-end
-
-afoote_w5s8_tt02_decoder_3to8 decode_state_in(
-    .in(encoded_state_in),
-    .out(state_in)
-);
-
-assign state = (mode == 0) ? state_in : stored_state;
-assign sym = (mode == 0) ? sym_in : symbuf;
-
-afoote_w5s8_tt02_direction direction_block(
-    .state(state),
-    .s2(sym[2]),
-    .s1(sym[1]),
-    .s0(sym[0]),
-    .direction(direction)
-);
-
-afoote_w5s8_tt02_next_state next_state_block(
-    .state_in(state),
-    .s2(sym[2]),
-    .s1(sym[1]),
-    .s0(sym[0]),
-    .state_out(next_state));
-
-afoote_w5s8_tt02_new_symbol new_sym_block(
-    .state_in(state),
-    .s2(sym[2]),
-    .s1(sym[1]),
-    .s0(sym[0]),
-    .z2(new_sym[2]),
-    .z1(new_sym[1]),
-    .z0(new_sym[0])
-);
-
-afoote_w5s8_tt02_encoder_8to3 encode_state_out(
-    .in(next_state),
-    .out(encoded_next_state)
-);
-
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_direction(
-    input [7:0] state,
-    input s2,
-    input s1,
-    input s0,
-    // 0 = left, 1 = right
-    output direction
-);
-
-wire a,b,c,d,e,f,g,h;
-
-assign a = state[0];
-assign b = state[1];
-assign c = state[2];
-assign d = state[3];
-assign e = state[4];
-assign f = state[5];
-assign g = state[6];
-assign h = state[7];
-
-assign direction = ((a | e | f) & s1)
-                 | (((a & s0) | b | c | (e & s0) | f | g | h) & s2)
-                 | ((d | (e & (~s1) & (~s0))) & (~s2))
-                 | (g & (~s1));
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_next_state(
-    input [7:0] state_in,
-    input s2,
-    input s1,
-    input s0,
-    output [7:0] state_out
-);
-
-wire a,b,c,d,e,f,g,h;
-
-assign a = state_in[0];
-assign b = state_in[1];
-assign c = state_in[2];
-assign d = state_in[3];
-assign e = state_in[4];
-assign f = state_in[5];
-assign g = state_in[6];
-assign h = state_in[7];
-
-wire sym_0;
-assign sym_0 = (~s2) & (~s1) & (~s0);
-
-// next H
-assign state_out[7] = s2 & ((s0 & (b | c)) | h);
-
-// next G
-assign state_out[6] = (s2 & ( ((b | c) & (~s0)) | g)) | (f & s1);
-
-// next F
-assign state_out[5] = (e & (~s2) & s0) | (f & (~(s2 | s1))) | (s1 & (g | h));
-
-// next E
-assign state_out[4] = (a & s2 & (~s0)) | (d & (~s2) & s0) | (e & (s1 | (s2 & s0)));
-
-// next D
-assign state_out[3] = (b & s1) | (d & s2) | (e & (~s1) & (~s0));
-
-// next C
-assign state_out[2] = (a & (~s2) & s0) | (c & (~(s2 | s1))) | (d & sym_0);
-
-// next B
-assign state_out[1] = (a & sym_0) | (b & (~(s2 | s1))) | (c & s1) | (f & s2);
-
-// next A
-assign state_out[0] = (a & (s1 | (s2 & s0))) | (d & s1) | ((g | h) & (~(s2 | s1)));
-
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_new_symbol(
-    input [7:0] state_in,
-    input s2,
-    input s1,
-    input s0,
-    output z2,
-    output z1,
-    output z0
-);
-
-wire a,b,c,d,e,f,g,h;
-
-assign a = state_in[0];
-assign b = state_in[1];
-assign c = state_in[2];
-assign d = state_in[3];
-assign e = state_in[4];
-assign f = state_in[5];
-assign g = state_in[6];
-assign h = state_in[7];
-
-assign z2 = ((~s2) & b) | (d & s0) | c | (e & (s0 | s1)) | (f & (~(s2 | s1)));
-assign z1 = (a & (~s2)) | (d & (s2 | s1) & (~s0)) | (e & s2 & (~s0));
-assign z0 = (s0 & ((a & s2) | (~a))) | (h & s1);
-
-endmodule
-
-module afoote_w5s8_tt02_decoder_3to8(
-    input [2:0] in,
-    output [7:0] out
-);
-
-assign out[0] = (~in[2]) & (~in[1]) & (~in[0]);
-assign out[1] = (~in[2]) & (~in[1]) & ( in[0]);
-assign out[2] = (~in[2]) & ( in[1]) & (~in[0]);
-assign out[3] = (~in[2]) & ( in[1]) & ( in[0]);
-assign out[4] = ( in[2]) & (~in[1]) & (~in[0]);
-assign out[5] = ( in[2]) & (~in[1]) & ( in[0]);
-assign out[6] = ( in[2]) & ( in[1]) & (~in[0]);
-assign out[7] = ( in[2]) & ( in[1]) & ( in[0]);
-
-endmodule
-
-module afoote_w5s8_tt02_encoder_8to3(
-    input [7:0] in,
-    output [2:0] out
-);
-
-assign out[0] = in[1] | in[3] | in[5] | in[7];
-assign out[1] = in[2] | in[3] | in[6] | in[7];
-assign out[2] = in[4] | in[5] | in[6] | in[7];
-endmodule
-
-`default_nettype none
-module afoote_w5s8_tt02_top(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-wire mode;
-wire clock;
-wire reset;
-
-wire direction;
-
-wire sym_valid;
-wire [2:0] sym_in;
-wire [2:0] new_sym;
-
-// 1-hot state in & out
-wire [7:0] state_in;
-wire [7:0] state_out;
-
-// 3-bit dense encoding of state in & out
-wire [2:0] encoded_state_in;
-wire [2:0] encoded_state_out;
-
-assign mode = io_in[7];
-assign clock = io_in[0];
-assign reset = (mode == 0) ? 1'b1 : io_in[1];
-
-assign encoded_state_in = (mode == 0) ? io_in[3:1] : 3'b0;
-assign io_out[7:5] = encoded_state_out;
-
-assign sym_valid = (mode == 0) ? 1'b0 : io_in[2];
-assign sym_in = io_in[6:4];
-assign io_out[4:2] = new_sym;
-
-assign io_out[1] = direction;
-assign io_out[0] = 1'b0;
-
-afoote_w5s8_tt02_utm_core core(
-    .clock(clock),
-    .reset(reset),
-    .mode(mode),
-    .encoded_state_in(encoded_state_in),
-    .sym_in(sym_in),
-    .sym_in_valid(sym_valid),
-    .new_sym(new_sym),
-    .direction(direction),
-    .encoded_next_state(encoded_state_out)
-);
-
-endmodule
diff --git a/verilog/rtl/126_top.v b/verilog/rtl/126_top.v
deleted file mode 100644
index 5363bb6..0000000
--- a/verilog/rtl/126_top.v
+++ /dev/null
@@ -1,19 +0,0 @@
-`default_nettype none
-
-// Keep I/O fixed for TinyTapeout
-module gregdavill_clock_top(
-  input [7:0] io_in, 
-  output [7:0] io_out
-);
-
-clock clock_top (
-    .i_clk(io_in[0]),
-    .i_rst(io_in[1]),
-    .i_min_up(io_in[2]),
-    .i_hour_up(io_in[3]),
-    .o_clk(io_out[0]),
-    .o_latch(io_out[1]),
-    .o_bit(io_out[2])
-);
-
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/130_user_module_skylersaleh.v b/verilog/rtl/130_user_module_skylersaleh.v
deleted file mode 100644
index 7345818..0000000
--- a/verilog/rtl/130_user_module_skylersaleh.v
+++ /dev/null
@@ -1,74 +0,0 @@
-`default_nettype none
-
-//  Top level io for this module should stay the same to fit into the scan_wrapper.
-//  The pin connections within the user_module are up to you,
-//  although (if one is present) it is recommended to place a clock on io_in[0].
-//  This allows use of the internal clock divider if you wish.
-module user_module_skylersaleh(
-  input [7:0] io_in, 
-  output [7:0] io_out
-);
-
-  hello_skylersaleh hello_core(
-    .clk(io_in[0]),
-    .dip_switch(io_in[7:1]),
-    .segments(io_out[6:0]),
-    .decimal(io_out[7])
-  );
-
-endmodule
-
-//  Any submodules should be included in this file,
-//  so they are copied into the main TinyTapeout repo.
-//  Appending your ID to any submodules you create 
-//  ensures there are no clashes in full-chip simulation.
-module hello_skylersaleh(
-  input clk,
-  input [6:0] dip_switch,
-  output [6:0] segments,
-  output decimal
-);
-
-wire slow_clock;
-reg [15:0] clock_div;
-reg [2:0] state; 
-wire flash;
-wire [2:0]selected_state;
-reg [6:0] hello_seg_output;
-reg [6:0] rpog_seg_output;
-
-always@(posedge clk)clock_div+=1;
-assign slow_clock = clock_div[dip_switch[3:0]];
-always@(posedge slow_clock)state+=1;
-assign selected_state = dip_switch[6]? state: dip_switch[2:0];
-assign flash = (dip_switch[6]? slow_clock : dip_switch[3])|dip_switch[4];
-assign decimal = !flash;
-
-initial begin
-  clock_div = 0; 
-  state = 0;
-end
-
-always@(selected_state)begin
-  case(selected_state)
-    0: hello_seg_output= 7'b1110100; //H
-    1: hello_seg_output= 7'b1111001; //E
-    2: hello_seg_output= 7'b0111000; //L
-    3: hello_seg_output= 7'b0111000; //L
-    4: hello_seg_output= 7'b0111111; //O 
-    default: hello_seg_output= 7'b0000000;  
-  endcase
-end
-
-always@(selected_state)begin
-  case(selected_state)
-    0: rpog_seg_output= 7'b1010000; //R
-    1: rpog_seg_output= 7'b1110011; //P
-    2: rpog_seg_output= 7'b0111111; //O
-    3: rpog_seg_output= 7'b1111101; //G 
-    default: rpog_seg_output= 7'b0000000;  
-  endcase
-end
-assign segments = flash?( dip_switch[5] ? rpog_seg_output : hello_seg_output): 7'b000000;
-
-endmodule
diff --git a/verilog/rtl/131_user_module_341628725785264722.v b/verilog/rtl/131_user_module_341628725785264722.v
deleted file mode 100644
index 89f1fdd..0000000
--- a/verilog/rtl/131_user_module_341628725785264722.v
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Automatically generated from https://wokwi.com/projects/341628725785264722 */
-
-`default_nettype none
-
-module div4_341628725785264722 ( clk ,rst, out_clk );
-    output out_clk;
-    input clk ;
-    input rst;
-
-    reg [1:0] data;
-    assign out_clk = data[1];
-
-    always @(posedge clk)
-    begin
-    if (rst)
-         data <= 2'b0;
-    else
-         data <= data+1;	
-    end
-endmodule
-
-module user_module_341628725785264722(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-wire clk, rst_n, shift_clk, shift_dta;
-wire [2:0] clk_source;
-
-assign clk = io_in[0];
-assign rst_n = io_in[1];
-assign shift_clk = io_in[2];
-assign shift_dta = io_in[3];
-assign clk_source[0] = io_in[4];
-assign clk_source[1] = io_in[5];
-assign clk_source[2] = io_in[6];
-
-
-/*Shift register chain, 16-bit*/
-reg [11:0] shifter;
-
-always @(posedge shift_clk)
-begin
-    shifter[11:1] <= shifter[10:0];
-    shifter[0]   <= shift_dta;
-end
-
-/*Clock sources*/
-//0
-wire c0_1 = clk;
-wire c0_output;
-div4_341628725785264722 tmp0(c0_1, rst_n, c0_output);
-
-//1
-wire c1_1, c1_2, c1_3, c1_output;
-assign c1_1 = c1_3 ^ shifter[0];
-assign c1_2 = c1_1 ^ shifter[1];
-assign c1_3 = c1_2 ^ shifter[2];
-div4_341628725785264722 tmp1(c1_3, rst_n, c1_output);
-
-//2
-wire c2_1, c2_2, c2_3, c2_4, c2_5, c2_output;
-assign c2_1 = c2_5 ^ shifter[0];
-assign c2_2 = c2_1 ^ shifter[1];
-assign c2_3 = c2_2 ^ shifter[2];
-assign c2_4 = c2_3 ^ shifter[3];
-assign c2_5 = c2_4 ^ shifter[4];
-div4_341628725785264722 tmp2(c2_5, rst_n, c2_output);
-
-//3
-wire c3_1, c3_output;
-assign c3_1 = c3_1 ^ shifter[0];
-div4_341628725785264722 tmp3(c3_1, rst_n, c3_output);
-
-//4 - requires shifter configuration to convert one stage to buffer 
-wire c4_1, c4_2, c4_output;
-assign c4_1 = c4_2 ^ shifter[0];
-assign c4_2 = c4_1 ^ shifter[1];
-div4_341628725785264722 tmp4(c4_2, rst_n, c4_output);
-
-//5 - NAND version
-wire c5_1, c5_2, c5_3, c5_4, c5_5, c5_output;
-assign c5_1 = ~(c5_5 & shifter[0]);
-assign c5_2 = ~(c5_1 & shifter[1]);
-assign c5_3 = ~(c5_2 & shifter[2]);
-assign c5_4 = ~(c5_3 & shifter[3]);
-assign c5_5 = ~(c5_4 & shifter[4]);
-div4_341628725785264722 tmp5(c5_5, rst_n, c5_output);
-
-//6 - NOR version
-wire c6_1, c6_2, c6_3, c6_4, c6_5, c6_output;
-assign c6_1 = ~(c6_5 | shifter[0]);
-assign c6_2 = ~(c6_1 | shifter[1]);
-assign c6_3 = ~(c6_2 | shifter[2]);
-assign c6_4 = ~(c6_3 | shifter[3]);
-assign c6_5 = ~(c6_4 | shifter[4]);
-div4_341628725785264722 tmp6(c6_5, rst_n, c6_output);
-
-//7 - + version
-wire c7_1, c7_2, c7_3, c7_4, c7_5, c7_output;
-assign c7_1 = (c7_5 + shifter[0] + shifter[1]);
-assign c7_2 = (c7_1 + shifter[2] + shifter[3]);
-assign c7_3 = (c7_2 + shifter[4] + shifter[5]);
-assign c7_4 = (c7_3 + shifter[6] + shifter[7]);
-assign c7_5 = (c7_4 + shifter[8] + shifter[9]);
-div4_341628725785264722 tmp7(c7_5, rst_n, c7_output);
-
-/*Clock selector*/
-reg selected_clock;
-always @ (*) begin
-    case (clk_source)
-        3'b000 : selected_clock = c0_output;  
-        3'b001 : selected_clock = c1_output;  
-        3'b010 : selected_clock = c2_output;  
-        3'b011 : selected_clock = c3_output;  
-        3'b100 : selected_clock = c4_output;
-        3'b101 : selected_clock = c5_output;
-        3'b110 : selected_clock = c6_output;
-        3'b111 : selected_clock = c7_output;
-    endcase
-end
-
-/*Random generator*/
-reg random_out;
-always @ (posedge clk) begin
-    case (clk_source)
-        3'b000 : random_out = c0_output ^ c1_output;  
-        3'b001 : random_out = c2_output ^ c3_output;  
-        3'b010 : random_out = c4_output ^ c5_output;  
-        3'b011 : random_out = c6_output ^ c7_output;  
-        3'b100 : random_out = c0_output ^ c1_output ^ c2_output ^ c3_output;
-        3'b101 : random_out = c4_output ^ c5_output ^ c6_output ^ c7_output;
-        3'b110 : random_out = c0_output ^ c1_output ^ c2_output ^ c3_output ^ c4_output ^ c5_output ^ c6_output ^ c7_output;
-        3'b111 : random_out = c1_output ^ c2_output;
-    endcase
-end
-  
-reg [29 : 0] data;
-assign io_out[0] = data[7];
-assign io_out[1] = data[11];
-assign io_out[2] = data[15];
-assign io_out[3] = data[19];
-assign io_out[4] = data[23];
-assign io_out[5] = data[27];
-assign io_out[6] = random_out;
-assign io_out[7] = shifter[11];
-//div4_341628725785264722 tmp1(clk, rst_n, io_out[6]);
-
-always @ (posedge selected_clock or posedge rst_n) begin
-  if (rst_n) begin
-    data <= 'b0;
-  end
-  else begin
-    data <= data + 1'b1;
-  end
-end
-
-endmodule
diff --git a/verilog/rtl/132_recepsaid_euclidean_algorithm.v b/verilog/rtl/132_recepsaid_euclidean_algorithm.v
deleted file mode 100644
index 0d2a2a9..0000000
--- a/verilog/rtl/132_recepsaid_euclidean_algorithm.v
+++ /dev/null
@@ -1,139 +0,0 @@
-module recepsaid_euclidean_algorithm(
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-
-wire        clk;
-wire        num_okey;
-wire        rst;
-wire [3:0]  number;
-reg  [3:0]  num1;
-reg  [3:0]  num2;
-reg  [6:0]  ssd_out;
-
-reg  [2:0]  state = S0;
-reg         start;
-wire [3:0]  gcd;
-wire [6:0]  decoder_out;
-
-assign num_okey    = io_in[7];
-assign rst         = io_in[6];
-assign number      = io_in[4:1];
-assign clk         = io_in[0];
-assign io_out[6:0] = ssd_out;
-
-localparam 	S0 = 3'd0,
-			S1 = 3'd1,
-			S2 = 3'd2,
-			S3 = 3'd3,
-			S4 = 3'd4;      
-
-always @(posedge clk)
-    begin
-        if(rst) begin
-            //ssd_out idle state
-            state    <= S0;
-            ssd_out  <= 7'b1000000; 
-        end
-        else begin            
-            case(state)          
-            S0:
-                begin
-                    //ssd_out idle state
-                    start   <= 1'b0;
-                    ssd_out <= 7'b1000000;
-                    
-                    if(num_okey) begin
-                        state <= S1;
-                    end
-                    else begin
-                        state <= S0;
-                    end                
-                end
-                
-            S1:
-                begin
-                    //ssd_out okey state
-                    num1    <= number;
-                    start   <= 1'b0;
-                    ssd_out <= 7'b1011100;
-                    
-                    if(~num_okey) begin    
-                        state <= S2;
-                    end
-                    else begin
-                        state <= S1;
-                    end
-                end
-                
-            S2:
-                begin
-                    //ssd_out next state
-                    start   <= 1'b0;
-                    ssd_out <= 7'b1010100;
-                    
-                    if(num_okey) begin
-                        state <= S3;
-                    end
-                    else begin
-                        state <= S2;
-                    end
-                end                
-                
-            S3:
-                begin
-                    //ssd_out okey state
-                    num2    <= number;
-                    start   <= 1'b0;
-                    ssd_out <= 7'b1011100;
-                    
-                    if(~num_okey) begin
-                        state <= S4;
-                    end
-                    else begin
-                        state <= S3;
-                    end
-                end
-          
-                
-            S4:
-                begin
-                    //ssd_out result state
-                    start    <= 1'b1;
-                    ssd_out  <= decoder_out;                        
-                    
-                    if(rst) begin
-                        state <= S0;
-                    end
-                    else begin
-                        state <= S4; 
-                    end              
-                end
-                                                           
-            default:
-                begin
-                    ssd_out      <= 7'b1000000;
-                    num1         <= 4'b0000;
-                    num2         <= 4'b0000;
-                    start        <= 1'b0;            
-                end            
-            endcase      
-        end  
-    end
-   
-gcd_top #(.DATA_BITS_TOP(4)) gcdtop(
-                                    .okey_i   (start),     
-                                    .rst_i    (rst),     
-                                    .clk_i    (clk),      
-                                    .x_i      (num1),
-                                    .y_i      (num2),    
-                                    .result_o (gcd)
-                                    );
-
-ssd_decoder decoder(
-                    .ssd_i  (gcd),
-                    .rst_i  (rst),
-                    .ssd_o  (decoder_out)
-                    );
-                                    
-endmodule
diff --git a/verilog/rtl/134_msaghir_top_level.v b/verilog/rtl/134_msaghir_top_level.v
deleted file mode 100644
index 74c15a2..0000000
--- a/verilog/rtl/134_msaghir_top_level.v
+++ /dev/null
@@ -1,25 +0,0 @@
-module msaghir_top_level (io_in, io_out);
-  input     [7:0] io_in;
-  output    [7:0] io_out;
-
-  wire      w_clk = io_in[0];
-  wire      w_rst = io_in[1];
-  wire      [1:0] w_sel = io_in[3:2];
-  wire      w_clk_2hz;
-  wire      [2:0] w_count;
-  wire      [6:0] w_segment;
-  wire      [6:0] w_bus0;
-  wire      [6:0] w_bus1;
-  wire      [6:0] w_bus2;
-  wire      [6:0] w_bus3;
-
-  assign io_out[6:0] = w_segment;
-
-  clk_div           u0 (.i_clk(w_clk), .i_rst(w_rst), .o_clk(w_clk_2hz));
-  mod8_counter      u1 (.i_clk(w_clk_2hz), .i_rst(w_rst), .o_count(w_count));
-  rand_pattern      u2 (.i_count(w_count), .o_segment(w_bus0));
-  cw8_pattern       u3 (.i_count(w_count), .o_segment(w_bus1));
-  scan_pattern      u4 (.i_count(w_count[1:0]), .o_segment(w_bus2));
-  warning_pattern   u5 (.i_count(w_count[0]), .o_segment(w_bus3));
-  mux4              u6 (.i_in0(w_bus0), .i_in1(w_bus1), .i_in2(w_bus2), .i_in3(w_bus3), .i_sel(w_sel), .o_out(w_segment));
-endmodule
\ No newline at end of file
diff --git a/verilog/rtl/136_top.v b/verilog/rtl/136_top.v
deleted file mode 100644
index b35805b..0000000
--- a/verilog/rtl/136_top.v
+++ /dev/null
@@ -1,319 +0,0 @@
-module option23ser (
-    input wire [7:0] io_in,
-    output reg [7:0] io_out
-);
-parameter WORD_COUNT = 30;
-
-wire clk = io_in[0];
-wire reset = io_in[1];
-wire write = io_in[2];
-wire din = io_in[3];
-wire under = io_in[4];
-wire over = io_in[5];
-
-reg [2:0] counter;
-reg [7 * WORD_COUNT - 1: 0] buffer;
-
-always@(posedge clk or posedge reset) begin
-    if(reset)
-        counter <= 3'd0;
-    else begin
-        if(counter == 3'b111 || (!write && !buffer[6]))
-            buffer[7 * WORD_COUNT - 1 - 7:0] <= buffer[7 * WORD_COUNT - 1:7];
-        if(!(counter == 3'b111) && write)
-            buffer[7 * WORD_COUNT - 1:7 * WORD_COUNT - 7] <= {din, buffer[7 * WORD_COUNT - 1:7 * WORD_COUNT - 7 +1]};
-        if(counter == 3'b111 || (!write && !buffer[6]))
-            buffer[7 * WORD_COUNT - 1:7 * WORD_COUNT - 7] <= buffer[6:0];
-        if(counter == 3'b111 || (!write && !buffer[6]))
-            counter <= 3'd0;
-        else
-            counter <= counter + 1'd1;
-    end
-end 
-
-always @ (buffer[6:0] or over or under or counter[2:0]) begin
-if(!buffer[6])
-    io_out <= {under, buffer[5:0], over};
-else
-    case({buffer[5:0], counter[2:0]})
-        9'b000001010: io_out <= 8'b00000110;
-        9'b000001011: io_out <= 8'b01011111;
-        9'b000001100: io_out <= 8'b00000110;
-        9'b000010010: io_out <= 8'b00000111;
-        9'b000010101: io_out <= 8'b00000111;
-        9'b000011001: io_out <= 8'b00010100;
-        9'b000011010: io_out <= 8'b01111111;
-        9'b000011011: io_out <= 8'b00010100;
-        9'b000011100: io_out <= 8'b00010100;
-        9'b000011101: io_out <= 8'b01111111;
-        9'b000011110: io_out <= 8'b00010100;
-        9'b000101001: io_out <= 8'b01000110;
-        9'b000101010: io_out <= 8'b00100110;
-        9'b000101011: io_out <= 8'b00010000;
-        9'b000101100: io_out <= 8'b00001000;
-        9'b000101101: io_out <= 8'b01100100;
-        9'b000101110: io_out <= 8'b01100010;
-        9'b000111010: io_out <= 8'b00000100;
-        9'b000111011: io_out <= 8'b00000011;
-        9'b001011001: io_out <= 8'b00001000;
-        9'b001011010: io_out <= 8'b00001000;
-        9'b001011011: io_out <= 8'b00111110;
-        9'b001011100: io_out <= 8'b00001000;
-        9'b001011101: io_out <= 8'b00001000;
-        9'b001100010: io_out <= 8'b10000000;
-        9'b001100011: io_out <= 8'b01100000;
-        9'b001101001: io_out <= 8'b00001000;
-        9'b001101010: io_out <= 8'b00001000;
-        9'b001101011: io_out <= 8'b00001000;
-        9'b001101100: io_out <= 8'b00001000;
-        9'b001101101: io_out <= 8'b00001000;
-        9'b001101110: io_out <= 8'b00001000;
-        9'b001110011: io_out <= 8'b01100000;
-        9'b001111001: io_out <= 8'b01000000;
-        9'b001111010: io_out <= 8'b00100000;
-        9'b001111011: io_out <= 8'b00010000;
-        9'b001111100: io_out <= 8'b00001000;
-        9'b001111101: io_out <= 8'b00000100;
-        9'b001111110: io_out <= 8'b00000010;
-        9'b010000001: io_out <= 8'b00111110;
-        9'b010000010: io_out <= 8'b01100001;
-        9'b010000011: io_out <= 8'b01010001;
-        9'b010000100: io_out <= 8'b01001001;
-        9'b010000101: io_out <= 8'b01000101;
-        9'b010000110: io_out <= 8'b00111110;
-        9'b010001001: io_out <= 8'b01000100;
-        9'b010001010: io_out <= 8'b01000010;
-        9'b010001011: io_out <= 8'b01111111;
-        9'b010001100: io_out <= 8'b01000000;
-        9'b010001101: io_out <= 8'b01000000;
-        9'b010010001: io_out <= 8'b01100010;
-        9'b010010010: io_out <= 8'b01010001;
-        9'b010010011: io_out <= 8'b01010001;
-        9'b010010100: io_out <= 8'b01001001;
-        9'b010010101: io_out <= 8'b01001001;
-        9'b010010110: io_out <= 8'b01100110;
-        9'b010011001: io_out <= 8'b00100010;
-        9'b010011010: io_out <= 8'b01000001;
-        9'b010011011: io_out <= 8'b01001001;
-        9'b010011100: io_out <= 8'b01001001;
-        9'b010011101: io_out <= 8'b01001001;
-        9'b010011110: io_out <= 8'b00110110;
-        9'b010100000: io_out <= 8'b00010000;
-        9'b010100001: io_out <= 8'b00011000;
-        9'b010100010: io_out <= 8'b00010100;
-        9'b010100011: io_out <= 8'b01010010;
-        9'b010100100: io_out <= 8'b01111111;
-        9'b010100101: io_out <= 8'b01010000;
-        9'b010100110: io_out <= 8'b00010000;
-        9'b010101001: io_out <= 8'b00100111;
-        9'b010101010: io_out <= 8'b01000101;
-        9'b010101011: io_out <= 8'b01000101;
-        9'b010101100: io_out <= 8'b01000101;
-        9'b010101101: io_out <= 8'b01000101;
-        9'b010101110: io_out <= 8'b00111001;
-        9'b010110001: io_out <= 8'b00111100;
-        9'b010110010: io_out <= 8'b01001010;
-        9'b010110011: io_out <= 8'b01001001;
-        9'b010110100: io_out <= 8'b01001001;
-        9'b010110101: io_out <= 8'b01001001;
-        9'b010110110: io_out <= 8'b00110000;
-        9'b010111001: io_out <= 8'b00000011;
-        9'b010111010: io_out <= 8'b00000001;
-        9'b010111011: io_out <= 8'b01110001;
-        9'b010111100: io_out <= 8'b00001001;
-        9'b010111101: io_out <= 8'b00000101;
-        9'b010111110: io_out <= 8'b00000011;
-        9'b011000001: io_out <= 8'b00110110;
-        9'b011000010: io_out <= 8'b01001001;
-        9'b011000011: io_out <= 8'b01001001;
-        9'b011000100: io_out <= 8'b01001001;
-        9'b011000101: io_out <= 8'b01001001;
-        9'b011000110: io_out <= 8'b00110110;
-        9'b011001001: io_out <= 8'b00000110;
-        9'b011001010: io_out <= 8'b01001001;
-        9'b011001011: io_out <= 8'b01001001;
-        9'b011001100: io_out <= 8'b01001001;
-        9'b011001101: io_out <= 8'b00101001;
-        9'b011001110: io_out <= 8'b00011110;
-        9'b011010011: io_out <= 8'b01100110;
-        9'b011011010: io_out <= 8'b10000000;
-        9'b011011011: io_out <= 8'b01100110;
-        9'b011111001: io_out <= 8'b00000010;
-        9'b011111010: io_out <= 8'b00000001;
-        9'b011111011: io_out <= 8'b00000001;
-        9'b011111100: io_out <= 8'b01010001;
-        9'b011111101: io_out <= 8'b00001001;
-        9'b011111110: io_out <= 8'b00000110;
-        9'b100000001: io_out <= 8'b00111110;
-        9'b100000010: io_out <= 8'b01000001;
-        9'b100000011: io_out <= 8'b01011101;
-        9'b100000100: io_out <= 8'b01010101;
-        9'b100000101: io_out <= 8'b01010101;
-        9'b100000110: io_out <= 8'b00011110;
-        9'b100001001: io_out <= 8'b01111100;
-        9'b100001010: io_out <= 8'b00010010;
-        9'b100001011: io_out <= 8'b00010001;
-        9'b100001100: io_out <= 8'b00010001;
-        9'b100001101: io_out <= 8'b00010010;
-        9'b100001110: io_out <= 8'b01111100;
-        9'b100010001: io_out <= 8'b01000001;
-        9'b100010010: io_out <= 8'b01111111;
-        9'b100010011: io_out <= 8'b01001001;
-        9'b100010100: io_out <= 8'b01001001;
-        9'b100010101: io_out <= 8'b01001001;
-        9'b100010110: io_out <= 8'b00110110;
-        9'b100011001: io_out <= 8'b00011100;
-        9'b100011010: io_out <= 8'b00100010;
-        9'b100011011: io_out <= 8'b01000001;
-        9'b100011100: io_out <= 8'b01000001;
-        9'b100011101: io_out <= 8'b01000001;
-        9'b100011110: io_out <= 8'b00100010;
-        9'b100100001: io_out <= 8'b01000001;
-        9'b100100010: io_out <= 8'b01111111;
-        9'b100100011: io_out <= 8'b01000001;
-        9'b100100100: io_out <= 8'b01000001;
-        9'b100100101: io_out <= 8'b00100010;
-        9'b100100110: io_out <= 8'b00011100;
-        9'b100101001: io_out <= 8'b01000001;
-        9'b100101010: io_out <= 8'b01111111;
-        9'b100101011: io_out <= 8'b01001001;
-        9'b100101100: io_out <= 8'b01011101;
-        9'b100101101: io_out <= 8'b01000001;
-        9'b100101110: io_out <= 8'b01100011;
-        9'b100110001: io_out <= 8'b01000001;
-        9'b100110010: io_out <= 8'b01111111;
-        9'b100110011: io_out <= 8'b01001001;
-        9'b100110100: io_out <= 8'b00011101;
-        9'b100110101: io_out <= 8'b00000001;
-        9'b100110110: io_out <= 8'b00000011;
-        9'b100111001: io_out <= 8'b00011100;
-        9'b100111010: io_out <= 8'b00100010;
-        9'b100111011: io_out <= 8'b01000001;
-        9'b100111100: io_out <= 8'b01010001;
-        9'b100111101: io_out <= 8'b01010001;
-        9'b100111110: io_out <= 8'b01110010;
-        9'b101000001: io_out <= 8'b01111111;
-        9'b101000010: io_out <= 8'b00001000;
-        9'b101000011: io_out <= 8'b00001000;
-        9'b101000100: io_out <= 8'b00001000;
-        9'b101000101: io_out <= 8'b00001000;
-        9'b101000110: io_out <= 8'b01111111;
-        9'b101001010: io_out <= 8'b01000001;
-        9'b101001011: io_out <= 8'b01111111;
-        9'b101001100: io_out <= 8'b01000001;
-        9'b101010001: io_out <= 8'b00110000;
-        9'b101010010: io_out <= 8'b01000000;
-        9'b101010011: io_out <= 8'b01000000;
-        9'b101010100: io_out <= 8'b01000001;
-        9'b101010101: io_out <= 8'b00111111;
-        9'b101010110: io_out <= 8'b00000001;
-        9'b101011001: io_out <= 8'b01000001;
-        9'b101011010: io_out <= 8'b01111111;
-        9'b101011011: io_out <= 8'b00001000;
-        9'b101011100: io_out <= 8'b00010100;
-        9'b101011101: io_out <= 8'b00100010;
-        9'b101011110: io_out <= 8'b01000001;
-        9'b101011111: io_out <= 8'b01000000;
-        9'b101100001: io_out <= 8'b01000001;
-        9'b101100010: io_out <= 8'b01111111;
-        9'b101100011: io_out <= 8'b01000001;
-        9'b101100100: io_out <= 8'b01000000;
-        9'b101100101: io_out <= 8'b01000000;
-        9'b101100110: io_out <= 8'b01100000;
-        9'b101101001: io_out <= 8'b01111111;
-        9'b101101010: io_out <= 8'b00000001;
-        9'b101101011: io_out <= 8'b00000010;
-        9'b101101100: io_out <= 8'b00000100;
-        9'b101101101: io_out <= 8'b00000010;
-        9'b101101110: io_out <= 8'b00000001;
-        9'b101101111: io_out <= 8'b01111111;
-        9'b101110001: io_out <= 8'b01111111;
-        9'b101110010: io_out <= 8'b00000001;
-        9'b101110011: io_out <= 8'b00000010;
-        9'b101110100: io_out <= 8'b00000100;
-        9'b101110101: io_out <= 8'b00001000;
-        9'b101110110: io_out <= 8'b01111111;
-        9'b101111001: io_out <= 8'b00011100;
-        9'b101111010: io_out <= 8'b00100010;
-        9'b101111011: io_out <= 8'b01000001;
-        9'b101111100: io_out <= 8'b01000001;
-        9'b101111101: io_out <= 8'b00100010;
-        9'b101111110: io_out <= 8'b00011100;
-        9'b110000001: io_out <= 8'b01000001;
-        9'b110000010: io_out <= 8'b01111111;
-        9'b110000011: io_out <= 8'b01001001;
-        9'b110000100: io_out <= 8'b00001001;
-        9'b110000101: io_out <= 8'b00001001;
-        9'b110000110: io_out <= 8'b00000110;
-        9'b110001001: io_out <= 8'b00011110;
-        9'b110001010: io_out <= 8'b00100001;
-        9'b110001011: io_out <= 8'b00100001;
-        9'b110001100: io_out <= 8'b00110001;
-        9'b110001101: io_out <= 8'b00100001;
-        9'b110001110: io_out <= 8'b01011110;
-        9'b110001111: io_out <= 8'b01000000;
-        9'b110010001: io_out <= 8'b01000001;
-        9'b110010010: io_out <= 8'b01111111;
-        9'b110010011: io_out <= 8'b01001001;
-        9'b110010100: io_out <= 8'b00011001;
-        9'b110010101: io_out <= 8'b00101001;
-        9'b110010110: io_out <= 8'b01000110;
-        9'b110011001: io_out <= 8'b00100110;
-        9'b110011010: io_out <= 8'b01001001;
-        9'b110011011: io_out <= 8'b01001001;
-        9'b110011100: io_out <= 8'b01001001;
-        9'b110011101: io_out <= 8'b01001001;
-        9'b110011110: io_out <= 8'b00110010;
-        9'b110100001: io_out <= 8'b00000011;
-        9'b110100010: io_out <= 8'b00000001;
-        9'b110100011: io_out <= 8'b01000001;
-        9'b110100100: io_out <= 8'b01111111;
-        9'b110100101: io_out <= 8'b01000001;
-        9'b110100110: io_out <= 8'b00000001;
-        9'b110100111: io_out <= 8'b00000011;
-        9'b110101001: io_out <= 8'b00111111;
-        9'b110101010: io_out <= 8'b01000000;
-        9'b110101011: io_out <= 8'b01000000;
-        9'b110101100: io_out <= 8'b01000000;
-        9'b110101101: io_out <= 8'b01000000;
-        9'b110101110: io_out <= 8'b00111111;
-        9'b110110001: io_out <= 8'b00001111;
-        9'b110110010: io_out <= 8'b00010000;
-        9'b110110011: io_out <= 8'b00100000;
-        9'b110110100: io_out <= 8'b01000000;
-        9'b110110101: io_out <= 8'b00100000;
-        9'b110110110: io_out <= 8'b00010000;
-        9'b110110111: io_out <= 8'b00001111;
-        9'b110111001: io_out <= 8'b00111111;
-        9'b110111010: io_out <= 8'b01000000;
-        9'b110111011: io_out <= 8'b01000000;
-        9'b110111100: io_out <= 8'b00111000;
-        9'b110111101: io_out <= 8'b01000000;
-        9'b110111110: io_out <= 8'b01000000;
-        9'b110111111: io_out <= 8'b00111111;
-        9'b111000001: io_out <= 8'b01000001;
-        9'b111000010: io_out <= 8'b00100010;
-        9'b111000011: io_out <= 8'b00010100;
-        9'b111000100: io_out <= 8'b00001000;
-        9'b111000101: io_out <= 8'b00010100;
-        9'b111000110: io_out <= 8'b00100010;
-        9'b111000111: io_out <= 8'b01000001;
-        9'b111001001: io_out <= 8'b00000001;
-        9'b111001010: io_out <= 8'b00000010;
-        9'b111001011: io_out <= 8'b01000100;
-        9'b111001100: io_out <= 8'b01111000;
-        9'b111001101: io_out <= 8'b01000100;
-        9'b111001110: io_out <= 8'b00000010;
-        9'b111001111: io_out <= 8'b00000001;
-        9'b111010001: io_out <= 8'b01000011;
-        9'b111010010: io_out <= 8'b01100001;
-        9'b111010011: io_out <= 8'b01010001;
-        9'b111010100: io_out <= 8'b01001001;
-        9'b111010101: io_out <= 8'b01000101;
-        9'b111010110: io_out <= 8'b01000011;
-        9'b111010111: io_out <= 8'b01100001;
-        default: io_out <= 8'b00000000;
-    endcase;
-end
-
-endmodule
diff --git a/verilog/rtl/142_Femto-top.v b/verilog/rtl/142_Femto-top.v
deleted file mode 100644
index 3a7ae30..0000000
--- a/verilog/rtl/142_Femto-top.v
+++ /dev/null
@@ -1,41 +0,0 @@
-module femto_top 
-#(
-    parameter OPSIZE = 3, //Number of opcodes, power of 2 (3 => 2**3 = 8 opcodes)
-    parameter  NUMRF = 2,  //Number of registers in register file, power of 2 (2 => 2**2 = 4 registers)
-    parameter   SIZE = 4 //Size of data in bits
-)
-(
-    input  [7:0] io_in,
-    output [7:0] io_out
-);
-wire clk=io_in[0];
-
-//Decode
-wire[OPSIZE-1:0]    op=io_in[1+:OPSIZE];                         //opcode wire
-wire  [NUMRF-1:0] reg_0=io_in[1+OPSIZE+:NUMRF];                  //register address 0 (Dest)
-wire  [NUMRF-1:0] reg_1=io_in[1+OPSIZE+NUMRF+:NUMRF];            //register address 1 (Src)
-wire [(7-OPSIZE-2*NUMRF)-1:0] extra=io_in[7-:7-OPSIZE+2*NUMRF];  //Extra wires (if opcode and number of registers are small enough)
-wire valid=(op=={(OPSIZE){1'b1}})?1:0;
-wire rd=(op!=3'h6&&op!=3'h0&&op!=3'h1);
-wire wr=(op==3'h6);
-reg[3:0] value;
-
-wire [SIZE-1:0] data_0,data_1,data_out;
-
-reg_file #( .NUMRF(NUMRF),  .SIZE(SIZE))  rf (.clk(clk), .rd(rd), .wr(wr), .reg_out(reg_1),.reg_in(reg_0),.data_in(data_0),.data_out(data_1));
-
-//Execute
-alu_gen  #(.OPSIZE(OPSIZE), .SIZE(SIZE)) alu (.clk(clk), .op(op),.inp(data_1),.outp(data_out));
-
-//Output
-
-assign data_0=data_out;
-
-always @(posedge clk) begin
-    if(valid==1) begin
-        value<=data_out;
-    end
-end
-
-seg7 seg(.value(value),.segments(io_out[6:0]));
-endmodule
diff --git a/verilog/rtl/143_logisimTopLevelShell.v b/verilog/rtl/143_logisimTopLevelShell.v
deleted file mode 100644
index 2d0db83..0000000
--- a/verilog/rtl/143_logisimTopLevelShell.v
+++ /dev/null
@@ -1,36 +0,0 @@
-`default_nettype none
-module logisim_demo(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-
-   wire s_CLK = io_in[0];
-   wire s_A;
-   wire s_B;
-   wire s_C;
-   wire s_D;
-   wire s_E;
-   wire s_F;
-   wire s_G;
-   wire s_DP;
-   assign io_out[0] = s_A;
-   assign io_out[1] = s_B;
-   assign io_out[2] = s_C;
-   assign io_out[3] = s_D;
-   assign io_out[4] = s_E;
-   assign io_out[5] = s_F;
-   assign io_out[6] = s_G;
-   assign io_out[7] = s_DP;
-   wire s_RST = io_in[1];
-
-  main   CIRCUIT_0 (.CLK(s_CLK),
-                     .A(s_A),
-                     .B(s_B),
-                     .C(s_C),
-                     .D(s_D),
-                     .E(s_E),
-                     .F(s_F),
-                     .G(s_G),
-                     .DP(s_DP),
-                     .RST(s_RST));
-endmodule
diff --git a/verilog/rtl/user_module_339501025136214612.v b/verilog/rtl/user_module_339501025136214612.v
deleted file mode 100644
index ac6ba7d..0000000
--- a/verilog/rtl/user_module_339501025136214612.v
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Automatically generated from https://wokwi.com/projects/339501025136214612 */
-
-`default_nettype none
-
-module user_module_339501025136214612(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  wire net1 = io_in[0];
-  wire net2 = io_in[1];
-  wire net3 = io_in[2];
-  wire net4 = io_in[3];
-  wire net5 = io_in[4];
-  wire net6 = io_in[5];
-  wire net7 = io_in[6];
-  wire net8 = io_in[7];
-  wire net9 = 1'b0;
-  wire net10 = 1'b1;
-  wire net11 = 1'b1;
-
-  assign io_out[0] = net1;
-  assign io_out[1] = net2;
-  assign io_out[2] = net3;
-  assign io_out[3] = net4;
-  assign io_out[4] = net5;
-  assign io_out[5] = net6;
-  assign io_out[6] = net7;
-  assign io_out[7] = net8;
-
-endmodule
diff --git a/verilog/rtl/user_module_348953272198890067.v b/verilog/rtl/user_module_348953272198890067.v
deleted file mode 100644
index bba21da..0000000
--- a/verilog/rtl/user_module_348953272198890067.v
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Automatically generated from https://wokwi.com/projects/348953272198890067 */
-
-`default_nettype none
-
-module user_module_348953272198890067(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  wire net1 = io_in[0];
-  wire net2 = io_in[1];
-  wire net3 = io_in[2];
-  wire net4 = io_in[3];
-  wire net5 = io_in[4];
-  wire net6 = io_in[5];
-  wire net7 = io_in[6];
-  wire net8 = io_in[7];
-  wire net9;
-  wire net10;
-  wire net11 = 1'b0;
-  wire net12 = 1'b1;
-  wire net13 = 1'b1;
-
-  assign io_out[0] = net1;
-  assign io_out[1] = net9;
-  assign io_out[2] = net10;
-  assign io_out[3] = net4;
-  assign io_out[4] = net5;
-  assign io_out[5] = net6;
-  assign io_out[6] = net7;
-  assign io_out[7] = net8;
-
-  and_cell gate1 (
-    .a (net2),
-    .b (net3),
-    .out (net9)
-  );
-  or_cell gate2 (
-    .a (net1),
-    .b (net3),
-    .out (net10)
-  );
-  xor_cell gate3 (
-
-  );
-  nand_cell gate4 (
-
-  );
-  not_cell gate5 (
-
-  );
-  buffer_cell gate6 (
-
-  );
-  mux_cell mux1 (
-
-  );
-  dff_cell flipflop1 (
-
-  );
-endmodule
diff --git a/verilog/rtl/user_module_348961139276644947.v b/verilog/rtl/user_module_348961139276644947.v
deleted file mode 100644
index 47a800b..0000000
--- a/verilog/rtl/user_module_348961139276644947.v
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Automatically generated from https://wokwi.com/projects/348961139276644947 */
-
-`default_nettype none
-
-module user_module_348961139276644947(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  wire net1 = io_in[0];
-  wire net2 = io_in[1];
-  wire net3 = io_in[2];
-  wire net4 = io_in[3];
-  wire net5 = io_in[4];
-  wire net6 = io_in[5];
-  wire net7 = io_in[6];
-  wire net8 = io_in[7];
-  wire net9;
-  wire net10;
-  wire net11 = 1'b0;
-  wire net12 = 1'b1;
-  wire net13 = 1'b1;
-
-  assign io_out[0] = net1;
-  assign io_out[1] = net9;
-  assign io_out[2] = net10;
-  assign io_out[3] = net4;
-  assign io_out[4] = net5;
-  assign io_out[5] = net6;
-  assign io_out[6] = net7;
-  assign io_out[7] = net8;
-
-  and_cell gate1 (
-    .a (net2),
-    .b (net3),
-    .out (net9)
-  );
-  or_cell gate2 (
-    .a (net1),
-    .b (net3),
-    .out (net10)
-  );
-  xor_cell gate3 (
-
-  );
-  nand_cell gate4 (
-
-  );
-  not_cell gate5 (
-
-  );
-  buffer_cell gate6 (
-
-  );
-  mux_cell mux1 (
-
-  );
-  dff_cell flipflop1 (
-
-  );
-endmodule
diff --git a/verilog/rtl/user_module_349209305274122835.v b/verilog/rtl/user_module_349209305274122835.v
deleted file mode 100644
index d11a3d5..0000000
--- a/verilog/rtl/user_module_349209305274122835.v
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Automatically generated from https://wokwi.com/projects/349209305274122835 */
-
-`default_nettype none
-
-module user_module_349209305274122835(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  wire net1 = io_in[1];
-  wire net2 = io_in[2];
-  wire net3 = io_in[3];
-  wire net4 = io_in[4];
-  wire net5 = io_in[5];
-  wire net6 = io_in[6];
-  wire net7 = io_in[7];
-  wire net8;
-  wire net9;
-  wire net10;
-  wire net11;
-  wire net12;
-  wire net13;
-  wire net14;
-  wire net15 = 1'b0;
-  wire net16 = 1'b1;
-  wire net17 = 1'b1;
-
-  assign io_out[0] = net1;
-  assign io_out[1] = net8;
-  assign io_out[2] = net9;
-  assign io_out[3] = net10;
-  assign io_out[4] = net11;
-  assign io_out[5] = net12;
-  assign io_out[6] = net13;
-  assign io_out[7] = net14;
-
-  and_cell gate1 (
-    .a (net1),
-    .b (net1),
-    .out (net8)
-  );
-  or_cell gate2 (
-
-  );
-  xor_cell gate3 (
-
-  );
-  nand_cell gate4 (
-
-  );
-  buffer_cell gate6 (
-
-  );
-  mux_cell mux1 (
-
-  );
-  dff_cell flipflop1 (
-    .d (net2),
-    .clk (net8),
-    .q (net9)
-  );
-  dff_cell flipflop2 (
-    .d (net3),
-    .clk (net8),
-    .q (net10)
-  );
-  dff_cell flipflop3 (
-    .d (net4),
-    .clk (net8),
-    .q (net11)
-  );
-  dff_cell flipflop4 (
-    .d (net5),
-    .clk (net8),
-    .q (net12)
-  );
-  dff_cell flipflop5 (
-    .d (net6),
-    .clk (net8),
-    .q (net13)
-  );
-  dff_cell flipflop6 (
-    .d (net7),
-    .clk (net8),
-    .q (net14)
-  );
-endmodule
diff --git a/verilog/rtl/user_module_349405063877231188.v b/verilog/rtl/user_module_349405063877231188.v
deleted file mode 100644
index adae01e..0000000
--- a/verilog/rtl/user_module_349405063877231188.v
+++ /dev/null
@@ -1,1430 +0,0 @@
-/* Automatically generated from https://wokwi.com/projects/349405063877231188 */
-
-`default_nettype none
-
-module user_module_349405063877231188(
-  input [7:0] io_in,
-  output [7:0] io_out
-);
-  wire net1 = io_in[3];
-  wire net2 = io_in[4];
-  wire net3 = io_in[5];
-  wire net4 = io_in[6];
-  wire net5 = io_in[7];
-  wire net6 = 1'b1;
-  wire net7 = 1'b1;
-  wire net8 = 1'b1;
-  wire net9;
-  wire net10;
-  wire net11;
-  wire net12;
-  wire net13;
-  wire net14;
-  wire net15;
-  wire net16;
-  wire net17;
-  wire net18;
-  wire net19;
-  wire net20;
-  wire net21;
-  wire net22;
-  wire net23;
-  wire net24;
-  wire net25;
-  wire net26;
-  wire net27;
-  wire net28;
-  wire net29;
-  wire net30;
-  wire net31;
-  wire net32;
-  wire net33;
-  wire net34;
-  wire net35;
-  wire net36;
-  wire net37;
-  wire net38;
-  wire net39;
-  wire net40;
-  wire net41;
-  wire net42;
-  wire net43;
-  wire net44;
-  wire net45;
-  wire net46;
-  wire net47;
-  wire net48;
-  wire net49;
-  wire net50;
-  wire net51;
-  wire net52;
-  wire net53;
-  wire net54;
-  wire net55;
-  wire net56;
-  wire net57;
-  wire net58;
-  wire net59;
-  wire net60;
-  wire net61;
-  wire net62;
-  wire net63;
-  wire net64;
-  wire net65;
-  wire net66;
-  wire net67;
-  wire net68;
-  wire net69;
-  wire net70;
-  wire net71;
-  wire net72;
-  wire net73;
-  wire net74;
-  wire net75;
-  wire net76;
-  wire net77;
-  wire net78;
-  wire net79;
-  wire net80;
-  wire net81 = 1'b1;
-  wire net82;
-  wire net83;
-  wire net84;
-  wire net85;
-  wire net86;
-  wire net87;
-  wire net88;
-  wire net89;
-  wire net90;
-  wire net91;
-  wire net92;
-  wire net93;
-  wire net94;
-  wire net95;
-  wire net96;
-  wire net97;
-  wire net98;
-  wire net99;
-  wire net100;
-  wire net101;
-  wire net102;
-  wire net103;
-  wire net104;
-  wire net105;
-  wire net106;
-  wire net107;
-  wire net108;
-  wire net109;
-  wire net110;
-  wire net111;
-  wire net112;
-  wire net113;
-  wire net114;
-  wire net115;
-  wire net116;
-  wire net117;
-  wire net118;
-  wire net119;
-  wire net120;
-  wire net121;
-  wire net122;
-  wire net123;
-  wire net124;
-  wire net125;
-  wire net126;
-  wire net127;
-  wire net128;
-  wire net129;
-  wire net130;
-  wire net131;
-  wire net132;
-  wire net133;
-  wire net134;
-  wire net135;
-  wire net136;
-  wire net137;
-  wire net138;
-  wire net139;
-  wire net140;
-  wire net141;
-  wire net142;
-  wire net143;
-  wire net144;
-  wire net145;
-  wire net146;
-  wire net147;
-  wire net148;
-  wire net149;
-  wire net150;
-  wire net151;
-  wire net152 = 1'b1;
-  wire net153;
-  wire net154;
-  wire net155;
-  wire net156;
-  wire net157;
-  wire net158;
-  wire net159;
-  wire net160;
-  wire net161;
-  wire net162;
-  wire net163;
-  wire net164;
-  wire net165;
-  wire net166;
-  wire net167;
-  wire net168;
-  wire net169;
-  wire net170;
-  wire net171;
-  wire net172;
-  wire net173;
-  wire net174;
-  wire net175;
-  wire net176;
-  wire net177;
-  wire net178;
-  wire net179;
-  wire net180;
-  wire net181;
-  wire net182;
-  wire net183;
-  wire net184;
-  wire net185;
-  wire net186;
-  wire net187;
-  wire net188;
-  wire net189;
-  wire net190;
-  wire net191;
-  wire net192;
-  wire net193;
-  wire net194;
-  wire net195;
-  wire net196;
-  wire net197;
-  wire net198;
-  wire net199;
-  wire net200;
-  wire net201;
-  wire net202;
-  wire net203;
-  wire net204;
-  wire net205;
-  wire net206;
-  wire net207;
-  wire net208;
-  wire net209;
-  wire net210;
-  wire net211;
-  wire net212;
-  wire net213;
-  wire net214;
-  wire net215;
-  wire net216;
-  wire net217;
-  wire net218;
-  wire net219;
-  wire net220;
-  wire net221;
-  wire net222;
-  wire net223;
-  wire net224;
-  wire net225;
-  wire net226;
-  wire net227;
-  wire net228;
-  wire net229;
-  wire net230;
-  wire net231;
-  wire net232;
-  wire net233;
-  wire net234 = 1'b0;
-  wire net235;
-  wire net236;
-  wire net237;
-  wire net238;
-  wire net239;
-  wire net240;
-  wire net241;
-  wire net242;
-  wire net243;
-  wire net244;
-  wire net245;
-  wire net246;
-  wire net247;
-  wire net248;
-  wire net249;
-  wire net250;
-  wire net251;
-  wire net252;
-  wire net253;
-  wire net254;
-  wire net255;
-
-  and_cell gate1 (
-
-  );
-  or_cell gate2 (
-
-  );
-  xor_cell gate3 (
-
-  );
-  nand_cell gate4 (
-
-  );
-  not_cell gate5 (
-
-  );
-  buffer_cell gate6 (
-
-  );
-  mux_cell mux1 (
-
-  );
-  dff_cell flipflop1 (
-
-  );
-  dff_cell flipflop2 (
-    .d (net9),
-    .clk (net10),
-    .q (net11),
-    .notq (net12)
-  );
-  and_cell gate7 (
-    .a (net12),
-    .b (net8),
-    .out (net13)
-  );
-  and_cell gate8 (
-    .a (net14),
-    .b (net11),
-    .out (net15)
-  );
-  or_cell gate9 (
-    .a (net13),
-    .b (net15),
-    .out (net9)
-  );
-  not_cell gate10 (
-    .in (net8),
-    .out (net14)
-  );
-  dff_cell flipflop3 (
-    .d (net16),
-    .clk (net10),
-    .q (net17),
-    .notq (net18)
-  );
-  and_cell gate11 (
-    .a (net18),
-    .b (net19),
-    .out (net20)
-  );
-  and_cell gate12 (
-    .a (net21),
-    .b (net17),
-    .out (net22)
-  );
-  or_cell gate13 (
-    .a (net20),
-    .b (net22),
-    .out (net16)
-  );
-  not_cell gate14 (
-    .in (net19),
-    .out (net21)
-  );
-  and_cell gate15 (
-    .a (net23),
-    .b (net11),
-    .out (net24)
-  );
-  and_cell gate16 (
-    .a (net5),
-    .b (net12),
-    .out (net25)
-  );
-  or_cell gate17 (
-    .a (net24),
-    .b (net25),
-    .out (net19)
-  );
-  not_cell gate18 (
-    .in (net5),
-    .out (net23)
-  );
-  dff_cell flipflop4 (
-    .d (net26),
-    .clk (net10),
-    .q (net27),
-    .notq (net28)
-  );
-  and_cell gate19 (
-    .a (net28),
-    .b (net29),
-    .out (net30)
-  );
-  and_cell gate20 (
-    .a (net31),
-    .b (net27),
-    .out (net32)
-  );
-  or_cell gate21 (
-    .a (net30),
-    .b (net32),
-    .out (net26)
-  );
-  not_cell gate22 (
-    .in (net29),
-    .out (net31)
-  );
-  and_cell gate23 (
-    .a (net24),
-    .b (net17),
-    .out (net33)
-  );
-  and_cell gate24 (
-    .a (net18),
-    .b (net25),
-    .out (net34)
-  );
-  or_cell gate25 (
-    .a (net33),
-    .b (net34),
-    .out (net29)
-  );
-  dff_cell flipflop5 (
-    .d (net35),
-    .clk (net10),
-    .q (net36),
-    .notq (net37)
-  );
-  and_cell gate26 (
-    .a (net37),
-    .b (net38),
-    .out (net39)
-  );
-  and_cell gate27 (
-    .a (net40),
-    .b (net36),
-    .out (net41)
-  );
-  or_cell gate28 (
-    .a (net39),
-    .b (net41),
-    .out (net35)
-  );
-  not_cell gate29 (
-    .in (net38),
-    .out (net40)
-  );
-  and_cell gate30 (
-    .a (net33),
-    .b (net27),
-    .out (net42)
-  );
-  and_cell gate31 (
-    .a (net28),
-    .b (net34),
-    .out (net43)
-  );
-  or_cell gate32 (
-    .a (net42),
-    .b (net43),
-    .out (net38)
-  );
-  dff_cell flipflop6 (
-    .d (net44),
-    .clk (net10),
-    .q (net45),
-    .notq (net46)
-  );
-  and_cell gate33 (
-    .a (net46),
-    .b (net47),
-    .out (net48)
-  );
-  and_cell gate34 (
-    .a (net49),
-    .b (net45),
-    .out (net50)
-  );
-  or_cell gate35 (
-    .a (net48),
-    .b (net50),
-    .out (net44)
-  );
-  not_cell gate36 (
-    .in (net47),
-    .out (net49)
-  );
-  and_cell gate37 (
-    .a (net42),
-    .b (net36),
-    .out (net51)
-  );
-  and_cell gate38 (
-    .a (net37),
-    .b (net43),
-    .out (net52)
-  );
-  or_cell gate39 (
-    .a (net51),
-    .b (net52),
-    .out (net47)
-  );
-  dff_cell flipflop7 (
-    .d (net53),
-    .clk (net10),
-    .q (net54),
-    .notq (net55)
-  );
-  and_cell gate40 (
-    .a (net55),
-    .b (net56),
-    .out (net57)
-  );
-  and_cell gate41 (
-    .a (net58),
-    .b (net54),
-    .out (net59)
-  );
-  or_cell gate42 (
-    .a (net57),
-    .b (net59),
-    .out (net53)
-  );
-  not_cell gate43 (
-    .in (net56),
-    .out (net58)
-  );
-  and_cell gate44 (
-    .a (net51),
-    .b (net45),
-    .out (net60)
-  );
-  and_cell gate45 (
-    .a (net46),
-    .b (net52),
-    .out (net61)
-  );
-  or_cell gate46 (
-    .a (net60),
-    .b (net61),
-    .out (net56)
-  );
-  dff_cell flipflop8 (
-    .d (net62),
-    .clk (net10),
-    .q (net63),
-    .notq (net64)
-  );
-  and_cell gate47 (
-    .a (net64),
-    .b (net65),
-    .out (net66)
-  );
-  and_cell gate48 (
-    .a (net67),
-    .b (net63),
-    .out (net68)
-  );
-  or_cell gate49 (
-    .a (net66),
-    .b (net68),
-    .out (net62)
-  );
-  not_cell gate50 (
-    .in (net65),
-    .out (net67)
-  );
-  and_cell gate51 (
-    .a (net60),
-    .b (net54),
-    .out (net69)
-  );
-  and_cell gate52 (
-    .a (net55),
-    .b (net61),
-    .out (net70)
-  );
-  or_cell gate53 (
-    .a (net69),
-    .b (net70),
-    .out (net65)
-  );
-  dff_cell flipflop9 (
-    .d (net71),
-    .clk (net10),
-    .q (net72),
-    .notq (net73)
-  );
-  and_cell gate54 (
-    .a (net73),
-    .b (net74),
-    .out (net75)
-  );
-  and_cell gate55 (
-    .a (net76),
-    .b (net72),
-    .out (net77)
-  );
-  or_cell gate56 (
-    .a (net75),
-    .b (net77),
-    .out (net71)
-  );
-  not_cell gate57 (
-    .in (net74),
-    .out (net76)
-  );
-  and_cell gate58 (
-    .a (net69),
-    .b (net63),
-    .out (net78)
-  );
-  and_cell gate59 (
-    .a (net64),
-    .b (net70),
-    .out (net79)
-  );
-  or_cell gate60 (
-    .a (net78),
-    .b (net79),
-    .out (net74)
-  );
-  not_cell gate114 (
-    .in (net5),
-    .out (net80)
-  );
-  dff_cell flipflop10 (
-    .d (net82),
-    .clk (net83),
-    .q (net84),
-    .notq (net85)
-  );
-  and_cell gate61 (
-    .a (net85),
-    .b (net81),
-    .out (net86)
-  );
-  and_cell gate62 (
-    .a (net87),
-    .b (net84),
-    .out (net88)
-  );
-  or_cell gate63 (
-    .a (net86),
-    .b (net88),
-    .out (net82)
-  );
-  not_cell gate64 (
-    .in (net81),
-    .out (net87)
-  );
-  dff_cell flipflop11 (
-    .d (net89),
-    .clk (net83),
-    .q (net90),
-    .notq (net91)
-  );
-  and_cell gate65 (
-    .a (net91),
-    .b (net92),
-    .out (net93)
-  );
-  and_cell gate66 (
-    .a (net94),
-    .b (net90),
-    .out (net95)
-  );
-  or_cell gate67 (
-    .a (net93),
-    .b (net95),
-    .out (net89)
-  );
-  not_cell gate68 (
-    .in (net92),
-    .out (net94)
-  );
-  and_cell gate69 (
-    .a (net80),
-    .b (net84),
-    .out (net96)
-  );
-  and_cell gate70 (
-    .a (net5),
-    .b (net85),
-    .out (net97)
-  );
-  or_cell gate71 (
-    .a (net96),
-    .b (net97),
-    .out (net92)
-  );
-  dff_cell flipflop12 (
-    .d (net98),
-    .clk (net83),
-    .q (net99),
-    .notq (net100)
-  );
-  and_cell gate72 (
-    .a (net100),
-    .b (net101),
-    .out (net102)
-  );
-  and_cell gate73 (
-    .a (net103),
-    .b (net99),
-    .out (net104)
-  );
-  or_cell gate74 (
-    .a (net102),
-    .b (net104),
-    .out (net98)
-  );
-  not_cell gate75 (
-    .in (net101),
-    .out (net103)
-  );
-  and_cell gate76 (
-    .a (net96),
-    .b (net90),
-    .out (net105)
-  );
-  and_cell gate77 (
-    .a (net91),
-    .b (net97),
-    .out (net106)
-  );
-  or_cell gate78 (
-    .a (net105),
-    .b (net106),
-    .out (net101)
-  );
-  dff_cell flipflop13 (
-    .d (net107),
-    .clk (net83),
-    .q (net108),
-    .notq (net109)
-  );
-  and_cell gate79 (
-    .a (net109),
-    .b (net110),
-    .out (net111)
-  );
-  and_cell gate80 (
-    .a (net112),
-    .b (net108),
-    .out (net113)
-  );
-  or_cell gate81 (
-    .a (net111),
-    .b (net113),
-    .out (net107)
-  );
-  not_cell gate82 (
-    .in (net110),
-    .out (net112)
-  );
-  and_cell gate83 (
-    .a (net105),
-    .b (net99),
-    .out (net114)
-  );
-  and_cell gate84 (
-    .a (net100),
-    .b (net106),
-    .out (net115)
-  );
-  or_cell gate85 (
-    .a (net114),
-    .b (net115),
-    .out (net110)
-  );
-  dff_cell flipflop14 (
-    .d (net116),
-    .clk (net83),
-    .q (net117),
-    .notq (net118)
-  );
-  and_cell gate86 (
-    .a (net118),
-    .b (net119),
-    .out (net120)
-  );
-  and_cell gate87 (
-    .a (net121),
-    .b (net117),
-    .out (net122)
-  );
-  or_cell gate88 (
-    .a (net120),
-    .b (net122),
-    .out (net116)
-  );
-  not_cell gate89 (
-    .in (net119),
-    .out (net121)
-  );
-  and_cell gate90 (
-    .a (net114),
-    .b (net108),
-    .out (net123)
-  );
-  and_cell gate91 (
-    .a (net109),
-    .b (net115),
-    .out (net124)
-  );
-  or_cell gate92 (
-    .a (net123),
-    .b (net124),
-    .out (net119)
-  );
-  dff_cell flipflop15 (
-    .d (net125),
-    .clk (net83),
-    .q (net126),
-    .notq (net127)
-  );
-  and_cell gate93 (
-    .a (net127),
-    .b (net128),
-    .out (net129)
-  );
-  and_cell gate94 (
-    .a (net130),
-    .b (net126),
-    .out (net131)
-  );
-  or_cell gate95 (
-    .a (net129),
-    .b (net131),
-    .out (net125)
-  );
-  not_cell gate96 (
-    .in (net128),
-    .out (net130)
-  );
-  and_cell gate97 (
-    .a (net123),
-    .b (net117),
-    .out (net132)
-  );
-  and_cell gate98 (
-    .a (net118),
-    .b (net124),
-    .out (net133)
-  );
-  or_cell gate99 (
-    .a (net132),
-    .b (net133),
-    .out (net128)
-  );
-  dff_cell flipflop16 (
-    .d (net134),
-    .clk (net83),
-    .q (net135),
-    .notq (net136)
-  );
-  and_cell gate100 (
-    .a (net136),
-    .b (net137),
-    .out (net138)
-  );
-  and_cell gate101 (
-    .a (net139),
-    .b (net135),
-    .out (net140)
-  );
-  or_cell gate102 (
-    .a (net138),
-    .b (net140),
-    .out (net134)
-  );
-  not_cell gate103 (
-    .in (net137),
-    .out (net139)
-  );
-  and_cell gate104 (
-    .a (net132),
-    .b (net126),
-    .out (net141)
-  );
-  and_cell gate105 (
-    .a (net127),
-    .b (net133),
-    .out (net142)
-  );
-  or_cell gate106 (
-    .a (net141),
-    .b (net142),
-    .out (net137)
-  );
-  dff_cell flipflop17 (
-    .d (net143),
-    .clk (net83),
-    .q (net144),
-    .notq (net145)
-  );
-  and_cell gate107 (
-    .a (net145),
-    .b (net146),
-    .out (net147)
-  );
-  and_cell gate108 (
-    .a (net148),
-    .b (net144),
-    .out (net149)
-  );
-  or_cell gate109 (
-    .a (net147),
-    .b (net149),
-    .out (net143)
-  );
-  not_cell gate110 (
-    .in (net146),
-    .out (net148)
-  );
-  and_cell gate111 (
-    .a (net141),
-    .b (net135),
-    .out (net150)
-  );
-  and_cell gate112 (
-    .a (net136),
-    .b (net142),
-    .out (net151)
-  );
-  or_cell gate113 (
-    .a (net150),
-    .b (net151),
-    .out (net146)
-  );
-  and_cell gate115 (
-    .a (net1),
-    .b (net4),
-    .out (net10)
-  );
-  and_cell gate116 (
-    .a (net153),
-    .b (net1),
-    .out (net83)
-  );
-  not_cell gate117 (
-    .in (net4),
-    .out (net153)
-  );
-  not_cell gate118 (
-
-  );
-  not_cell gate130 (
-
-  );
-  not_cell gate131 (
-
-  );
-  buffer_cell gate132 (
-    .in (net154),
-    .out (net155)
-  );
-  buffer_cell gate133 (
-    .in (net156),
-    .out (net157)
-  );
-  buffer_cell gate134 (
-    .in (net158),
-    .out (net159)
-  );
-  buffer_cell gate135 (
-    .in (net160),
-    .out (net161)
-  );
-  not_cell gate136 (
-    .in (net159),
-    .out (net162)
-  );
-  not_cell gate137 (
-    .in (net161),
-    .out (net163)
-  );
-  not_cell gate138 (
-    .in (net157),
-    .out (net164)
-  );
-  not_cell gate139 (
-    .in (net155),
-    .out (net165)
-  );
-  and_cell gate140 (
-    .a (net159),
-    .b (net166),
-    .out (net167)
-  );
-  and_cell gate141 (
-    .a (net165),
-    .b (net157),
-    .out (net166)
-  );
-  or_cell gate142 (
-    .a (net168),
-    .b (net169),
-    .out (net170)
-  );
-  and_cell gate143 (
-    .a (net155),
-    .b (net162),
-    .out (net171)
-  );
-  and_cell gate144 (
-    .a (net163),
-    .b (net172),
-    .out (net173)
-  );
-  and_cell gate145 (
-    .a (net164),
-    .b (net155),
-    .out (net172)
-  );
-  and_cell gate146 (
-    .a (net161),
-    .b (net165),
-    .out (net174)
-  );
-  and_cell gate147 (
-    .a (net157),
-    .b (net161),
-    .out (net175)
-  );
-  or_cell gate148 (
-    .a (net176),
-    .b (net175),
-    .out (net177)
-  );
-  or_cell gate149 (
-    .a (net174),
-    .b (net167),
-    .out (net178)
-  );
-  or_cell gate150 (
-    .a (net173),
-    .b (net171),
-    .out (net169)
-  );
-  or_cell gate151 (
-    .a (net177),
-    .b (net178),
-    .out (net168)
-  );
-  and_cell gate152 (
-    .a (net155),
-    .b (net179),
-    .out (net180)
-  );
-  and_cell gate153 (
-    .a (net163),
-    .b (net159),
-    .out (net179)
-  );
-  and_cell gate154 (
-    .a (net164),
-    .b (net162),
-    .out (net176)
-  );
-  and_cell gate155 (
-    .a (net165),
-    .b (net181),
-    .out (net182)
-  );
-  and_cell gate156 (
-    .a (net163),
-    .b (net162),
-    .out (net181)
-  );
-  and_cell gate157 (
-    .a (net165),
-    .b (net161),
-    .out (net183)
-  );
-  and_cell gate158 (
-    .a (net183),
-    .b (net159),
-    .out (net184)
-  );
-  and_cell gate159 (
-    .a (net165),
-    .b (net164),
-    .out (net185)
-  );
-  or_cell gate160 (
-    .a (net180),
-    .b (net185),
-    .out (net186)
-  );
-  or_cell gate161 (
-    .a (net184),
-    .b (net182),
-    .out (net187)
-  );
-  or_cell gate162 (
-    .a (net186),
-    .b (net187),
-    .out (net188)
-  );
-  or_cell gate163 (
-    .a (net188),
-    .b (net176),
-    .out (net189)
-  );
-  and_cell gate164 (
-    .a (net155),
-    .b (net164),
-    .out (net190)
-  );
-  and_cell gate165 (
-    .a (net165),
-    .b (net157),
-    .out (net191)
-  );
-  and_cell gate166 (
-    .a (net165),
-    .b (net163),
-    .out (net192)
-  );
-  and_cell gate167 (
-    .a (net165),
-    .b (net159),
-    .out (net193)
-  );
-  and_cell gate168 (
-    .a (net159),
-    .b (net163),
-    .out (net194)
-  );
-  or_cell gate169 (
-    .a (net190),
-    .b (net191),
-    .out (net195)
-  );
-  or_cell gate170 (
-    .a (net192),
-    .b (net193),
-    .out (net196)
-  );
-  or_cell gate171 (
-    .a (net195),
-    .b (net196),
-    .out (net197)
-  );
-  or_cell gate172 (
-    .a (net197),
-    .b (net194),
-    .out (net198)
-  );
-  and_cell gate173 (
-    .a (net157),
-    .b (net163),
-    .out (net199)
-  );
-  and_cell gate174 (
-    .a (net165),
-    .b (net161),
-    .out (net200)
-  );
-  and_cell gate175 (
-    .a (net155),
-    .b (net157),
-    .out (net201)
-  );
-  and_cell gate176 (
-    .a (net199),
-    .b (net159),
-    .out (net202)
-  );
-  and_cell gate177 (
-    .a (net200),
-    .b (net162),
-    .out (net203)
-  );
-  and_cell gate178 (
-    .a (net201),
-    .b (net162),
-    .out (net204)
-  );
-  and_cell gate179 (
-    .a (net164),
-    .b (net163),
-    .out (net205)
-  );
-  and_cell gate180 (
-    .a (net164),
-    .b (net161),
-    .out (net206)
-  );
-  and_cell gate181 (
-    .a (net205),
-    .b (net162),
-    .out (net207)
-  );
-  and_cell gate182 (
-    .a (net206),
-    .b (net159),
-    .out (net208)
-  );
-  or_cell gate183 (
-    .a (net204),
-    .b (net203),
-    .out (net209)
-  );
-  or_cell gate184 (
-    .a (net202),
-    .b (net208),
-    .out (net210)
-  );
-  or_cell gate185 (
-    .a (net209),
-    .b (net210),
-    .out (net211)
-  );
-  or_cell gate186 (
-    .a (net211),
-    .b (net207),
-    .out (net212)
-  );
-  and_cell gate187 (
-    .a (net155),
-    .b (net161),
-    .out (net213)
-  );
-  and_cell gate188 (
-    .a (net155),
-    .b (net157),
-    .out (net214)
-  );
-  and_cell gate189 (
-    .a (net161),
-    .b (net162),
-    .out (net215)
-  );
-  or_cell gate190 (
-    .a (net214),
-    .b (net213),
-    .out (net216)
-  );
-  or_cell gate191 (
-    .a (net176),
-    .b (net215),
-    .out (net217)
-  );
-  or_cell gate192 (
-    .a (net216),
-    .b (net217),
-    .out (net218)
-  );
-  and_cell gate193 (
-    .a (net155),
-    .b (net164),
-    .out (net219)
-  );
-  and_cell gate194 (
-    .a (net192),
-    .b (net157),
-    .out (net220)
-  );
-  and_cell gate195 (
-    .a (net157),
-    .b (net162),
-    .out (net221)
-  );
-  or_cell gate196 (
-    .a (net219),
-    .b (net213),
-    .out (net222)
-  );
-  or_cell gate197 (
-    .a (net220),
-    .b (net221),
-    .out (net223)
-  );
-  or_cell gate198 (
-    .a (net222),
-    .b (net223),
-    .out (net224)
-  );
-  or_cell gate199 (
-    .a (net224),
-    .b (net181),
-    .out (net225)
-  );
-  and_cell gate200 (
-    .a (net219),
-    .b (net226),
-    .out (net227)
-  );
-  and_cell gate201 (
-    .a (net155),
-    .b (net159),
-    .out (net228)
-  );
-  or_cell gate202 (
-    .a (net219),
-    .b (net220),
-    .out (net229)
-  );
-  or_cell gate203 (
-    .a (net228),
-    .b (net230),
-    .out (net231)
-  );
-  and_cell gate204 (
-    .a (net164),
-    .b (net161),
-    .out (net230)
-  );
-  or_cell gate205 (
-    .a (net229),
-    .b (net231),
-    .out (net232)
-  );
-  or_cell gate206 (
-    .a (net215),
-    .b (net232),
-    .out (net233)
-  );
-  and_cell gate207 (
-    .a (net161),
-    .b (net159),
-    .out (net226)
-  );
-  mux_cell mux5 (
-    .a (net11),
-    .b (net84),
-    .sel (net235),
-    .out (net236)
-  );
-  or_cell gate208 (
-    .a (net237),
-    .b (net238),
-    .out (net158)
-  );
-  not_cell gate209 (
-    .in (net2),
-    .out (net239)
-  );
-  and_cell gate210 (
-    .a (net2),
-    .b (net240),
-    .out (net241)
-  );
-  mux_cell mux6 (
-    .a (net36),
-    .b (net108),
-    .sel (net235),
-    .out (net242)
-  );
-  mux_cell mux7 (
-    .a (net27),
-    .b (net99),
-    .sel (net235),
-    .out (net243)
-  );
-  mux_cell mux8 (
-    .a (net17),
-    .b (net90),
-    .sel (net235),
-    .out (net240)
-  );
-  mux_cell mux9 (
-    .a (net45),
-    .b (net117),
-    .sel (net235),
-    .out (net244)
-  );
-  mux_cell mux10 (
-    .a (net72),
-    .b (net144),
-    .sel (net235),
-    .out (net245)
-  );
-  mux_cell mux11 (
-    .a (net63),
-    .b (net135),
-    .sel (net235),
-    .out (net246)
-  );
-  mux_cell mux12 (
-    .a (net54),
-    .b (net126),
-    .sel (net235),
-    .out (net247)
-  );
-  and_cell gate211 (
-    .a (net2),
-    .b (net236),
-    .out (net237)
-  );
-  and_cell gate212 (
-    .a (net2),
-    .b (net243),
-    .out (net248)
-  );
-  and_cell gate213 (
-    .a (net2),
-    .b (net242),
-    .out (net249)
-  );
-  and_cell gate214 (
-    .a (net250),
-    .b (net247),
-    .out (net251)
-  );
-  and_cell gate215 (
-    .a (net239),
-    .b (net244),
-    .out (net238)
-  );
-  and_cell gate216 (
-    .a (net252),
-    .b (net246),
-    .out (net253)
-  );
-  and_cell gate217 (
-    .a (net254),
-    .b (net245),
-    .out (net255)
-  );
-  not_cell gate218 (
-    .in (net2),
-    .out (net250)
-  );
-  not_cell gate219 (
-    .in (net2),
-    .out (net252)
-  );
-  not_cell gate220 (
-    .in (net2),
-    .out (net254)
-  );
-  or_cell gate221 (
-    .a (net249),
-    .b (net255),
-    .out (net154)
-  );
-  or_cell gate222 (
-    .a (net248),
-    .b (net253),
-    .out (net156)
-  );
-  or_cell gate223 (
-    .a (net241),
-    .b (net251),
-    .out (net160)
-  );
-  not_cell not1 (
-    .in (net3),
-    .out (net235)
-  );
-endmodule
