Ich fange an, Verilog-Codierung im College zu lernen, und hatte bis jetzt keine großen Probleme. Ich denke, ich habe die Grundlagen perfekt hinbekommen. Aber ich bin mit diesem gerade gegen eine Mauer gefahren. Ich experimentierte mit Verhaltensmodellierung und hatte am Ende dieses Problem.
Es ist einfach, ein D-Flip-Flop mit synchronem Pegel-Trigger-Reset wie diesem herzustellen
always @(posedge clk)
begin
if(clr) begin
q <= 1'b0;
end
else begin
q <= d;
end
end
Oder machen Sie ein D-Flip-Flop mit synchronem flankengetriggertem Reset wie diesem
always @(posedge clk or posedge clr)
begin
if(clr) begin
q <= 1'b0;
end
else begin
q <= d;
end
end
Aber wie kann ich einen Level getriggerten aber asynchronen Reset machen? Kann ich nicht machen
always @(posedge clk or clr)
da dies zwei inkompatible Typen oren würde, wird während der RTL-Synthese ein Fehler ausgegeben. Kann ich nicht machen
always @(posedge clk)
begin
q <= d;
end
always @(clr)
begin
q <= 1'b0;
end
da dies mehrere Quellen zum Ansteuern von q erfordern würde, erneutes Problem bei der RTL-Synthese.
Meine Frage ist also, ob ein D-Flip-Flop mit asynchronem Level-Trigger-Reset möglich ist oder nicht? Sowohl in Verilog als auch in digitaler Logik.
Hier ist das Beispiel von Xilinx für ein "Flip-Flop mit negativem Flankentakt und asynchronem Zurücksetzen":
always @(negedge C or posedge CLR)
begin
if (CLR)
Q <= 1’b0;
else
Q <= D;
end
(Quelle: Synthesis and Simulation Design Guide, UG626, 19. Okt. 2011)
Beachten Sie, dass dies im Grunde dasselbe ist wie in Ihrem zweiten Beispiel (außer dass die entgegengesetzte Taktflanke verwendet wird). Und tatsächlich ist dies ein pegelempfindlicher Clear, kein flankenempfindlicher Clear, denn wenn Clear hoch gehalten wird, wird der Ausgang weiterhin niedrig gehalten, selbst wenn neue Taktflanken eintreffen und/oder sich der D-Eingang ändert.
Ich bin mit Verilog nicht sehr vertraut, aber nach meinem Verständnis werden einige Synthesewerkzeuge bei Versuchen kreischen, synchrone und asynchrone Logik auf Hardwareplattformen zu generieren, deren Primitive solche Dinge nicht unterstützen. Es ist möglich, eine Schaltung herzustellen, die sich wie ein Async-Reset-Flipflop verhält, vorausgesetzt, dass Reset-Flanken nicht in der Nähe von Taktflanken auftreten. Hier ist ein Beispiel. Eine wichtige Sache, die bei dieser Schaltung zu beachten ist, ist jedoch, dass während ein asynchrones Hardware-Reset garantiert jede Metastabilität löscht, eine Schaltung, die eine solche simuliert, keine solche Garantie bietet.
Ich bin mir bei Verilog nicht sicher, aber in VHDL dachte ich, es wäre so etwas:
ARCHITECTURE behavioral OF dff_asynch IS
BEGIN
PROCESS(D, Clk, Clr, Pre)
BEGIN
IF Clr = '0' THEN -- Don’t wait for clock
Q <= '0';
Qbar <= '1';
ELSIF Pre = '0' THEN
Q <= '1';
Qbar <= '0';
ELSIF (Clk'event) AND (Clk='1') THEN -- Positive Edge
Q <= D;
Qbar <= not D;
END IF;
END PROCES
1) None-reset: immer @(negge C) begin Q <= D; Ende
2) Synchroner Reset immer @(negedge C) begin if (CLR) // Wenn C nicht läuft, wirkt sich eine Änderung in CLR nicht auf QQ <= 1'b0 aus; sonst Q <= D; Ende
3) Asynchrones Zurücksetzen immer @(negedge C oder gestellte CLR) beginnen, wenn (CLR) Q <= 1'b0; sonst Q <= D; Ende
Superkatze
Das Photon
Superkatze
Superkatze
Das Photon
Das Photon
Superkatze
Superkatze
Das Photon