Vektoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 9 von 90.
Ein Vektor ist eine Multi-Bit-Leitung oder ein Register. Anstelle eines einzelnen Bits ermöglichen Vektoren dir, mit Datenbussen zu arbeiten. Er ist eine Sammlung von zusammengefassten Bits.
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 Vektor zu deklarieren, verwendest du die Syntax [MSB:LSB], wobei MSB das höchstwertige Bit und LSB das niederwertigste 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 Modul benötigt Vektordeklarationen.
Was zu tun ist:
- Ändere jeden Eingang und Ausgang in 8-Bit-Vektoren.
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 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