2016-04-03 7 views
0

In dem unten erwähnten Verilog-Code für J-K Flip Flop möchte ich Drahttyp q und q_bar mit einem Wert initialisieren. ZB: Ich initialisiere hier q und q_bar mit 0. Aber in der Ausgabe ist q und q_bar egal (1'hx) Wert. Also, wie Drahttyp mit Konstante zu initialisieren?Wie initialisiert man eine Leitung mit Konstante in Verilog?

module JK_FF(j,k,clk,q,q_bar) ; 
input j,k,clk ; 
output q , q_bar ; 
wire s,r,w,z ; 

assign w = q ; 
assign z = q_bar ; 

nand U1(s,j,clk,z) ; 
nand U2(r,k,clk,w) ; 
nand U3(q,s,z) ; 
nand U4(q_bar,r,w) ; 

endmodule 

/* TEST BENCH */ 

module JK_FF_TB ; 

reg j,k,clk ; 
wire q , q_bar ; 

assign q = 1'b0 ; 
assign q_bar = 1'b0 ; 

initial begin 
clk = 1'b1 ; 
end 

JK_FF DUT(j,k,clk,q,q_bar) ; 

initial 
begin 
j = 1'b0 ; 
k = 1'b0 ; 

#5 

    j = 1'b0 ; 
    k = 1'b1 ; 

    #5 

    j = 1'b1 ; 
    k = 1'b0 ; 

    #5 

    j = 1'b1 ; 
    k = 1'b1 ; 

    end 
    endmodule 
+0

Alles, was Sie brauchen, ist zu ** Reset ** die Werte von 'q' und' q_bar'. Fügen Sie eine Reset-Logik hinzu. Außerdem wird in Verilog häufig die Methode der Verwendung von 'always' zum Erstellen von Flops verwendet. – sharvil111

+0

Bitte können Sie näher ausführen? Ich bin naiv in Verilog! Plus q und q_bar ist vom Typ Draht, also denke ich, dass wir sie nicht immer blockieren können. Bitte korrigieren Sie mich, wenn ich falsch liege –

+0

Ja. Sie müssen q und qbar als reg haben. Sie können [diesen Link] (http://verilogbynaresh.blogspot.in/2013/07/design-of-jk-flip-flop-using-behavior.html?m=1) für immer Blockflop sehen. – sharvil111

Antwort

1

Es gibt mehrere Probleme zu lösen.

Zustand in Verilog, wie Flip-Flop-Wert, wird normalerweise in reg Art gehalten, wo der Wert mit initial initialisiert werden kann. In dem einfachen Flip-Flop, das aus Gattern besteht, gibt es jedoch nur Drähte, die nicht initialisiert werden können.

Das Design mit den gekreuzten NAND-Gattern führt in einer Hardware-Implementierung zu einem stabilen Wert beim Start, selbst wenn die Drähte zunächst undefiniert sind 1'bX. Sie können dies in der Schaltung emulieren 1'X-1'b0 oder 1'b1 bei q und q_bar Verwendung zuweisen mit Konvertierung:

assign w = q !== 1'b0; // 1'bX => 1 
assign z = q_bar === 1'b1; // 1'bX => 0 

Die Verilog Implementierung wird jedoch eine Race-Bedingung geben, da der Taktimpuls auch immer lang sein wird, die sofortige Änderung, die auftritt, wenn dieses Design simuliert wird. Dies wird typischerweise während der Simulation als unendliche Iteration angezeigt, wodurch Iterationsgrenzen mit resultierendem Fehler erreicht werden.

So mehr Änderungen erforderlich sind, und Sie können ein großes Tutorial finden Sie hier: The JK Flip Flop

+0

Hier ist q = 1'b0; und q! == 1'b0 gibt 1 an w zurück! Habe ich recht ? –

+0

Wenn 'q = 1'b0 ', dann ist' q! == 1'b0 = 1'b0! == 1'b0 =! (1'b0 === 1'b0) =! 1 = 0 ', so wird dies "0" zu "w" zurückgeben, und nicht "1", wie Sie vorschlagen. –

Verwandte Themen