restorre fast
diff --git a/verilog/rtl/fast/sky130_fd_sc_hd_fast.v b/verilog/rtl/fast/sky130_fd_sc_hd_fast.v
new file mode 100644
index 0000000..dec340a
--- /dev/null
+++ b/verilog/rtl/fast/sky130_fd_sc_hd_fast.v
@@ -0,0 +1,1225 @@
+// sky130_fd_sc_hd_fast.v
+// These are simplistic, fast simulation models of the standard library cells
+// required by TinyTapeout. The motiviation for having these is that Verilator
+// cannot digest the 'primitive' definitions provided in the PDK, as it does not
+// support the 'table' construct. Therefore these models stand-in for the PDK
+// models testbench simulation.
+
+module sky130_fd_sc_hd__udp_mux_2to1 (
+    output wire X ,
+    input  wire A0,
+    input  wire A1,
+    input  wire S
+);
+
+    assign X = S ? A1 : A0;
+
+endmodule
+
+module sky130_fd_sc_hd__udp_mux_4to2 (
+    output wire X ,
+    input  wire A0,
+    input  wire A1,
+    input  wire A2,
+    input  wire A3,
+    input  wire S0,
+    input  wire S1
+);
+
+    wire [3:0] all_inputs;
+    wire [1:0] all_select;
+
+    assign all_inputs = {A3, A2, A1, A0};
+    assign all_select = {S1, S0};
+
+    assign X = all_inputs[all_select];
+
+endmodule
+
+module sky130_fd_sc_hd__udp_mux_2to1_N (
+    output wire Y ,
+    input  wire A0,
+    input  wire A1,
+    input  wire S
+);
+
+    assign Y = ~(S ? A1 : A0);
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dlatch$lP_pp$PG$N (
+    output reg  Q       ,
+    input  wire D       ,
+    input  wire GATE    ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(*) begin
+        if (GATE) Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dlatch$PR_pp$PG$N (
+    output reg  Q       ,
+    input  wire D       ,
+    input  wire GATE    ,
+    input  wire RESET   ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(*) begin
+        if (RESET) begin
+            Q <= 'd0;
+        end if (GATE) begin
+            Q <= D;
+        end
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dlatch$P_pp$PG$N (
+    output reg  Q       ,
+    input  wire D       ,
+    input  wire GATE    ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(*) begin
+        if (GATE) Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dff$P_pp$PG$N (
+    output reg  Q       ,
+    input  wire D       ,
+    input  wire CLK     ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(posedge CLK) begin
+        Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dff$PS_pp$PG$N (
+    output reg  Q       ,
+    input  wire D       ,
+    input  wire CLK     ,
+    input  wire SET    ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(posedge CLK, posedge SET) begin
+        if (SET) begin
+            Q <= 1'b1;
+        end else begin
+            Q <= D;
+        end
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dff$PR_pp$PG$N (
+    output reg  Q       ,
+    input  wire D       ,
+    input  wire CLK     ,
+    input  wire RESET   ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(posedge CLK, posedge RESET) begin
+        if (RESET) begin
+            Q <= 1'b0;
+        end else begin
+            Q <= D;
+        end
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_dff$NSR_pp$PG$N (
+    output reg  Q       ,
+    input  wire SET     ,
+    input  wire RESET   ,
+    input  wire CLK_N   ,
+    input  wire D       ,
+    input  wire NOTIFIER,
+    input  wire VPWR    ,
+    input  wire VGND
+);
+
+    always @(negedge CLK_N, posedge RESET, posedge SET) begin
+        if (RESET) begin
+            Q <= 1'b0;
+        end else if (SET) begin
+            Q <= 1'b1;
+        end else begin
+            Q <= D;
+        end
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, NOTIFIER, VPWR, VGND };
+
+endmodule
+
+module sky130_fd_sc_hd__udp_pwrgood_pp$G (
+    output wire UDP_OUT,
+    input  wire UDP_IN ,
+    input  wire VGND
+);
+
+    assign UDP_OUT = UDP_IN && !VGND;
+
+endmodule
+
+module sky130_fd_sc_hd__udp_pwrgood_pp$P (
+    output wire UDP_OUT,
+    input  wire UDP_IN ,
+    input  wire VPWR
+);
+
+    assign UDP_OUT = UDP_IN && VPWR;
+
+endmodule
+
+module sky130_fd_sc_hd__udp_pwrgood_pp$PG (
+    output wire UDP_OUT,
+    input  wire UDP_IN ,
+    input  wire VPWR   ,
+    input  wire VGND
+);
+
+    assign UDP_OUT = UDP_IN && VPWR && !VGND;
+
+endmodule
+
+module sky130_fd_sc_hd__udp_pwrgood$l_pp$PG (
+    output wire UDP_OUT,
+    input  wire UDP_IN ,
+    input  wire VPWR   ,
+    input  wire VGND
+);
+
+    assign UDP_OUT = UDP_IN && VPWR && !VGND;
+
+endmodule
+
+module sky130_fd_sc_hd__udp_pwrgood$l_pp$PG$S (
+    output wire UDP_OUT,
+    input  wire UDP_IN ,
+    input  wire VPWR   ,
+    input  wire VGND   ,
+    input  wire SLEEP
+);
+
+    assign UDP_OUT = UDP_IN && VPWR && !VGND && !SLEEP;
+
+endmodule
+
+
+module sky130_fd_sc_hd__a211o_1(
+    output wire X   ,
+    input  wire A1  ,
+    input  wire A2  ,
+    input  wire B1  ,
+    input  wire C1  ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = ((A1 & A2) | B1 | C1);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__a31o_1(
+    output wire X   ,
+    input  wire A1  ,
+    input  wire A2  ,
+    input  wire A3  ,
+    input  wire B1  ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = ((A1 & A2 & A3) | B1);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and2_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A & B;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and2_4(
+    output wire X   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A & B;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and2b_1(
+    output wire X   ,
+    input  wire A_N ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = (~A_N) & B;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and2b_2(
+    output wire X   ,
+    input  wire A_N ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = (~A_N) & B;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and3b_1(
+    output wire X   ,
+    input  wire A_N ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = (~A_N) & B & C;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and3b_4(
+    output wire X   ,
+    input  wire A_N ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = (~A_N) & B & C;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and4_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A & B & C & D;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and4b_1(
+    output wire X   ,
+    input  wire A_N ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = (~A_N) & B & C & D;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__and4bb_1(
+    output wire X   ,
+    input  wire A_N ,
+    input  wire B_N ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = (~A_N) & (~B_N) & C & D;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__buf_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__buf_2(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__buf_4(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__clkbuf_2(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__clkbuf_4(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__clkbuf_8(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__clkdlybuf4s25_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__clkdlybuf4s50_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__clkinv_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dfrtn_1(
+    output reg  Q      ,
+    input  wire CLK_N  ,
+    input  wire D      ,
+    input  wire RESET_B,
+    input  wire VPWR   ,
+    input  wire VGND   ,
+    input  wire VPB    ,
+    input  wire VNB
+);
+
+    wire CLK   = ~CLK_N;
+    wire RESET = ~RESET_B;
+
+    always @(posedge CLK, posedge RESET) begin
+        if (RESET) Q <= 'd0;
+        else       Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dfrtp_1(
+    output reg  Q      ,
+    input  wire CLK    ,
+    input  wire D      ,
+    input  wire RESET_B,
+    input  wire VPWR   ,
+    input  wire VGND   ,
+    input  wire VPB    ,
+    input  wire VNB
+);
+
+    wire RESET = ~RESET_B;
+
+    always @(posedge CLK, posedge RESET) begin
+        if (RESET) Q <= 'd0;
+        else       Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dfsbp_1(
+    output reg  Q    ,
+    output wire Q_N  ,
+    input  wire CLK  ,
+    input  wire D    ,
+    input  wire SET_B,
+    input  wire VPWR ,
+    input  wire VGND ,
+    input  wire VPB  ,
+    input  wire VNB
+);
+
+    wire SET = ~SET_B;
+
+    always @(posedge CLK, posedge SET) begin
+        if (SET) Q <= 'd1;
+        else     Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+assign Q_N = ~Q;
+
+endmodule
+
+module sky130_fd_sc_hd__dfxtp_1(
+    output reg  Q   ,
+    input  wire CLK ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    always @(posedge CLK) begin
+        Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dfxtp_4(
+    output reg  Q   ,
+    input  wire CLK ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    always @(posedge CLK) begin
+        Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dlclkp_1(
+    output wire GCLK,
+    input  wire GATE,
+    input  wire CLK ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    reg gate_q;
+
+    always @(negedge CLK) gate_q <= GATE;
+
+    assign GCLK = gate_q & CLK;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dlxtn_1(
+    output reg  Q     ,
+    input  wire D     ,
+    input  wire GATE_N,
+    input  wire VPWR  ,
+    input  wire VGND  ,
+    input  wire VPB   ,
+    input  wire VNB
+);
+
+    always @(GATE_N, D) begin
+        if (~GATE_N) Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dlxtn_4(
+    output reg  Q     ,
+    input  wire D     ,
+    input  wire GATE_N,
+    input  wire VPWR  ,
+    input  wire VGND  ,
+    input  wire VPB   ,
+    input  wire VNB
+);
+
+    always @(GATE_N, D) begin
+        if (~GATE_N) Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__dlxtp_1(
+    output reg  Q   ,
+    input  wire D   ,
+    input  wire GATE,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    always @(GATE, D) begin
+        if (GATE) Q <= D;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__ebufn_1(
+    output wire Z   ,
+    input  wire A   ,
+    input  wire TE_B,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Z = (~TE_B) ? A : 1'dZ;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__einvp_2(
+    output wire Z   ,
+    input  wire A   ,
+    input  wire TE  ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Z = TE ? (~A) : 1'dZ;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__fa_1(
+    output wire COUT,
+    output wire SUM ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire CIN ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign { COUT, SUM } = (A + B + CIN);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__fa_2(
+    output wire COUT,
+    output wire SUM ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire CIN ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign { COUT, SUM } = (A + B + CIN);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__inv_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__inv_4(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~A;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__mux2_1(
+    output wire X   ,
+    input  wire A0  ,
+    input  wire A1  ,
+    input  wire S   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = S ? A1 : A0;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__mux2i_1(
+    output wire Y   ,
+    input  wire A0  ,
+    input  wire A1  ,
+    input  wire S   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(S ? A1 : A0);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__mux4_1(
+    output wire X   ,
+    input  wire A0  ,
+    input  wire A1  ,
+    input  wire A2  ,
+    input  wire A3  ,
+    input  wire S0  ,
+    input  wire S1  ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    wire [3:0] choices = { A3, A2, A1, A0 };
+    wire [1:0] selects = { S1, S0 };
+
+    assign X = choices[selects];
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nand2_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A & B);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nand2_2(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A & B);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nand3_2(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A & B & C);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nand4_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A & B & C & D);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nand4b_1(
+    output wire Y   ,
+    input  wire A_N ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~((~A_N) & B & C & D);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nand4bb_1(
+    output wire Y   ,
+    input  wire A_N ,
+    input  wire B_N ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~((~A_N) & (~B_N) & C & D);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nor2_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A | B);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nor4_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A | B | C | D);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__nor4b_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D_N ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = ~(A | B | C | (~D_N));
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__o21a_1(
+    output wire X   ,
+    input  wire A1  ,
+    input  wire A2  ,
+    input  wire B1  ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = ((A1 | A2) & B1);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__or4_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A | B | C | D;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__or4b_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire C   ,
+    input  wire D_N ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign X = A | B | C | (~D_N);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__sdfxtp_1(
+    output reg  Q   ,
+    input  wire CLK ,
+    input  wire D   ,
+    input  wire SCD ,
+    input  wire SCE ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    wire choice;
+    assign choice = SCE ? SCD : D;
+
+    always @(posedge CLK) begin
+        Q <= choice;
+    end
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__xnor2_1(
+    output wire Y   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+
+    assign Y = !(A ^ B);
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule
+
+module sky130_fd_sc_hd__xor2_1(
+    output wire X   ,
+    input  wire A   ,
+    input  wire B   ,
+    input  wire VPWR,
+    input  wire VGND,
+    input  wire VPB ,
+    input  wire VNB
+);
+    assign X = A ^ B;
+
+    wire _unused;
+    assign _unused = &{ 1'b0, VPWR, VGND, VPB, VNB };
+
+endmodule