Altifigence Academy

5 / 24 · Konzept

Registertransfers an Taktflanken lesen

Trennen Sie alten und nächsten Zustand und verfolgen Sie, wie Freigaben gespeicherte Werte erhalten.

Alle Register lesen den alten Zustand

Identifizieren Sie zunächst Informationen, die zwischen Takten erhalten bleiben müssen. Ein Akkumulator, erfasste Operanden, ein Schleifenzähler und die Ausgabegültigkeit bilden Zustand. Die Summe aus aktuellem Akkumulator und Operand ist ein kombinatorischer Wert. Das Zuweisen einer Variablen erklärt für sich genommen noch keine Speicherung; definieren Sie das Ereignis, das ihren Wert erfasst.

Dieser Akkumulator addiert x nur an steigenden Flanken mit gesetztem en. Bei niedrigem en hält er seinen Wert. Ein Neun-Bit-Zwischenwert macht die Addition ausdrücklich; die Auswahl seiner unteren acht Bits definiert das Modulo-256-Verhalten. Nichtblockierende Zuweisungen in always_ff planen den nächsten Zustand anhand der an der aktuellen Flanke gelesenen Werte. Wer den Block wie sofort wirksame Softwarezuweisungen liest, interpretiert ihn bei mehreren beteiligten Registern falsch.

SystemVerilog
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
  if (rst) acc <= 8'd0;
  else if (en) acc <= next_sum[7:0];
end

Reset ist synchron und hat Vorrang vor der Freigabe. Wenn bei niedrigem en eine sequenzielle Zuweisung entfällt, hält das Register seinen Wert. Eine fehlende Zuweisung auf einem kombinatorischen Pfad kann dagegen ein unbeabsichtigtes Latch bedeuten. Geben Sie für kombinatorische Folgezustandslogik Standardwerte vor und überschreiben Sie sie anschließend für bestimmte Bedingungen.

FlankerstenxAlter accNeuer acc
0119Unbekannt0
101707
20010077
30125071

An Flanke 2 wurde die sichtbare Eingabe 100 nicht übernommen. An Flanke 3 wird 7+250=257 auf 1 gekürzt. Die Unterscheidung zwischen Anliegen und Übernahme bleibt wesentlich, wenn en später zu valid AND ready wird.

Bei a<=x; b<=a; ergeben altes a=5 und x=9 neues a=9 und b=5. Soll b den Wert 9 erhalten, verbinden Sie seinen Eingang mit x. Füllen Sie zuerst die Spalte für den alten Zustand aus und berechnen Sie dann alle Folgezustände gemeinsam; so werden Verschiebungen um einen Takt zwischen Daten und Steuerung sichtbar.

Selbst ausprobieren

Anfangs gilt a=4 und b=0. Die Eingaben x sind zuerst 8 und dann 12; an jeder Flanke gelten a<=x; b<=a. Welche Werte haben a und b nach der zweiten Flanke?

Erklärung lesen

Nach der ersten Flanke gilt a=8 und b=4. Nach der zweiten gilt a=12 und b=8. Jede Aktualisierung von b nutzt das alte a, daher durchläuft x=12 nicht beide Register an derselben Flanke.

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