`timescale 1ns/10ps
module AndOr ( X, Y, A, B, C );
  input A, B, C;
  output X, Y;


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


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


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


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

  INVD10 U1 ( .I(n5), .ZN(Y) );
  OR2D2 U2 ( .A1(n7), .A2(C), .Z(n5) );
  XOR2D1 U3 ( .A1(B), .A2(A), .Z(n7) );
  CKND2D0 U4 ( .A1(B), .A2(n2), .ZN(n3) );
  CKND2D0 U5 ( .A1(n1), .A2(A), .ZN(n4) );
  ND2D1 U6 ( .A1(n3), .A2(n4), .ZN(X) );
  INVD0 U7 ( .I(B), .ZN(n1) );
  INVD0 U8 ( .I(A), .ZN(n2) );
endmodule


module Intro_Top ( X, Y, Z, A, B, C, D );
  input A, B, C, D;
  output X, Y, Z;
  wire   n4, qn, ab, bc, q;

  AndOr InputCombo01 ( .X(ab), .Y(bc), .A(A), .B(B), .C(C) );
  SR SRLatch01 ( .Q(q), .Qn(qn), .S(bc), .R(D) );
  XorNor OutputCombo01 ( .X(n4), .Y(Y), .A(ab), .B(q), .C(qn) );
  BUFFD8 U2 ( .I(n4), .Z(X) );
  INVD6 U3 ( .I(qn), .ZN(Z) );
endmodule

