Altifigence Academy

14 / 37 · Konzept

Flipflops, Enable und Steuerprioritäten

Halten, Laden und Reset als Folgezustandsfunktion definieren und unbeabsichtigtes Clock-Gating vermeiden.

Ein Register speichert die Folgezustandsfunktion

QkQ_k bezeichnet den Zustand vor der Flanke, DkD_k den dort übernommenen Eingang und Qk+1Q_{k+1} den Zustand danach. Für ein RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren mit reset vor enable gilt:

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

Bei enable=0 bleibt der gespeicherte Wert trotz D-Änderungen erhalten. Diesen Haltepfad im sequenziellen RTL nicht eigens zuzuweisen ist etwas anderes als eine fehlende kombinatorische Zuweisung: Halten gehört zur Registerspezifikation.

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

Dies ist synchroner active-high-Reset. Sind reset und enable an derselben Flanke 1, wird 0 gespeichert. Eine andere Reihenfolge ändert die Funktion; Priorität muss deshalb in Code und Tests stehen, nicht nur im Kommentar.

Jede Spalte dokumentiert eine steigende FlankeSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren. Eingänge gelten davor, Zustände mit „after“ unmittelbar danach. Die Spalten zeigen Abtastreihenfolge, keine physische LaufzeitLaufzeit Zeit nach einer Eingangsänderung, bis der Ausgang auf dem richtigen Wert stabil ist. Logische Äquivalenz und zeitliche Eigenschaften sind getrennte Aussagen. Mehr erfahren. Anfangs Q=0xA5: erste Spalte Halten, zweite Schreiben, dritte gleichzeitiges reset und enable.

Priorität von reset, enable und hold
Wellenformdaten anzeigen
Wellenformdaten: Jedes Zeichen steht für ein Intervall, ein Punkt hält den vorherigen Zustand und p ist ein Taktzyklus.
SignalWellenformBuswerte
edge2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q after234.A5 → 3C → 00

Enable ist kein Signal zum direkten Abschneiden des Takts

Ein beliebiges gated_clk = clk & en kann bei en-Änderungen kurze Impulse oder unerwartete Flanken erzeugen. Welche Zelle Clock-enable-RTL realisiert, bestimmen Synthese und Implementierung. Clock-Gating zur Energieeinsparung ist gesondert mit geeigneten Zellen und Timing-Prüfung zu entwerfen.

Prioritäten werden sichtbar, wenn reset, load und enable zusammentreffen. Jedes Steuersignal nur einzeln zu aktivieren genügt nicht. Beispielsweise muss q=A5 bei en=0, d=3C halten und an der nächsten Flanke mit en=1 3C übernehmen.

Selbst ausprobieren

q startet mit 0xA5. Eine Flanke hat rst=1, en=1, d=0x3C, die nächste rst=0, en=0. Welche Werte entstehen nach beiden Flanken?

Erklärung lesen

An der ersten Flanke erzwingt Resetpriorität 0; an der zweiten hält enable=0 diesen Wert. Wäre reset innerhalb der en-Bedingung implementiert, könnte ein Reset bei en=0 verloren gehen. Auch diese Kombination muss geprüft werden.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.