Strukturelles D-Flipflop in Verilog

module dFlipFlop(
    input clk,
    input d,
    output q
    );
wire w1,w2,q_n;

assign w1 = ~(d & clk);
assign w2 = ~(~d & clk);

assign q = ~(w1 & q_n);
assign q_n = ~(w2 & q);

endmodule

Funktioniert dieses Modul als D-Flip-Flop auf meinem FPGA? Irgendwelche Vorschläge? Ich habe derzeit kein FPGA, aber ich versuche herauszufinden, ob dieses Design würdig ist oder nicht.

FYI: Sie schreiben einen D-Latch, kein flankengetriggertes Flip-Flop
Bevor Sie solche Fragen stellen, sollten Sie die Definition eines Flip-Flops lernen und dann darüber nachdenken, wie Sie es implementieren können. Was Sie hier schreiben, ist kein Flip-Flop, es ist ein Latch, wie Greg erwähnt hat.

Antworten (2)

Es könnte funktionieren, aber es ist schwer zu sagen, was der Synthesizer damit macht. Es ist eine viel bessere Idee, einen Always-Block zu verwenden, wenn Sie eine Uhr verwenden möchten.

Nein, nicht als Flip-Flop. Es ist ein D-Latch.

Der Unterschied tritt auf, wenn der Takt hoch ist. Ein Flip-Flop registriert den Eingang d an der Taktflanke. Der d-Latch ermöglicht, dass sich der registrierte Wert ändert, wenn der Takt hoch ist.

Eine D-Latch-Wahrheitstabelle würde wie folgt aussehen:

Clk  D  |  Q(t+1)
-----------------
 0   x  |   Q(t)
 1   0  |    0
 1   1  |    1

x = egal (egal was es ist).

Ein d-Flip-Flop würde sich nur am Rand (oder einige Zeit danach, abhängig von der Verzögerung) ändern.

Würdiges Design? -- Wie Sie vielleicht wissen, ist dies nicht die einfachste und normalerweise auch keine empfohlene Methode zum Erstellen von Anzeigen-Latch oder Anzeigen-Flip-Flop.