Menu
Coddy logo textTech

Operatore di concatenazione

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 27 di 90.

L'operatore di concatenazione { } combina più segnali, costanti o espressioni in un unico vettore più grande. Si usa ogni volta che devi unire bit per formare valori più ampi.

Quali valori funzionano con la concatenazione

Puoi concatenare:

  • Wire e registri: qualsiasi segnale
  • Costanti: numeri come 4'b1010 o 8'hFF
  • Espressioni: risultati di operazioni come a + b
  • Replicazioni: ripetere un valore più volte

Tutti i valori concatenati devono avere larghezze fisse e note.

Sintassi di base:  {value1, value2, value3, ...} La larghezza del risultato è la somma di tutte le larghezze individuali.

Esempi

Combina due valori a 4 bit in 8 bit:

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

word = {high, low};     // high diventa i 4 bit più significativi, low diventa i 4 bit meno significativi

Combina con le costanti:

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

Combina più di due:

full = {a, b, c, d};   // All widths add up

Replicazione

Puoi ripetere un valore più volte usando {n{value}}:

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

Questo è utile per l'estensione del segno:

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

Esempio di codice

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

Output:

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

Note importanti

  • L’ordine è importante: {a, b} è diverso da {b, a}
  • Tutte le parti devono avere larghezze fisse (nessun numero senza dimensione)
  • La concatenazione può essere usata sia sul lato sinistro che su quello destro delle assegnazioni
challenge icon

Sfida

Scrivi le espressioni di concatenazione corrette per ogni attività.

Cosa fare:

  1. Concatena a e b in un risultato a 8 bit e memorizzalo in combine1
  2. Concatena c, d ed e in un risultato a 12 bit e memorizzalo in combine2
  3. Concatena f e due copie di g in un risultato a 12 bit e memorizzalo in combine3

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online