Arrays
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 10 von 90.
Ein Array ermöglicht es dir, mehrere Werte in einer Variablen zu speichern. Auf jedes Element im Array kannst du über seinen Index zugreifen.
Hinweis: Ein Array ist kein eigener Datentyp. Es ist eine Sammlung von Werten der Typen wire, reg, integer oder real.
Arrays deklarieren
Syntax: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 Byte Speicher (jeweils 8 Bit)
reg data [0:7]; // 8 Ein-Bit-Register
wire [3:0] bus [0:3]; // 4 Busse mit jeweils 4 Bit Breite
integer counters [0:9]; // 10 GanzzahlenDie Zahl in eckigen Klammern [ ] ist die Arraygröße, nicht die Bitbreite.
Auf Array-Elemente zugreifen
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 mit 8-Bit-Werten
matrix[0][0] = 255; // 8'hFF = 255 dezimal
matrix[2][1] = 85; // 8'h55 = 85 dezimalVektor vs. Array
| Vektor | Array | |
|---|---|---|
| Was es ist | Mehrbitige 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
- Ein
reg-Array ist synthetisierbar: Synthesewerkzeuge erstellen Speicher wie RAMs und Registerdateien aus Arrays wiereg [7:0] mem [0:255]; - Arrays werden auch in Testbenches verwendet, um Testdaten zu speichern
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 soll 4 Elemente haben, die jeweils 8 Bit breit sind
// 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