module FourBitFA_2 ( fa, fb, fcin, fsum, fcout );
input [4:1] fa;
input [4:1] fb;
output [4:1] fsum;
input fcin;
output fcout;
wire n8, n10, n12, n14, n16, n17, n18, n19, n20, n21, n22, n23, n24;
AOI22HD1X U1 ( .A(fb[1]), .B(fa[1]), .C(n18), .D(fcin), .Z(n19) );
OAI22B2HD1X U2 ( .C(n19), .D(n20), .AN(fb[2]), .BN(fa[2]), .Z(n22) );
NOR2HD1X U3 ( .A(n16), .B(n17), .Z(n23) );
OAI22B2HD1X U4 ( .C(n23), .D(n24), .AN(fb[4]), .BN(fa[4]), .Z(fcout) );
XNOR2HD1X U5 ( .A(n24), .B(n23), .Z(n8) );
INVHD8X U6 ( .A(n8), .Z(fsum[4]) );
XNOR2HD1X U7 ( .A(n22), .B(n21), .Z(n10) );
INVHD8X U8 ( .A(n10), .Z(fsum[3]) );
XNOR2HD1X U9 ( .A(fcin), .B(n18), .Z(n12) );
INVHD8X U10 ( .A(n12), .Z(fsum[1]) );
XNOR2HD1X U11 ( .A(n20), .B(n19), .Z(n14) );
INVHD8X U12 ( .A(n14), .Z(fsum[2]) );
AND2HD1X U13 ( .A(fb[3]), .B(fa[3]), .Z(n16) );
AND2HD1X U14 ( .A(n22), .B(n21), .Z(n17) );
XOR2HD1X U15 ( .A(fa[1]), .B(fb[1]), .Z(n18) );
XOR2HD1X U16 ( .A(fa[3]), .B(fb[3]), .Z(n21) );
XNOR2HD1X U17 ( .A(fa[2]), .B(fb[2]), .Z(n20) );
XNOR2HD1X U18 ( .A(fa[4]), .B(fb[4]), .Z(n24) );
endmodule
module FourBitFA_1 ( fa, fb, fcin, fsum, fcout );
input [4:1] fa;
input [4:1] fb;
output [4:1] fsum;
input fcin;
output fcout;
wire n8, n10, n12, n14, n16, n17, n18, n19, n20, n21, n22;
OAI22B2HD1X U1 ( .C(n21), .D(n22), .AN(fb[4]), .BN(fa[4]), .Z(fcout) );
AOI22HD1X U2 ( .A(fb[1]), .B(fa[1]), .C(n16), .D(fcin), .Z(n17) );
OAI22B2HD1X U3 ( .C(n17), .D(n18), .AN(fb[2]), .BN(fa[2]), .Z(n20) );
XNOR2HD1X U4 ( .A(n22), .B(n21), .Z(n8) );
INVHD8X U5 ( .A(n8), .Z(fsum[4]) );
XNOR2HD1X U6 ( .A(fcin), .B(n16), .Z(n10) );
INVHD8X U7 ( .A(n10), .Z(fsum[1]) );
XNOR2HD1X U8 ( .A(n20), .B(n19), .Z(n12) );
INVHD8X U9 ( .A(n12), .Z(fsum[3]) );
XNOR2HD1X U10 ( .A(n18), .B(n17), .Z(n14) );
INVHD8X U11 ( .A(n14), .Z(fsum[2]) );
AOI22HD2X U12 ( .A(fb[3]), .B(fa[3]), .C(n20), .D(n19), .Z(n21) );
XOR2HD1X U13 ( .A(fa[1]), .B(fb[1]), .Z(n16) );
XOR2HD1X U14 ( .A(fa[3]), .B(fb[3]), .Z(n19) );
XNOR2HD1X U15 ( .A(fa[2]), .B(fb[2]), .Z(n18) );
XNOR2HD1X U16 ( .A(fa[4]), .B(fb[4]), .Z(n22) );
endmodule
module FourBitFA_0 ( fa, fb, fcin, fsum, fcout );
input [4:1] fa;
input [4:1] fb;
output [4:1] fsum;
input fcin;
output fcout;
wire n28, n29, n30, n8, n9, n11, n14, n15, n16, n17, n18, n21, n22, n23,
n24, n25, n26, n27;
AOI22HD1X U1 ( .A(fb[1]), .B(fa[1]), .C(n21), .D(fcin), .Z(n22) );
NOR2HD1X U2 ( .A(n17), .B(n22), .Z(n16) );
XNOR2HD1X U3 ( .A(n27), .B(n26), .Z(n8) );
INVHDPX U4 ( .A(n30), .Z(n9) );
INVHD8X U5 ( .A(n9), .Z(fcout) );
OAI22B2HD1X U6 ( .C(n26), .D(n27), .AN(fb[4]), .BN(fa[4]), .Z(n30) );
XNOR2HD1X U7 ( .A(fcin), .B(n21), .Z(n11) );
INVHD8X U8 ( .A(n11), .Z(fsum[1]) );
BUFHD8X U9 ( .A(n29), .Z(fsum[2]) );
NAND2B1HD1X U10 ( .AN(n16), .B(n18), .Z(n29) );
NAND2HD1X U11 ( .A(n17), .B(n22), .Z(n18) );
NAND2HDLX U12 ( .A(fb[3]), .B(fa[3]), .Z(n14) );
NAND2HD1X U13 ( .A(n25), .B(n24), .Z(n15) );
AND2HD1X U14 ( .A(n14), .B(n15), .Z(n26) );
XOR2HDLX U15 ( .A(fa[3]), .B(fb[3]), .Z(n24) );
INVHD8X U16 ( .A(n8), .Z(fsum[4]) );
INVHDPX U17 ( .A(n23), .Z(n17) );
BUFHD8X U18 ( .A(n28), .Z(fsum[3]) );
XOR2HDLX U19 ( .A(n25), .B(n24), .Z(n28) );
OAI22B2HD1X U20 ( .C(n22), .D(n23), .AN(fb[2]), .BN(fa[2]), .Z(n25) );
XOR2HD1X U21 ( .A(fa[1]), .B(fb[1]), .Z(n21) );
XNOR2HD1X U22 ( .A(fa[2]), .B(fb[2]), .Z(n23) );
XNOR2HD1X U23 ( .A(fa[4]), .B(fb[4]), .Z(n27) );
endmodule
module FourBitFA_3 ( fa, fb, fcin, fsum, fcout );
input [4:1] fa;
input [4:1] fb;
output [4:1] fsum;
input fcin;
output fcout;
wire n1, n2, n3, n4, n5, n6, n7, n8, n10, n12, n14, n16, n17;
AOI22HD1X U1 ( .A(fb[1]), .B(fa[1]), .C(n7), .D(fcin), .Z(n6) );
OAI22B2HD1X U2 ( .C(n6), .D(n5), .AN(fb[2]), .BN(fa[2]), .Z(n3) );
NOR2HD1X U3 ( .A(n16), .B(n17), .Z(n2) );
AND2HD1X U4 ( .A(n3), .B(n4), .Z(n17) );
OAI22B2HD1X U5 ( .C(n2), .D(n1), .AN(fb[4]), .BN(fa[4]), .Z(fcout) );
XNOR2HD1X U6 ( .A(n1), .B(n2), .Z(n8) );
INVHD8X U7 ( .A(n8), .Z(fsum[4]) );
XNOR2HD1X U8 ( .A(n3), .B(n4), .Z(n10) );
INVHD8X U9 ( .A(n10), .Z(fsum[3]) );
XNOR2HD1X U10 ( .A(fcin), .B(n7), .Z(n12) );
INVHD8X U11 ( .A(n12), .Z(fsum[1]) );
XNOR2HD1X U12 ( .A(n5), .B(n6), .Z(n14) );
INVHD8X U13 ( .A(n14), .Z(fsum[2]) );
AND2HD1X U14 ( .A(fb[3]), .B(fa[3]), .Z(n16) );
XOR2HD1X U15 ( .A(fa[1]), .B(fb[1]), .Z(n7) );
XOR2HD1X U16 ( .A(fa[3]), .B(fb[3]), .Z(n4) );
XNOR2HD1X U17 ( .A(fa[2]), .B(fb[2]), .Z(n5) );
XNOR2HD1X U18 ( .A(fa[4]), .B(fb[4]), .Z(n1) );
endmodule
module SixteenBitALU ( a, b, cin, contr1, contr2, sum, cout );
input [16:1] a;
input [16:1] b;
output [16:1] sum;
input cin, contr1, contr2;
output cout;
wire n29, n30, n31, n32, n33, n34, n35, n36, n37, n38, n39, n40, n41, n42,
n43, n44, n45, n46, n47, n48, n49;
wire [16:1] y;
wire [3:1] temp;
FourBitFA_3 f1 ( .fa(a[4:1]), .fb(y[4:1]), .fcin(cin), .fsum(sum[4:1]),
.fcout(temp[1]) );
FourBitFA_2 f2 ( .fa(a[8:5]), .fb(y[8:5]), .fcin(temp[1]), .fsum(sum[8:5]),
.fcout(temp[2]) );
FourBitFA_1 f3 ( .fa(a[12:9]), .fb(y[12:9]), .fcin(temp[2]), .fsum(sum[12:9]), .fcout(temp[3]) );
FourBitFA_0 f4 ( .fa(a[16:13]), .fb(y[16:13]), .fcin(temp[3]), .fsum(
sum[16:13]), .fcout(cout) );
INVCLKHD8X U38 ( .A(contr2), .Z(n45) );
BUFHD4X U39 ( .A(n46), .Z(n48) );
NAND2B1HD1X U40 ( .AN(contr1), .B(n45), .Z(n46) );
OAI221HD1X U41 ( .A(b[1]), .B(n45), .C(n48), .D(n44), .E(n47), .Z(y[1]) );
NAND2HD1X U42 ( .A(contr2), .B(contr1), .Z(n47) );
BUFHD4X U43 ( .A(n47), .Z(n49) );
OAI221HD1X U44 ( .A(b[3]), .B(n45), .C(n48), .D(n42), .E(n49), .Z(y[3]) );
OAI221HD1X U45 ( .A(b[7]), .B(n45), .C(n48), .D(n38), .E(n49), .Z(y[7]) );
OAI221HDLX U46 ( .A(b[15]), .B(n45), .C(n48), .D(n30), .E(n49), .Z(y[15]) );
INVHDPX U47 ( .A(b[1]), .Z(n44) );
OAI221HD1X U48 ( .A(b[2]), .B(n45), .C(n48), .D(n43), .E(n49), .Z(y[2]) );
INVHDPX U49 ( .A(b[2]), .Z(n43) );
OAI221HD1X U50 ( .A(b[4]), .B(n45), .C(n48), .D(n41), .E(n49), .Z(y[4]) );
INVHDPX U51 ( .A(b[4]), .Z(n41) );
OAI221HD1X U52 ( .A(b[6]), .B(n45), .C(n48), .D(n39), .E(n49), .Z(y[6]) );
INVHDPX U53 ( .A(b[6]), .Z(n39) );
OAI221HD1X U54 ( .A(b[8]), .B(n45), .C(n48), .D(n37), .E(n49), .Z(y[8]) );
INVHDPX U55 ( .A(b[8]), .Z(n37) );
INVHDPX U56 ( .A(b[3]), .Z(n42) );
OAI221HD1X U57 ( .A(b[5]), .B(n45), .C(n48), .D(n40), .E(n49), .Z(y[5]) );
INVHDPX U58 ( .A(b[5]), .Z(n40) );
INVHDPX U59 ( .A(b[7]), .Z(n38) );
OAI221HD1X U60 ( .A(b[10]), .B(n45), .C(n48), .D(n35), .E(n49), .Z(y[10]) );
INVHDPX U61 ( .A(b[10]), .Z(n35) );
OAI221HD1X U62 ( .A(b[12]), .B(n45), .C(n48), .D(n33), .E(n49), .Z(y[12]) );
INVHDPX U63 ( .A(b[12]), .Z(n33) );
OAI221HD1X U64 ( .A(b[14]), .B(n45), .C(n48), .D(n31), .E(n49), .Z(y[14]) );
INVHDPX U65 ( .A(b[14]), .Z(n31) );
OAI221HD1X U66 ( .A(b[16]), .B(n45), .C(n48), .D(n29), .E(n49), .Z(y[16]) );
INVHDPX U67 ( .A(b[16]), .Z(n29) );
OAI221HD1X U68 ( .A(b[9]), .B(n45), .C(n48), .D(n36), .E(n49), .Z(y[9]) );
INVHDPX U69 ( .A(b[9]), .Z(n36) );
OAI221HD1X U70 ( .A(b[11]), .B(n45), .C(n48), .D(n34), .E(n49), .Z(y[11]) );
INVHDPX U71 ( .A(b[11]), .Z(n34) );
OAI221HD1X U72 ( .A(b[13]), .B(n45), .C(n48), .D(n32), .E(n49), .Z(y[13]) );
INVHDPX U73 ( .A(b[13]), .Z(n32) );
INVHDPX U74 ( .A(b[15]), .Z(n30) );
endmodule