Menu
Coddy logo textTech

Verkettungsoperator

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

Der Verkettungsoperator { } kombiniert mehrere Signale, Konstanten oder Ausdrücke zu einem einzigen größeren Vektor. Er wird immer dann verwendet, wenn Bits zusammengefügt werden müssen, um breitere Werte zu bilden.

Welche Werte funktionieren mit Verkettung

Sie können Folgendes verketten:

  • Wires und Regs — jedes Signal
  • Konstanten — Zahlen wie 4'b1010 oder 8'hFF
  • Ausdrücke — Ergebnisse von Operationen wie a + b
  • Replikationen — das mehrfache Wiederholen eines Wertes

Alle verketteten Werte müssen feste, bekannte Breiten haben.

Grundlegende Syntax:  {value1, value2, value3, ...} Die Ergebnisbreite ist die Summe aller Einzelbreiten.

Beispiele

Kombinieren Sie zwei 4-Bit-Werte zu 8 Bit:

reg [3:0] high, low;
reg [7:0] word;

word = {high, low};     // high wird zu den oberen 4 Bits, low zu den unteren 4

Mit Konstanten kombinieren:

data = {4'b1010, 4'b0000};   // 8'b10100000

Kombiniere mehr als zwei:

full = {a, b, c, d};   // Alle Breiten addieren sich

Replikation

Sie können einen Wert mehrmals wiederholen, indem Sie {n{value}} verwenden:

repeat = {4{4'b1010}};   // 16'b1010101010101010 (4-mal wiederholen)

Dies ist nützlich für die Vorzeichenerweiterung:

signed_8bit = {4{sign_bit}, value_4bit};

Codebeispiel

module concatenation_demo;
  reg [3:0] upper, lower;
  reg [7:0] combined;
  reg [11:0] repeated;
  
  initial begin
    upper = 4'b1010;
    lower = 4'b1100;
    
    combined = {upper, lower};        // 10101100
    repeated = {3{4'b1010}};          // 101010101010
    
    $display("{upper, lower} = %b", combined);
    $display("{3{4'b1010}} = %b", repeated);
    $finish;
  end
endmodule

Ausgabe:

{upper, lower} = 10101100
{3{4'b1010}} = 101010101010

Wichtige Hinweise

  • Die Reihenfolge ist wichtig: {a, b} unterscheidet sich von {b, a}
  • Alle Teile müssen feste Breiten haben (keine Zahlen ohne Größenangabe)
  • Verkettung kann sowohl auf der linken als auch auf der rechten Seite von Zuweisungen verwendet werden
challenge icon

Aufgabe

Schreiben Sie die korrekten Verkettungsausdrücke für jede Aufgabe.

Was zu tun ist:

  1. Kombinieren Sie a und b zu einem 8-Bit-Ergebnis und speichern Sie es in combine1
  2. Kombinieren Sie c, d und e zu einem 12-Bit-Ergebnis und speichern Sie es in combine2
  3. Kombinieren Sie f und zwei Kopien von g zu einem 12-Bit-Ergebnis und speichern Sie es in combine3

Spickzettel

Der Verkettungsoperator { } fügt Bits zu einem breiteren Vektor zusammen. Die Ergebnisbreite entspricht der Summe aller Einzelbreiten.

// Basic: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low};  // high = obere Bits, low = untere Bits

// Mit Konstanten
data = {4'b1010, 4'b0000};  // 8'b10100000

Replikation {n{value}} wiederholt einen Wert n-mal:

repeated = {3{4'b1010}};              // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b};  // Vorzeichenerweiterung (sign extension)

Wichtige Regeln:

  • Die Reihenfolge ist wichtig: {a, b}{b, a}
  • Alle Teile müssen feste, bekannte Breiten haben
  • Kann auf beiden Seiten von Zuweisungen verwendet werden

Probier es selbst

module concatenation_challenge;
  reg [3:0] a, b;
  reg [3:0] c, d, e;
  reg [3:0] f, g;
  reg [7:0] combine1;
  reg [11:0] combine2, combine3;
  
  initial begin
    a = 4'b1010;
    b = 4'b0101;
    c = 4'b1111;
    d = 4'b0000;
    e = 4'b1100;
    f = 4'b1001;
    g = 4'b0110;
    
    combine1 = ______;   // Combine a and b into an 8-bit result 
    combine2 = ______;   // Combine c, d, and e into a 12-bit result 
    combine3 = ______;   // Combine f and two copies of g into a 12-bit result 
    
    $display("{a, b} = %b", combine1);
    $display("{c, d, e} = %b", combine2);
    $display("{f, g, g} = %b", combine3);
    $finish;
  end
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