Vektoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 9 von 90.
Ein Vector ist ein mehrbitiger wire oder reg. Anstelle eines einzelnen Bits bieten Ihnen Vectors die Möglichkeit, mit Bussen von Daten zu arbeiten. Es ist eine Sammlung von Bits, die zusammengefasst sind.
Hinweis: Ein vector ist kein separater Datentyp. Es ist einfach eine Multi-Bit-Version von wire oder reg.
wire single; // Einzelnes Bit
wire [7:0] bus; // 8-Bit-Vektor (Bits 7 bis 0)Um ein vector zu deklarieren, verwenden Sie die Syntax [MSB:LSB], wobei MSB das höchstwertige bit (most significant bit) und LSB das niedrigstwertige (least significant) ist.
wire [3:0] a; // 4-Bit-Wire-Vektor
reg [7:0] data; // 8-Bit-Reg-Vektor
wire [15:0] addr; // 16-Bit-Wire-VektorBit-Zugriff
Wenn Sie auf einzelne Bits oder Slices eines Vektors zugreifen, verwenden Sie Dezimalzahlen für die Bit-Positionen (Indizes) und Binärwerte (0 oder 1) für die Zuweisungen.
Das liegt daran, dass eine Bitposition ein Ort (wie eine Adresse) ist, der natürlicherweise als Dezimalzahl ausgedrückt wird, während der an dieser Position gespeicherte Wert nur 0 oder 1 sein kann — eine binäre Wahl.
Zum Beispiel bedeutet data[0] "Bit Nummer Null", und = 1 bedeutet "setze es auf high". Das Zuweisen einer Dezimalzahl wie 75 zu einem einzelnen Bit speichert nicht 75 — Verilog behält stillschweigend nur das unterste Bit — schreiben Sie daher immer explizit 0 oder 1.
reg [7:0] data;
data = 170;
data[0] = 1; // Setze LSB auf 1
data[7] = 0; // Setze MSB auf 0
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Bit-Reihenfolge
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 [MSB:LSB]-Format mit dem 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 unten stehende module benötigt vector-Deklarationen.
Was zu tun ist:
- Ändern Sie jeden
inputundoutputso, dass es sich um 8-bit-vectors handelt.
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. 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