Menu
Coddy logo textTech

Verkettungsoperator

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

Der Verkettungsoperator (Concatenation Operator) { } kombiniert mehrere Signale, constants oder Ausdrücke zu einem einzigen größeren Vektor. Er wird immer dann verwendet, wenn Sie bits miteinander verbinden müssen, um breitere Werte zu bilden.

Welche Werte funktionieren mit Bitverknüpfung

Sie können Folgendes verknüpfen:

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

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

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

Beispiele

Füge zwei 4-Bit-Werte zu 8 Bits zusammen:

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

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

Combine mit constants:

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 mit {n{value}} mehrfach wiederholen:

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

Dies ist nützlich für die Vorzeichenerweiterung (Sign Extension):

signed_8bit = {{4{sign_bit}}, value_4bit};

Code-Beispiel

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 Breite (widths) 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 richtigen 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

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