Altifigence Academy

6 / 37 · Konzept

Vektorindizes, Bitreihenfolge und Vorzeichen

Bitnummern, serielle Reihenfolge und arithmetische Interpretation beim Lesen des Datenpfads trennen.

Indizes sind Namen; die Deklarationsrichtung bestimmt ihre Bedeutung

In logic [7:0] a; steht a[7] ganz links, in logic [0:7] b; dagegen b[0]. Nach Zuweisung von 8'h96 zeigen beide von links 10010110, aber die Bitindizes unterscheiden sich. „Bit 0 ist immer LSBLSB Bit mit dem niedrigsten Stellenwert. Darstellungsrichtung und Indexkonvention müssen gemeinsam geprüft werden.“ gilt erst nach Prüfung der Deklarationsrichtung.

Eine einheitliche Richtung über Schnittstellen erleichtert die Prüfung. Legen Sie auch Anzeigeordnung im Zeitdiagramm und Bitreihenfolge in Dateien fest. Die Eingabe-JSON-Arrays dieses Kurses beginnen beim LSB; RTL-Vektoren liest man gewöhnlich vom MSBMSB Bit mit dem höchsten Stellenwert. Sein Index hängt von der Deklarationsrichtung ab und ist nicht grundsätzlich der größte Index..

Die Schieberichtung an den Verbindungen prüfen

Bei q <= {q[1:0], din}; erhält q[2] das alte q[1], q[1] das alte q[0] und q[0] den Eingang din.

q2next=q1,q1next=q0,q0next=dq_2^{next}=q_1,\quad q_1^{next}=q_0,\quad q_0^{next}=d

Welche Indizes welche Signale erhalten ist präziser als „im Bild nach links“.

Die Pfeile zeigen die Speicherpositionen eines Bits. Alle RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren lesen an derselben Flanke alte Werte; din passiert nicht bis q2 in nur einer Flanke.

Den Verschiebepfad anhand der Bitnummern lesen
  1. din: An dieser Flanke angenommenes Bit
  2. q0: din übernehmen
  3. q1: Bisheriges q0 übernehmen
  4. q2: Bisheriges q1 übernehmen

Arithmetisches und logisches Schieben

>> schiebt logisch nach rechts und füllt die frei werdenden linken, höchstwertigen Stellen mit 0. >>> kann bei signed linkem Operanden arithmetisch mit Vorzeichenerweiterung schieben. Gleiche Bitmuster können je nach signed-Deklaration verschiedene Ergebnisse liefern.

SystemVerilog
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;

Für x=8'b11111000 (−8) ergeben sich 01111100 beziehungsweise 11111100. Arithmetisches Rechtsschieben negativer Zahlen folgt nicht immer der Rundungsregel ganzzahliger Division; prüfen Sie dies in numerischen Algorithmen gesondert.

Selbst ausprobieren

Bestimmen Sie für q=101, din=0 jeweils den Folgewert von q<={q[1:0], din} und q<={din, q[2:1]}.

Erklärung lesen

Beide ergeben 010: Für diese Eingabe stimmen die Richtungen zufällig überein. Mit q=001, din=0 ergeben sich 010 und 000; dies unterscheidet die Richtungen.

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