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