Menu
Coddy logo textTech

Concatenation Operator

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 27 de 90.

O operador de concatenação { } combina vários sinais, constants ou expressões em um único vetor maior. Ele é usado sempre que você precisa juntar bits para formar valores mais amplos.

Quais valores funcionam com concatenação

Você pode concatenar:

  • Fios e regs: qualquer sinal
  • Constantes: números como 4'b1010 ou 8'hFF
  • Expressões: resultados de operações como a + b
  • Repetições: repetição de um valor várias vezes

Todos os valores concatenados devem ter larguras fixas e conhecidas.

Sintaxe básica:  {value1, value2, value3, ...} A largura de result é a soma de todas as larguras individuais.

Exemplos

Combine dois valores de 4 bits em 8 bits:

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

word = {high, low};     // high se torna os 4 bits superiores, low se torna os 4 inferiores

Combine com constantes:

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

Combine mais de dois:

full = {a, b, c, d};   // Todas as larguras somam

Replicação

Você pode repetir um valor várias vezes usando {n{value}}:

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

Isso é útil para extensão de sinal:

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

Exemplo de código

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

Saída:

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

Notas importantes

  • A ordem importa: {a, b} é diferente de {b, a}
  • Todas as partes devem ter larguras fixas (nenhum número sem tamanho)
  • A concatenação pode ser usada tanto no lado esquerdo quanto no lado direito das atribuições
challenge icon

Desafio

Escreva as expressões corretas de concatenação para cada tarefa.

O que fazer:

  1. Combine a e b em um resultado de 8-bit e armazene em combine1
  2. Combine c, d e e em um resultado de 12-bit e armazene em combine2
  3. Combine f e two cópias de g em um resultado de 12-bit e armazene em combine3

Experimente você mesmo

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 seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online