Menu
Coddy logo textTech

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-Vektor

Bit-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 
challenge icon

Aufgabe

Das unten stehende module benötigt vector-Deklarationen. 

Was zu tun ist: 

  1. Ändern Sie jeden input und output so, 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;
  
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen