Altifigence Academy

5 / 37 · Konzept

logic, wire, X/Z und ausdrückliche Bitbreiten

Unterscheiden Sie Typ, Treiber und Speicher und prüfen Sie Literale, Vergleiche, Erweiterungen und unbekannte Werte.

Typ, Treiber und Speicher sind getrennte Fragen

logic ist ein Vier-Zustands-Datentyp; wire beschreibt eine Netzverbindung, die ebenfalls vier Zustände tragen kann. Eine logic-Variable kann je nach Treiberregel kombinatorisches Ergebnis oder getakteter Zustand sein. Kein Name garantiert ein Flipflop: suchen Sie kontinuierliche Zuweisung, kombinatorischen oder Flankenprozess. Verwenden Sie einen vorgesehenen Treiber je gewöhnlichem Signal. Aufgelöste Netze mit mehreren Treibern und bidirektionale Schnittstellen erfordern andere elektrische und Werkzeugverträge und gehören nicht zu diesen Beispielen.

Bitbreite und Interpretation festlegen

logic [7:0] u besitzt acht vorzeichenlose Bits; logic signed [7:0] s interpretiert dieselben Bits als Zweierkomplement. 8'hFF bedeutet 255 für u und −1 für s. Ein packed-Vektor bündelt Bits, keine zeitliche Folge von acht Werten.

SystemVerilog
module typed_examples (
  input  logic [3:0] a, b,
  input  logic signed [7:0] s,
  output logic [4:0] full_sum,
  output logic signed [8:0] extended_s,
  output logic negative,
  output logic any_bit, all_bits, parity
);
  assign full_sum = {1'b0, a} + {1'b0, b};
  assign extended_s = {s[7], s};
  assign negative = s < 8'sd0;
  assign any_bit = |a;
  assign all_bits = &a;
  assign parity = ^a;
endmodule

extended_s wiederholt das Vorzeichenbit. Eine angefügte Null macht aus −1 den Wert +255. Eine Konkatenation ist vorzeichenlos; vorzeichenbehaftete Arithmetik braucht ausdrückliche Interpretation oder einen passenden Zwischenwert. Hier wird das gewünschte Bitmuster dem signed-Ziel zugewiesen. Verwenden Sie 4'd15,8'hFF,8'sd0, wenn die Breite wichtig ist. Ganzzahlliterale ohne Größenangabe können Ausdrücke verbreitern: prüfen Sie beide Operanden und den Zuweisungskontext, nicht nur die linke Seite.

Drei Operatorfamilien

a & b arbeitet bitweise, a && b prüft beide Vektoren auf Wahrheitswert und liefert ein Bit,&a reduziert auf alle Bits gleich 1. a=0011, b=0101 ergeben 0001,1,0. ^a berechnet Parität und ergibt 0 für 0011. Zerlegen Sie mehrdeutige Ausdrücke in Zwischenwerte und dokumentieren Sie deren Wertebereiche.

Unbekannt ist keine dritte Spannung

X steht für unbekannt, Z für hohe Impedanz, nicht für genaue Spannungen. Ein Zwei-Zustands-Modell beweist kein Vier-Zustands-Verhalten. Setzen Sie ausdrücklich zurück, statt X als Null zu verstecken. == kann X liefern, wenn keine Entscheidung möglich ist; actual !== expected meldet in der Testbench X/Z gegenüber einer bekannten Erwartung. Case equality bedeutet keine physische X-Erkennung in gewöhnlicher Hardware.

Übung: erweitern, addieren und vergleichen

a=15, b=1 ergibt full_sum=10000. s=8'h80 ergibt extended_s=110000000, negative=1; s=8'h7F ergibt 001111111, negative=0. Prüfen Sie Null, größten positiven, kleinsten negativen Wert und −1. Ersetzen Sie die Erweiterung durch {1'b0, s} und prüfen Sie negative Fehler. Ersetzen Sie !== durch != und injizieren Sie X in actual: eine unbekannte Bedingung kann die gewünschte Fehlermeldung verhindern.

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