de24d1.v 1.16 KB
module de24d1 (z0n, z1n, z2n, z3n, a0, a1, en);
   input a0, a1, en;
   output z0n, z1n, z2n, z3n;
`ifdef SYNTH
    reg z0nt, z1nt, z2nt, z3nt;
    buf b1(z3n, z3nt),
        b2(z2n, z2nt),
        b3(z1n, z1nt),
        b4(z0n, z0nt);
    always @(a0 or a1 or en)
       begin
         if (en==1)
            {z0nt, z1nt, z2nt, z3nt} = 4'b1111;
         else
            begin
             case({a0, a1})
              2'b00: {z0nt, z1nt, z2nt, z3nt} = 4'b0111;
              2'b10: {z0nt, z1nt, z2nt, z3nt} = 4'b1011;
              2'b01: {z0nt, z1nt, z2nt, z3nt} = 4'b1101;
              2'b11: {z0nt, z1nt, z2nt, z3nt} = 4'b1110;
             endcase
            end
       end
`else
   or                   G2(z2n, N3, en),
                        G3(N3, N4, a0);
   not                  G4(N4, a1);
   or                   G5(z3n, N6, en),
                        G6(N6, N7, N8);
   not                  G7(N7, a1),
                        G8(N8, a0);
   or                   G9(z0n, N10, en),
                        G10(N10, a1, a0),
                        G11(z1n, N12, en),
                        G12(N12, a1, N14);
   not                  G14(N14, a0);
`endif
endmodule