Arrays
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 10 von 90.
Mit einem Array kannst du mehrere Werte in einer Variablen speichern. Auf jedes Element im Array kann über seinen Index zugegriffen werden.
Hinweis: Ein Array ist kein eigener Datentyp. Es ist eine Sammlung von Typen wie wire, reg, integer oder real.
Arrays deklarieren
Syntax: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 Bytes Speicher (je 8 Bits)
reg data [0:7]; // 8 Einzelbit-Register
wire [3:0] bus [0:3]; // 4 Busse, jeweils 4 Bits breit
integer counters [0:9]; // 10 GanzzahlenDie Zahl in den eckigen Klammern [ ] ist die Array-Größe, nicht die Bitbreite.
Zugriff auf Array-Elemente
reg [7:0] memory [0:3];
memory[0] = 165; // Dezimal 165
memory[1] = 90; // Dezimal 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // Gibt aus: 255Arrays sind in Testbenches sehr nützlich, um Testdaten zu speichern.
Mehrdimensionale Arrays
Du kannst Arrays mit mehreren Dimensionen erstellen:
reg [7:0] matrix [0:3][0:3]; // 4x4-Array von 8-Bit-Werten
matrix[0][0] = 255; // 8'hFF = 255 dezimal
matrix[2][1] = 85; // 8'h55 = 85 dezimalArray vs. Vektor
| Vektor | Array | |
|---|---|---|
| Was es ist | Mehrbit-Leitung oder reg | Sammlung mehrerer Werte |
| Syntax | [MSB:LSB] | [size] |
| Beispiel | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Zugriff | data[3] (Bit 3) | mem[3] (Element 3) |
Ein Vektor ist ein Wert mit mehreren Bits.
Ein Array besteht aus mehreren Werten, von denen jeder seine eigenen Bits hat.
Wichtige Hinweise
- Arrays sind bei Verwendung großer Größen in vielen Tools nicht synthetisierbar
- Arrays werden hauptsächlich in Testbenches verwendet
- Für Hardwarespeicher solltest du spezielle Speicherprimitive verwenden
Aufgabe
Vervollständige den folgenden Code, um ein Array zu erstellen, das 4 Testwerte speichert.
Was zu tun ist:
- Deklariere ein Array namens
test_data- Verwende den Datentyp
reg(weil er Werte in einer Testbench speichert) - Jedes Element sollte 8 Bit breit sein (
[7:0]) - Das Array sollte 4 Elemente haben (
[0:3])
- Verwende den Datentyp
Probier es selbst
module arrays;
// Deklariere ein Array namens test_data
// Es sollte 4 Elemente haben, jedes 8 Bit breit
// Verwende den Datentyp reg (weil er Werte in einer Testbench speichert)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler