
module Intro_Top ( X, Y, Z, A, B, C, D, ScanOut, ScanMode, ScanIn, ScanClr, 
        ScanClk );
  input A, B, C, D, ScanMode, ScanIn, ScanClr, ScanClk;
  output X, Y, Z, ScanOut;
  wire   qn, ab, bc, FFA_to_A, FFB_to_B, FFC_to_C, q, FFD_to_D, X_to_FFX,
         Y_to_FFY, fromQ_FFX, fromQ_FFY, fromQ_FFZ, fromQ_FFA, fromQ_FFB,
         fromQ_FFC, fromQ_FFD, n1, n3, n4, n5, n6, n8, n10, n12, n13, n14, n15,
         n16, n17, n18, n19, n20, n21, n22;

  AndOr InputCombo ( .X(ab), .Y(bc), .A(FFA_to_A), .B(FFB_to_B), .C(FFC_to_C)
         );
  SR SRLatch ( .Q(q), .Qn(qn), .S(bc), .R(FFD_to_D) );
  XorNor OutputCombo ( .X(X_to_FFX), .Y(Y_to_FFY), .A(ab), .B(q), .C(qn) );
  FFC_0 FF_X ( .Q(fromQ_FFX), .D(X_to_FFX), .Clk(n5), .Clr(n21) );
  FFC_6 FF_Y ( .Q(fromQ_FFY), .D(Y_to_FFY), .Clk(n5), .Clr(n21) );
  FFC_5 FF_Z ( .Q(fromQ_FFZ), .Qn(n3), .D(n1), .Clk(n5), .Clr(n21) );
  FFC_4 FF_A ( .Q(fromQ_FFA), .D(A), .Clk(n5), .Clr(n21) );
  FFC_3 FF_B ( .Q(fromQ_FFB), .D(B), .Clk(n5), .Clr(n21) );
  FFC_2 FF_C ( .Q(fromQ_FFC), .D(C), .Clk(n5), .Clr(n21) );
  FFC_1 FF_D ( .Q(fromQ_FFD), .D(D), .Clk(n5), .Clr(n21) );
  AOI22D0 U10 ( .A1(fromQ_FFY), .A2(n22), .B1(Y_to_FFY), .B2(n19), .ZN(n17) );
  AOI22D0 U11 ( .A1(fromQ_FFX), .A2(n22), .B1(X_to_FFX), .B2(n19), .ZN(n18) );
  BUFFD1 U12 ( .I(ScanMode), .Z(n22) );
  INVD0 U13 ( .I(ScanClk), .ZN(n4) );
  INVD0 U14 ( .I(n4), .ZN(n5) );
  CKBD0 U15 ( .CLK(n12), .C(n6) );
  CKND16 U16 ( .CLK(n6), .CN(X) );
  CKBD0 U17 ( .CLK(n13), .C(n8) );
  CKND16 U18 ( .CLK(n8), .CN(Y) );
  CKBD0 U19 ( .CLK(n14), .C(n10) );
  CKND16 U20 ( .CLK(n10), .CN(Z) );
  CKBD0 U21 ( .CLK(n18), .C(n12) );
  CKBD0 U22 ( .CLK(n17), .C(n13) );
  CKBD0 U23 ( .CLK(n20), .C(n14) );
  AO22D0 U24 ( .A1(fromQ_FFD), .A2(n22), .B1(n19), .B2(D), .Z(FFD_to_D) );
  CKND2D0 U25 ( .A1(fromQ_FFB), .A2(n22), .ZN(n15) );
  CKND2D0 U26 ( .A1(n19), .A2(B), .ZN(n16) );
  ND2D1 U27 ( .A1(n15), .A2(n16), .ZN(FFB_to_B) );
  INVD0 U28 ( .I(qn), .ZN(n1) );
  INVD1 U29 ( .I(n22), .ZN(n19) );
  AO22D0 U30 ( .A1(fromQ_FFA), .A2(n22), .B1(A), .B2(n19), .Z(FFA_to_A) );
  AO22D0 U31 ( .A1(fromQ_FFC), .A2(n22), .B1(n19), .B2(C), .Z(FFC_to_C) );
  BUFFD1 U32 ( .I(ScanClr), .Z(n21) );
  OA22D0 U33 ( .A1(qn), .A2(n22), .B1(n3), .B2(n19), .Z(n20) );
endmodule


module FFC_6 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n3;

  INVD1 U3 ( .I(Clr), .ZN(n3) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n3), .Q(Q), .QN(Qn) );
endmodule


module FFC_5 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n3;

  INVD1 U3 ( .I(Clr), .ZN(n3) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n3), .Q(Q), .QN(Qn) );
endmodule


module FFC_4 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n3;

  INVD1 U3 ( .I(Clr), .ZN(n3) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n3), .Q(Q), .QN(Qn) );
endmodule


module FFC_3 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n3;

  INVD1 U3 ( .I(Clr), .ZN(n3) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n3), .Q(Q), .QN(Qn) );
endmodule


module FFC_2 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n3;

  INVD1 U3 ( .I(Clr), .ZN(n3) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n3), .Q(Q), .QN(Qn) );
endmodule


module FFC_1 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n3;

  INVD1 U3 ( .I(Clr), .ZN(n3) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n3), .Q(Q), .QN(Qn) );
endmodule


module FFC_0 ( Q, Qn, D, Clk, Clr );
  input D, Clk, Clr;
  output Q, Qn;
  wire   n1;

  INVD1 U3 ( .I(Clr), .ZN(n1) );
  DFCND1 QReg_reg ( .D(D), .CP(Clk), .CDN(n1), .Q(Q), .QN(Qn) );
endmodule


module XorNor ( X, Y, A, B, C );
  input A, B, C;
  output X, Y;
  wire   n1, n2;

  XOR2D1 U1 ( .A1(B), .A2(A), .Z(X) );
  XNR2D0 U2 ( .A1(B), .A2(A), .ZN(n2) );
  IND2D1 U3 ( .A1(C), .B1(n2), .ZN(n1) );
  INVD1 U4 ( .I(n1), .ZN(Y) );
endmodule


module SR ( Q, Qn, S, R );
  input S, R;
  output Q, Qn;


  CKND2D2 U2 ( .A1(Q), .A2(R), .ZN(Qn) );
  ND2D1 U1 ( .A1(S), .A2(Qn), .ZN(Q) );
endmodule


module AndOr ( X, Y, A, B, C );
  input A, B, C;
  output X, Y;


  OR2D1 U1 ( .A1(C), .A2(B), .Z(Y) );
  AN2XD1 U2 ( .A1(A), .A2(B), .Z(X) );
endmodule

