Arrays
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 10 von 90.
Ein array ermöglicht es dir, mehrere values in einer Variable zu speichern. Auf jedes element im array kann über seinen Index zugegriffen werden.
Hinweis: Ein array ist kein eigener data type. 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 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 bit-Breite.
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 zum Speichern von Test data.
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-wire oder reg | Sammlung mehrerer values |
| 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 values, each mit seinen eigenen bits.
Wichtige Hinweise
- Arrays sind bei Verwendung großer Größen in vielen Tools nicht synthetisierbar
- Arrays werden hauptsächlich in testbenches verwendet
- Verwende für Hardware-memory spezielle memory-Primitiven
Aufgabe
Vervollständige den folgenden Code, um ein array zu erstellen, das 4 Testwerte stores.
Was zu tun ist:
- Declare ein array namens
test_data- Verwende den Datentyp
reg(because er values in einem testbench stores) - Jedes element sollte 8 bits wide sein (
[7:0]) - Das array sollte 4 elements haben (
[0:3])
- Verwende den Datentyp
Probier es selbst
module arrays;
// Deklariere ein Array namens test_data
// Es sollte 4 Elemente haben, jeweils 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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler