Menu
Coddy logo textTech

Verkettungsoperator

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

Der Verknüpfungsoperator { } kombiniert mehrere Signale, Konstanten 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 für jede Aufgabe die richtigen Verkettungsausdrücke.

Was zu tun ist:

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

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