2017-05-02 6 views
0

Hier ist meine Gate-Level-Beschreibung eines SR-Latch:SystemVerilog: SR Latch funktioniert nicht richtig

module SR_Latch_Nand(input S, R, C, output Q, QB); 
    wire s1, r1; 
    nand #8 n1(r1, R, C); 
    nand #8 n2(s1, S, C); 
    nand #8 n3(QB, R, Q); 
    nand #8 n4(Q, S, QB); 
endmodule 

und hier ist Prüfstand für diesen SR-Latch:

module SR_Latch_Nand_TB(); 
    logic s, r, clk; 
    wire q, qb; 
    SR_Latch_Nand sr(s, r, clk, q, qb); 
    initial begin 
    s = 0; r = 0; clk = 0; 
    #100 s = 1; 
    #100 clk = 1; 
    #100 clk = 0; 
    #100 clk = 1; 
    #100 s = 0; 
    #100; 
    end 
endmodule 

Als ich Überprüfen Sie die Waverform, der Wert von Q ist meistens X. Andere Male ist es meistens falsch. Ich habe versucht, Werte von Q, QB voreinzustellen, aber es scheint immer noch nicht zu funktionieren.

Also können Sie sagen, was ist das Problem mit diesem Code?

Antwort

0

Das Problem ist mit Ihrer Testbench. Wenn sowohl r als auch s aktiv niedrig sind, vergewissern Sie sich, dass auf Ihrem Prüfstand nur einer von ihnen aktiv niedrig ist.

1

Der Code SR_Latch_Nand ist falsch. Sie vermissten die s1 und r1 für die Ausgabe NAND-Gatter n3 und n4. Das korrigierte SR-Latchmodul sollte wie folgt aussehen:

module SR_Latch_Nand(input S, R, C, output Q, QB); 
    wire s1, r1; 
    nand #8 n1(r1, R, C); 
    nand #8 n2(s1, S, C); 
    nand #8 n3(QB, s1, Q); 
    nand #8 n4(Q, r1, QB); 
endmodule