2016-03-20 15 views
0

Ich habe eine funktionierende DFF unter dem Modul unten.Verilog Erstellen einer Teilung durch zwei Zähler aus D Flip Flops funktioniert nicht

d_flip_flop_edge_triggered DFFT(Q, Qn, C, D); 

jedoch, wenn ich den "D" Eingang zu "Qn" switch - einen Devide-by-2-Zähler zu machen - der Prüfstand Ausgang zeigt nicht entweder Q oder Qn. Es ist rot, als ob es einen Fehler gab.

Hier ist der vollständige Code:

module divBy2UsingDFF(Q, Qn, C, D 
    ); 
    output Q; 
    output Qn; 
    input C; 
    input D; 
    wire Qn; 
    d_flip_flop_edge_triggered DFFT(Q, Qn, C, Qn); 

endmodule 

Ich bin neu zu verilog und ich vermute, es ist ein Syntax Problem.

Antwort

0

überprüfen Sie den Q-Wert im Simulator, da die rot bedeutet wahrscheinlich X, die der Datenwert des Flip-Flops zeigt an, dass nicht definiert ist, die in der Regel der Fall, nachdem zurückgesetzt.

Es gibt mehrere Möglichkeiten, dies zu beheben:

  • Verwenden Sie ein Flip-Flop mit einem asynchronen Reset
  • eine synchrone Last für die Daten-Flip-Flop

Btw hinzufügen. Anstatt einen DFFT zu instanziieren, könnten Sie den Flipflop-Teiler mit einer always schreiben. Auch die wire Qn; ist nicht erforderlich.

+0

Ja, der Q-Wert ist X. Ich habe den Eingang C im Simulator definiert, daher weiß ich nicht, warum er das anzeigt. Es hat auch keinen Reset. Ich denke das Problem könnte sein, dass ich Qn sowohl als Ausgabe als auch als Eingabe verwende? Ich bin mir nicht sicher, was Sie meinen, indem Sie es immer schreiben? – Serg

+0

Nein, die Verwendung des Qn-Ausgangs zur Speisung des Eingangs ist in Ordnung, aber das Problem besteht darin, dass der interne Flip-Flop-Speicher zunächst undefiniert ist und daher nach dem Start als 0 oder Eins definiert werden muss. Betrachte dich selbst; Was ist der Anfangswert eines Flip-Flops nach dem Einschalten? –

+0

Der Anfangswert ist nicht definiert! Ah, ich verstehe was du sagst. Gibt es eine Möglichkeit, die Variable aus dem Code heraus zu initiieren? – Serg