Menu
Coddy logo textTech

Concatenation Operator

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

Der Verkettungsoperator { } kombiniert mehrere Signale, constants oder Ausdrücke zu einem einzigen größeren Vektor. Er wird immer dann verwendet, wenn du bits zusammenfügen musst, um breitere Werte zu bilden.

Welche Werte mit der Verkettung funktionieren

Du kannst Folgendes verketten:

  • Leitungen und Register: jedes Signal
  • Konstanten: Zahlen wie 4'b1010 oder 8'hFF
  • Ausdrücke: Ergebnisse von Operationen wie a + b
  • Replikationen: einen Wert mehrfach wiederholen

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

Grundlegende Syntax:  {value1, value2, value3, ...} Die Breite des Ergebnisses ist die Summe aller einzelnen Breiten.

Beispiele

Zwei 4-Bit-Werte zu 8 Bits kombinieren:

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

Mehr als zwei kombinieren:

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

Replikation

Du kannst einen Wert mithilfe von {n{value}} mehrfach wiederholen:

repeated = {4{4'b1010}};   // 16'b1010101010101010 (repeat 4 times)

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)
  • Konkatenation kann sowohl auf der linken als auch auf der rechten Seite von Zuweisungen verwendet werden
challenge icon

Aufgabe

Schreibe die korrekten Konkatenationsausdrücke für jede Aufgabe.

Was zu tun ist:

  1. Combine a und b in ein 8-bit result und speichere es in combine1
  2. Combine c, d und e in ein 12-bit result und speichere es in combine2
  3. Combine f und zwei copies von g in ein 12-bit result und speichere es in combine3

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

Übe selbstständig: Online-Verilog-Compiler