2016-12-01 1 views
0

dans cmd il me montre y = z comment y remédier. qu'est-ce qui est usé avec mon code? Je veux obtenir a = 1 b = 1 y = quoi? pas z.Verilog CMOS OU erreur de porte

écran Voir ci-dessous:

screen

Ceci est mon code

module or2(input a, b, output y); 

    nmos(wire1,a,b); 
    pmos(wire1,0,b); 
    pmos(y,a,b); 

endmodule 

module OR_tb(); 
    reg a,b; 
    wire y; 

    or2 dut(a, b, y); 

    initial 
    begin 
     $monitor("a = %b b = %b y = %b",a,b,y); 
     a=0; 
     b=0; 
     #1; b=1; 
     #1; a=1; b=0; 
     #1; b=1; 
     #1; 
     $finish; 
    end 

endmodule 
+0

Google 'OU porte cmos' et vous verrez que votre module 'or2' est faux: il devrait avoir 6 transistors dedans. –

+0

Donc, je dois augmenter pmods et nmods? –

+0

Je le pense. Je ne connais pas grand chose à la conception des transistors, mais je sais que la porte à 2 entrées la plus simple est une porte NAND qui nécessite 4 transistors et, comme je l'ai dit, un peu de googling a révélé une porte OU 6. –

Répondre

0

Module or2 est erroné. Voici le module or2.

module or2(input a, b, output y); 
    wire wire1, temp_out; 

    // 2 Bit NOR Gate 
    nmos(temp_out, 1'b0, a); 
    nmos(temp_out, 1'b0, b); 

    pmos(wire1, 1'b1, a); 
    pmos(temp_out, wire1, b); 

    // 1 Bit Inverter 
    nmos(out, 1'b0, temp_out); 
    pmos(out, 1'b1, temp_out); 
endmodule