Menu
Coddy logo textTech

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

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

Aufgabe

Das folgende module benötigt vector-Deklarationen. 

Aufgabe: 

  1. Ä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;
  
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

Übe selbstständig: Online-Verilog-Compiler