Menu
Coddy logo textTech

Vektoren

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 9 von 90.

Ein Vektor ist ein mehrbitiges wire oder reg. Anstatt eines einzelnen Bits ermöglichen Vektoren die Arbeit mit Datenbussen. Es handelt sich um eine Sammlung von Bits, die gruppiert sind.

Hinweis: Ein Vektor ist kein separater Datentyp. Es ist lediglich eine Multi-Bit-Version von wire oder reg.

wire single;        // Einzelnes Bit
wire [7:0] bus;     // 8-Bit-Vektor (Bits 7 bis 0)

Um einen Vektor zu deklarieren, verwenden Sie die Syntax [MSB:LSB], wobei MSB das höchstwertige Bit (most significant bit) und LSB das niederwertigste Bit (least significant 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 Sie auf einzelne Bits oder Slices eines Vektors zugreifen, verwenden Sie Dezimalzahlen für die Bitpositionen (Indizes) und Binärwerte (0 oder 1) für die Zuweisungen.

Dies liegt daran, dass eine Bitposition ein Ort (wie eine Adresse) ist, der natürlicherweise als Dezimalzahl ausgedrückt wird, während der in diesem Bit gespeicherte Wert nur 0 oder 1 sein kann – eine binäre Entscheidung.

Zum Beispiel bedeutet data[0] „Bit Nummer Null“ und = 1 bedeutet „setze es auf High“. Sie können einem einzelnen Bit keine Dezimalzahl wie 75 zuweisen, da ein Bit keinen Platz für andere Werte als 0 oder 1 hat.

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;      // Bits 3,2,1 auf 101 setzen (Binärwert bleibt)

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 gebräuchlich)

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;        

Vektor-Slices

Sie können auf einen Bereich von Bits zugreifen:

reg [15:0] word;

word[15:8] = 255;        // Zuweisung des oberen Bytes (8'hFF = 255)
word[7:0]  = 0;          // Zuweisung des unteren Bytes (8'h00 = 0)
word[3:1]  = 3'b101;     // Zuweisung eines Slices 
challenge icon

Aufgabe

Das untenstehende Modul benötigt Vektordeklarationen. 

Was zu tun ist: 

  1. Ändern Sie jeden input und output in 8-Bit-Vektoren.

Spickzettel

Ein Vektor ist ein mehrbitiges wire oder reg, das mit der Syntax [MSB:LSB] deklariert wird:

wire [7:0] bus;     // 8-Bit-Wire-Vektor
reg [15:0] addr;    // 16-Bit-Reg-Vektor

Zugriff auf einzelne Bits und Slices:

reg [7:0] data;

data[0] = 1;          // LSB auf 1 setzen
data[7] = 0;          // MSB auf 0 setzen
data[3:1] = 3'b101;   // Bits 3,2,1 mit Binärwert setzen

Bit-Reihenfolge: [MSB:LSB] ist die Standardkonvention (z. B. bedeutet [7:0], dass Bit 7 das MSB und Bit 0 das LSB ist).

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