Vectors
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 9 von 90.
Ein vector ist ein Multi-Bit-Draht oder ein reg. Statt mit einem einzelnen bit können Sie mit vectors an data-buses arbeiten. Es ist eine Sammlung von bits, die zusammen gruppiert sind.
Hinweis: Ein Vektor ist kein separater Datentyp. Er ist einfach eine Mehrbitversion von wire oder reg.
wire single; // Einzelnes Bit
wire [7:0] bus; // 8-Bit-Vektor (Bits 7 abwärts bis 0)Um einen vector zu deklarieren, verwendest du die Syntax [MSB:LSB], wobei MSB das höchstwertige bit und LSB das niedrigstwertige bit ist.
wire [3:0] a; // 4-Bit-Wire-Vektor
reg [7:0] data; // 8-Bit-Reg-Vektor
wire [15:0] addr; // 16-Bit-Wire-VektorZugriff auf Bits
Wenn du auf einzelne Bits oder Ausschnitte eines Vektors zugreifst, verwendest du Dezimalzahlen für die Bitpositionen (Indizes) und Binärwerte (0 oder 1) für die Zuweisungen.
Das liegt daran, dass eine bit-Position ein Ort (wie eine Adresse) ist, der ganz natürlich als Dezimalzahl ausgedrückt wird, während der in diesem bit gespeicherte Wert nur 0 oder 1 sein kann: eine binäre Auswahl.
Zum Beispiel bedeutet data[0] „Bit Nummer null“, und = 1 bedeutet „auf High setzen“. Das Zuweisen einer Dezimalzahl wie 75 zu einem einzelnen Bit speichert nicht 75; Verilog behält stillschweigend nur dessen niedrigstes Bit, also schreibe immer ausdrücklich 0 oder 1.
reg [7:0] data;
data = 170;
data[0] = 1; // LSB auf 1 setzen
data[7] = 0; // MSB auf 0 setzen
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Bitreihenfolge
Die Reihenfolge der bits ist wichtig:
wire [3:0] a; // a[3] ist MSB, a[0] ist LSB
wire [0:3] b; // b[0] ist MSB, b[3] ist LSB (weniger üblich)Die meisten Designer verwenden das Format [MSB:LSB] mit MSB auf der linken Seite.
Werte zuweisen
reg [3:0] a;
a = 10;
a = 5;
a = 3; Vektorausschnitte
Du kannst auf einen Bereich von Bits zugreifen:
reg [15:0] word;
word[15:8] = 255; // Oberes Byte zuweisen (8'hFF = 255)
word[7:0] = 0; // Unteres Byte zuweisen (8'h00 = 0)
word[3:1] = 3'b101; // Assign a slice Aufgabe
Das folgende module benötigt vector-Deklarationen.
Aufgabe:
- Ändere jeden input und output in 8-Bit-vectoren.
Probier es selbst
module vector_example(
input a, // Zu 8-Bit-Vektor [7:0] ändern
input b, // Zu 8-Bit-Vektor [7:0] ändern
output c // Zu 8-Bit-Vektor [7:0] ändern
);
assign c = a & b;
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