Verilog-Datentypen: Bits, Wires und Logikwerte erklärt
Der Hauptzweck von Datentypen in Verilog ist die Repräsentation von Datenspeicherelementen (Bits in Flipflops) und Übertragungselementen (Wires, die Logikgatter und sequenzielle Strukturen verbinden).
Welche Werte können Variablen annehmen?
Fast alle Datentypen können nur einen von vier Werten annehmen (Ausnahme: real und event):
| 0 | Logik Null / False |
| 1 | Logik Eins / True |
| x / X | Unbekannter Logikwert (kann 0 oder 1 sein) |
| z / Z | High-Impedance-Zustand (high-Z) |
In Timing-Diagrammen und Simulations-Waveforms: Rot = X, Orange (Mitte) = High-Z / Z.
Was impliziert das Verilog-Wertesystem?
Verilog modelliert Hardware-Elemente (Flipflops, NAND, NOR). Logik 1 = Versorgungsspannung Vdd (0.8 V bis >3 V je Technologie-Node). Logik 0 = Ground (0 V).
X/x = Wert zum Zeitpunkt unbekannt (kann 0 oder 1 sein). Anders als in Boolescher Logik („Don't Care“).
Z/z = High-Impedance, wie ein nicht angeschlossener Draht. In Verilog hat jeder unverbundene Wire High-Z.
Nets und Variables
Nets und Variables sind die zwei Hauptgruppen, die unterschiedliche Hardware-Strukturen repräsentieren und sich in Zuweisung und Werterhaltung unterscheiden.
Nets
Verbinden Hardware-Entitäten (Logikgatter), speichern keinen eigenen Wert. Beispiel: Net net_11 verbindet AND-Gatter-Ausgang mit Flipflop-Eingang data_0. Eingänge des AND-Gatters an net_45, net_67.
Verschiedene Net-Typen, aber der beliebteste in digitalen Designs ist wire. Ein wire verbindet Elemente, getrieben von einem einzelnen Gatter oder Continuous Assignment. Analogie: Elektrischer Draht auf Breadboard.
Mehrere Nets können zu einem wire gebündelt werden (Vektoren). Beispiel: wire [3:0] n0; – 4-Bit-Wire (Vektor).
Redeclaration eines bereits deklarierten Namens (Net, Parameter, Variable) ist illegal.
Variables
Abstraktion eines Datenspeicherelements, kann Werte halten. Flipflop = gutes Beispiel.
Verilog-Typ reg modelliert Hardware-Register, da er Werte zwischen Zuweisungen hält. Hinweis: reg muss nicht immer ein Flipflop sein – kann auch kombinatorische Logik darstellen.
Weitere Datentypen
integer
Allzweck-Variable, 32 Bit breit, speichert Integer-Werte.
integer count; // count > 0
time
time: unsigned, 64 Bit, für Simulationszeit. realtime: Gleitkomma-Zeit.
time end_time; // z. B. 50ns
realtime rtime; // z. B. 40.25ps
real
Gleitkommawerte, Zuweisung wie integer/reg.
real float; // float = 12.344
Beispiel
module testbench;
integer int_a;
real real_b;
time time_c;
initial begin
int_a = 32'hcafe_1234;
real_b = 0.1234567;
#20;
time_c = $time;
$display("int_a = 0x%0h", int_a);
$display("real_b = %0.5f", real_b);
$display("time_c = %0t", time_c);
end
endmodule
Simulationslog:
ncsim> run int_a = 0xcafe1234 real_b = 0.12346 time_c = 20 ncsim: *W,RNQUIE: Simulation is complete.
Verilog Strings
Strings werden in reg gespeichert. Breite des reg muss ausreichen (1 Byte pro Zeichen = 8 Bit).
- Variable zu klein → linke Bits werden abgeschnitten (Trunkierung).
- Variable zu groß → linke Bits werden mit Nullen aufgefüllt (Padding).
// "Hello World" = 11 Bytes
reg [8*11:1] str = "Hello World"; // passt genau
reg [8*5:1] str = "Hello World"; // nur 5 Bytes → "World"
reg [8*20:1] str = "Hello World"; // 20 Bytes → Padding links: " Hello World"
Vollständiges Simulationsbeispiel zeigt das Verhalten.
Verilog
- C# Variablen & Primitive Datentypen meistern: Der komplette Guide
- C++-Datentypen verstehen: Grundlagen, Modifizierer und Best Practices
- C Datentypen erklärt: int, float, char und mehr – Ein vollständiger Leitfaden
- Python-Datentypen meistern: Praxisleitfaden
- Java Primitive Datentypen: Vollständiger Leitfaden mit Beispielen
- 5 Rechenzentrums-Modelle erklärt: Design, Use Cases & Beispiele
- 8 Schlüssel-Cloud-Computing-Modelle 2021
- 8 häufige Datenschutzverletzungsarten – reale Beispiele & Auswirkungen
- Verilog meistern: Komplettes Tutorial für digitales Schaltungsdesign
- Verilog Concatenation meistern: Praktischer Leitfaden