| // SPDX-FileCopyrightText: 2020 Efabless Corporation | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //      http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 |  | 
 | `default_nettype none | 
 | /* | 
 |     Building blocks for DFF based RAM compiler for SKY130A  | 
 |     BYTE        :   8 memory cells used as a building block for WORD module | 
 |     WORD        :   32-bit memory word with select and byte-level WE | 
 |     DEC6x64     :   2x4 Binary Decoder | 
 |     DEC6x64     :   6x64 Binary decoder | 
 |     MUX4x1_32   :   32-bit 4x1 MUX | 
 |     MUX2x1_32   :   32-bit 2x1 MUX | 
 |     SRAM64x32   :   Tri-state buffers based 64x32 DFF RAM  | 
 |     DFFRAM_COL4 :   A single column of 4 SRAM64x32 blocks using 4x1 multiplexors | 
 | */ | 
 | /* | 
 |     Author: Mohamed Shalan (mshalan@aucegypt.edu) | 
 | */ | 
 |  | 
 | module BYTE ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input CLK, | 
 |     input WE, | 
 |     input SEL, | 
 |     input [7:0] Di, | 
 |     output [7:0] Do | 
 | ); | 
 |  | 
 |     wire [7:0]  q_wire; | 
 |     wire        we_wire; | 
 |     wire        SEL_B; | 
 |     wire        GCLK; | 
 |  | 
 |     sky130_fd_sc_hd__inv_1 INV( | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .Y(SEL_B), | 
 |         .A(SEL) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__and2_1 CGAND(  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .A(SEL), | 
 |         .B(WE), | 
 |         .X(we_wire) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__dlclkp_1 CG(  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .CLK(CLK), | 
 |         .GCLK(GCLK), | 
 |         .GATE(we_wire)  | 
 |     ); | 
 |  | 
 |     generate  | 
 |         genvar i; | 
 |         for(i=0; i<8; i=i+1) begin : BIT | 
 |             sky130_fd_sc_hd__dfxtp_1 FF ( | 
 |             `ifdef USE_POWER_PINS | 
 |                 .VPWR(VPWR), | 
 |                 .VGND(VGND), | 
 |                 .VPB(VPWR), | 
 |                 .VNB(VGND), | 
 |             `endif  | 
 |                 .D(Di[i]), | 
 |                 .Q(q_wire[i]), | 
 |                 .CLK(GCLK) | 
 |             ); | 
 |  | 
 |             sky130_fd_sc_hd__ebufn_2 OBUF (  | 
 |             `ifdef USE_POWER_PINS | 
 |                 .VPWR(VPWR), | 
 |                 .VGND(VGND), | 
 |                 .VPB(VPWR), | 
 |                 .VNB(VGND), | 
 |             `endif | 
 |                 .A(q_wire[i]), | 
 |                 .Z(Do[i]), | 
 |                 .TE_B(SEL_B) | 
 |             ); | 
 |  | 
 |         end | 
 |     endgenerate  | 
 |  | 
 | endmodule | 
 |  | 
 |  | 
 | module WORD32 ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input CLK, | 
 |     input [3:0] WE, | 
 |     input SEL, | 
 |     input [31:0] Di, | 
 |     output [31:0] Do | 
 | ); | 
 |  | 
 |     BYTE B0 ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif  | 
 |         .CLK(CLK), .WE(WE[0]), .SEL(SEL), .Di(Di[7:0]), .Do(Do[7:0]) ); | 
 |      | 
 |     BYTE B1 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR),  | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK), .WE(WE[1]), .SEL(SEL), .Di(Di[15:8]), .Do(Do[15:8]) ); | 
 |      | 
 |     BYTE B2 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK), .WE(WE[2]), .SEL(SEL), .Di(Di[23:16]), .Do(Do[23:16]) ); | 
 |      | 
 |     BYTE B3 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK), .WE(WE[3]), .SEL(SEL), .Di(Di[31:24]), .Do(Do[31:24]) ); | 
 |      | 
 | endmodule  | 
 |  | 
 | module DEC1x2 ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input           EN, | 
 |     input   [0:0]   A, | 
 |     output  [1:0]   SEL | 
 | ); | 
 |     sky130_fd_sc_hd__and2b_2    AND1 (  | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[0]), | 
 |         .A_N(A), | 
 |         .B(EN) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__and2_2     AND3 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[1]), | 
 |         .A(A), | 
 |         .B(A[0]) | 
 |     ); | 
 |      | 
 | endmodule | 
 |  | 
 | module DEC2x4 ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input           EN, | 
 |     input   [1:0]   A, | 
 |     output  [3:0]   SEL | 
 | ); | 
 |     sky130_fd_sc_hd__nor3b_4    AND0 (  | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .Y(SEL[0]), | 
 |         .A(A[0]), | 
 |         .B(A[1]), | 
 |         .C_N(EN) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__and3b_4    AND1 ( | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif  | 
 |         .X(SEL[1]), | 
 |         .A_N(A[1]), | 
 |         .B(A[0]), | 
 |         .C(EN)  | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__and3b_4    AND2 (  | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[2]), | 
 |         .A_N(A[0]), | 
 |         .B(A[1]), | 
 |         .C(EN) | 
 |     ); | 
 |     | 
 |     sky130_fd_sc_hd__and3_4     AND3 (  | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[3]), | 
 |         .A(A[1]), | 
 |         .B(A[0]), | 
 |         .C(EN)  | 
 |     ); | 
 |      | 
 | endmodule | 
 |  | 
 | module DEC3x8 ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input           EN, | 
 |     input [2:0]     A, | 
 |     output [7:0]    SEL | 
 | ); | 
 |     sky130_fd_sc_hd__nor4b_2   AND0 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .Y(SEL[0]), | 
 |         .A(A[0]), | 
 |         .B(A[1]), | 
 |         .C(A[2]), | 
 |         .D_N(EN) | 
 |     ); // 000 | 
 |  | 
 |     sky130_fd_sc_hd__and4bb_2   AND1 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[1]), | 
 |         .A_N(A[2]), | 
 |         .B_N(A[1]), | 
 |         .C(A[0]), | 
 |         .D(EN) | 
 |     ); // 001 | 
 |  | 
 |     sky130_fd_sc_hd__and4bb_2   AND2 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[2]), | 
 |         .A_N(A[2]), | 
 |         .B_N(A[0]), | 
 |         .C(A[1]), | 
 |         .D(EN)  | 
 |     ); // 010 | 
 |  | 
 |     sky130_fd_sc_hd__and4b_2    AND3 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[3]), | 
 |         .A_N(A[2]), | 
 |         .B(A[1]), | 
 |         .C(A[0]), | 
 |         .D(EN)  | 
 |     );   // 011 | 
 |  | 
 |     sky130_fd_sc_hd__and4bb_2   AND4 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[4]), | 
 |         .A_N(A[0]), | 
 |         .B_N(A[1]), | 
 |         .C(A[2]), | 
 |         .D(EN)  | 
 |     ); // 100 | 
 |  | 
 |     sky130_fd_sc_hd__and4b_2    AND5 (  | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[5]), | 
 |         .A_N(A[1]), | 
 |         .B(A[0]), | 
 |         .C(A[2]), | 
 |         .D(EN) | 
 |     );   // 101 | 
 |  | 
 |     sky130_fd_sc_hd__and4b_2    AND6 (  | 
 |      `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[6]), | 
 |         .A_N(A[0]), | 
 |         .B(A[1]),  | 
 |         .C(A[2]), | 
 |         .D(EN)  | 
 |     );   // 110 | 
 |  | 
 |     sky130_fd_sc_hd__and4_2     AND7 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(SEL[7]), | 
 |         .A(A[0]), | 
 |         .B(A[1]), | 
 |         .C(A[2]),  | 
 |         .D(EN) | 
 |     ); // 111 | 
 | endmodule | 
 |  | 
 |  | 
 | module DEC6x64 ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input           EN, | 
 |     input   [5:0]   A, | 
 |     output  [63:0] SEL | 
 | ); | 
 |     wire [7:0] SEL0_w ; | 
 |     wire [2:0] A_buf; | 
 |      | 
 |     DEC3x8 DEC_L0 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .EN(EN), | 
 |         .A(A[5:3]), | 
 |         .SEL(SEL0_w) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_16 ABUF[2:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(A_buf), | 
 |         .A(A[2:0]) | 
 |     ); | 
 |  | 
 |     generate | 
 |         genvar i; | 
 |         for(i=0; i<8; i=i+1) begin : DEC_L1 | 
 |             DEC3x8 U (  | 
 |             `ifdef USE_POWER_PINS | 
 |                 .VPWR(VPWR), | 
 |                 .VGND(VGND), | 
 |             `endif | 
 |                 .EN(SEL0_w[i]), | 
 |                 .A(A_buf), | 
 |                 .SEL(SEL[7+8*i: 8*i]) | 
 |             ); | 
 |         end | 
 |     endgenerate | 
 | endmodule | 
 |  | 
 | module MUX2x1_32( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input   [31:0]      A0, A1, | 
 |     input   [0:0]       S, | 
 |     output  [31:0]      X | 
 | ); | 
 |     sky130_fd_sc_hd__mux2_1 MUX[31:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .A0(A0), | 
 |         .A1(A1), | 
 |         .S(S[0]), | 
 |         .X(X) | 
 |     ); | 
 |  | 
 | endmodule | 
 |  | 
 | module MUX4x1_32( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input   [31:0]      A0, A1, A2, A3, | 
 |     input   [1:0]       S, | 
 |     output  [31:0]      X | 
 | ); | 
 |     sky130_fd_sc_hd__mux4_1 MUX[31:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .A0(A0),  | 
 |         .A1(A1), | 
 |         .A2(A2), | 
 |         .A3(A3), | 
 |         .S0(S[0]), | 
 |         .S1(S[1]), | 
 |         .X(X) | 
 |     ); | 
 | endmodule | 
 |  | 
 | module PASS ( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input [31:0] A, | 
 |     output [31:0] X | 
 | ); | 
 |     assign X = A; | 
 | endmodule | 
 |  | 
 | module SRAM64x32( | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR, | 
 |     input VGND, | 
 | `endif | 
 |     input CLK, | 
 |     input [3:0] WE, | 
 |     input EN, | 
 |     input [31:0] Di, | 
 |     output [31:0] Do, | 
 |     input [5:0] A | 
 | ); | 
 |  | 
 |     wire [63:0]     SEL; | 
 |     wire [31:0]     Do_pre; | 
 |     wire [31:0]     Di_buf; | 
 |     wire            CLK_buf; | 
 |     wire [3:0]      WE_buf; | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_16 CLKBUF ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(CLK_buf), | 
 |         .A(CLK) | 
 |     ); | 
 |      | 
 |     sky130_fd_sc_hd__clkbuf_16 WEBUF[3:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(WE_buf), | 
 |         .A(WE) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_16 DIBUF[31:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(Di_buf), | 
 |         .A(Di) | 
 |     ); | 
 |  | 
 |     DEC6x64 DEC  (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .EN(EN), | 
 |         .A(A), | 
 |         .SEL(SEL) | 
 |     ); | 
 |  | 
 |     generate | 
 |         genvar i; | 
 |         for (i=0; i< 64; i=i+1) begin : WORD | 
 |             WORD32 W (  | 
 |             `ifdef USE_POWER_PINS | 
 |                 .VPWR(VPWR), | 
 |                 .VGND(VGND), | 
 |             `endif | 
 |                 .CLK(CLK_buf), | 
 |                 .WE(WE_buf), | 
 |                 .SEL(SEL[i]), | 
 |                 .Di(Di_buf), | 
 |                 .Do(Do_pre) | 
 |             ); | 
 |         end | 
 |     endgenerate | 
 |  | 
 |     // Ensure that the Do_pre lines are not floating when EN = 0 | 
 |     wire lo; | 
 |     wire float_buf_en; | 
 |     sky130_fd_sc_hd__clkbuf_4 FBUFENBUF(  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(float_buf_en), | 
 |         .A(EN) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__conb_1 TIE ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .LO(lo), | 
 |         .HI() | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__ebufn_4 FLOATBUF[31:0] (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .A( lo ), | 
 |         .Z(Do_pre), | 
 |         .TE_B(float_buf_en) | 
 |     ); | 
 |  | 
 |     generate  | 
 |         //genvar i; | 
 |         for(i=0; i<32; i=i+1) begin : OUT | 
 |             sky130_fd_sc_hd__dfxtp_1 FF (  | 
 |             `ifdef USE_POWER_PINS | 
 |                 .VPWR(VPWR), | 
 |                 .VGND(VGND), | 
 |                 .VPB(VPWR), | 
 |                 .VNB(VGND), | 
 |             `endif | 
 |                 .D(Do_pre[i]), | 
 |                 .Q(Do[i]), | 
 |                 .CLK(CLK) | 
 |             ); | 
 |         end | 
 |     endgenerate  | 
 |  | 
 | endmodule | 
 |  | 
 | module DFFRAM_COL4  | 
 | ( | 
 | `ifdef USE_POWER_PINS | 
 |     VPWR, | 
 |     VGND, | 
 | `endif | 
 |     CLK, | 
 |     WE, | 
 |     EN, | 
 |     Di, | 
 |     Do, | 
 |     A | 
 | ); | 
 |  | 
 |     input           CLK; | 
 |     input   [3:0]   WE; | 
 |     input           EN; | 
 |     input   [31:0]  Di; | 
 |     output  [31:0]  Do; | 
 |     input   [7:0]   A; | 
 |  | 
 | `ifdef USE_POWER_PINS | 
 |     input VPWR; | 
 |     input VGND; | 
 | `endif | 
 |  | 
 |     wire [31:0]     Di_buf; | 
 |     wire [31:0]     Do_pre; | 
 |     wire            CLK_buf; | 
 |     wire [3:0]      WE_buf; | 
 |     wire [5:3]      A_buf; | 
 |  | 
 |     wire [31:0]     Do_B_0_0; | 
 |     wire [31:0]     Do_B_0_1; | 
 |     wire [31:0]     Do_B_0_2; | 
 |     wire [31:0]     Do_B_0_3; | 
 |  | 
 |     wire [3:0]      row_sel; | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_8 CLKBUF ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(CLK_buf), | 
 |         .A(CLK) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_8 WEBUF[3:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(WE_buf), | 
 |         .A(WE) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_8 DIBUF[31:0] ( | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(Di_buf),  | 
 |         .A(Di) | 
 |     ); | 
 |  | 
 |     sky130_fd_sc_hd__clkbuf_16 ABUF[2:0] (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |         .VPB(VPWR), | 
 |         .VNB(VGND), | 
 |     `endif | 
 |         .X(A_buf), | 
 |         .A(A[5:3]) | 
 |     ); | 
 |      | 
 |     DEC2x4 DEC (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR),  | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .EN(EN), | 
 |         .A(A[7:6]), | 
 |         .SEL(row_sel) | 
 |     ); | 
 |  | 
 |     SRAM64x32 B_0_0 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK_buf), | 
 |         .WE(WE_buf), | 
 |         .EN(row_sel[0]), | 
 |         .Di(Di_buf), | 
 |         .Do(Do_B_0_0), | 
 |         .A({A_buf,A[2:0]}) | 
 |     ); | 
 |  | 
 |     SRAM64x32 B_0_1 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR),  | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK_buf), | 
 |         .WE(WE_buf), | 
 |         .EN(row_sel[1]), | 
 |         .Di(Di_buf), | 
 |         .Do(Do_B_0_1), | 
 |         .A({A_buf,A[2:0]}) | 
 |     ); | 
 |  | 
 |     SRAM64x32 B_0_2 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK_buf), | 
 |         .WE(WE_buf), | 
 |         .EN(row_sel[2]), | 
 |         .Di(Di_buf), | 
 |         .Do(Do_B_0_2),  | 
 |         .A({A_buf,A[2:0]})  | 
 |     ); | 
 |  | 
 |     SRAM64x32 B_0_3 (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .CLK(CLK_buf), | 
 |         .WE(WE_buf), | 
 |         .EN(row_sel[3]), | 
 |         .Di(Di_buf), | 
 |         .Do(Do_B_0_3), | 
 |         .A({A_buf,A[2:0]}) | 
 |     ); | 
 |  | 
 |     MUX4x1_32 MUX (  | 
 |     `ifdef USE_POWER_PINS | 
 |         .VPWR(VPWR), | 
 |         .VGND(VGND), | 
 |     `endif | 
 |         .A0(Do_B_0_0), | 
 |         .A1(Do_B_0_1), | 
 |         .A2(Do_B_0_2), | 
 |         .A3(Do_B_0_3), | 
 |         .S(A[7:6]), | 
 |         .X(Do) | 
 |     ); | 
 |  | 
 | endmodule | 
 |  |