Arrays
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 10 von 90.
Ein Array ermöglicht es Ihnen, mehrere Werte in einer Variablen zu speichern. Auf jedes Element im Array kann über seinen Index zugegriffen werden.
Hinweis: Ein Array ist kein separater Datentyp. Es ist eine Sammlung von wire-, reg-, integer- oder real-Typen.
Arrays deklarieren
Syntax: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 Bytes Speicher (jeweils 8 Bit)
reg data [0:7]; // 8 Ein-Bit-Register
wire [3:0] bus [0:3]; // 4 Busse, jeweils 4 Bit breit
integer counters [0:9]; // 10 IntegerDie Zahl in 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
Sie können 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 | |
|---|---|---|
| Beschreibung | Multi-Bit-Wire 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 ist mehrere Werte, jeder mit seinen eigenen Bits.
Wichtige Hinweise
- Arrays sind in vielen Tools nicht synthetisierbar, wenn sie mit großen Größen verwendet werden
- Arrays werden meistens in Testbenches verwendet
- Verwenden Sie für Hardware-Speicher spezielle Speicher-Primitive
Aufgabe
Vervollständigen Sie den folgenden Code, um ein Array zu erstellen, das 4 Testwerte speichert.
Was zu tun ist:
- Deklarieren Sie ein Array namens
test_data- Verwenden Sie den Datentyp
reg(da er Werte in einer Testbench speichert) - Jedes Element sollte 8 Bit breit sein (
[7:0]) - Das Array sollte 4 Elemente haben (
[0:3])
- Verwenden Sie den Datentyp
Spickzettel
Arrays speichern mehrere Werte in einer einzigen Variablen, auf die über einen Index zugegriffen wird. Ein Array ist eine Sammlung von wire, reg, integer oder real Typen.
Deklarationssyntax: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 Elemente, jedes 8 Bit breit
wire [3:0] bus [0:3]; // 4 Elemente, jedes 4 Bit breit
integer counters [0:9]; // 10 IntegerZugriff auf Elemente:
memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);Mehrdimensionale Arrays:
reg [7:0] matrix [0:3][0:3]; // 4x4 Array aus 8-Bit-Werten
matrix[0][0] = 255;Array vs. Vektor:
- Vektor — ein Wert mit mehreren Bits:
reg [7:0] data;—data[3]greift auf Bit 3 zu - Array — mehrere Werte, jeder mit seinen eigenen Bits:
reg [7:0] mem [0:255];—mem[3]greift auf Element 3 zu
Arrays werden hauptsächlich in Testbenches verwendet; für Hardware-Speicher sollten spezielle Speicher-Primitive verwendet werden.
Probier es selbst
module arrays;
// Deklariere ein Array namens test_data
// Es sollte 4 Elemente haben, jedes 8 Bit breit
// Verwende den Datentyp reg (da 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. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen