Menu
Coddy logo textTech

Operador de concatenación

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 27 de 90.

El operador de concatenación { } combina múltiples señales, constantes o expresiones en un único vector más grande. Se utiliza siempre que necesites unir bits para formar valores más anchos.

Qué valores funcionan con la concatenación

Puedes concatenar:

  • Wires y regs — cualquier señal
  • Constantes — números como 4'b1010 o 8'hFF
  • Expresiones — resultados de operaciones como a + b
  • Replicaciones — repetir un valor varias veces

Todos los valores concatenados deben tener anchos fijos y conocidos.

Sintaxis básica:  {value1, value2, value3, ...} El ancho del resultado es la suma de todos los anchos individuales.

Ejemplos

Combinar dos valores de 4 bits en 8 bits:

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

word = {high, low};     // high se convierte en los 4 bits superiores, low se convierte en los 4 inferiores

Combinar con constantes:

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

Combina más de dos:

full = {a, b, c, d};   // Todos los anchos se suman

Replicación

Puedes repetir un valor varias veces usando {n{value}}:

repeat = {4{4'b1010}};   // 16'b1010101010101010 (repetir 4 veces)

Esto es útil para la extensión de signo:

signed_8bit = {4{sign_bit}, value_4bit};

Ejemplo 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

Resultado:

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

Notas importantes

  • El orden importa: {a, b} es diferente de {b, a}
  • Todas las partes deben tener anchos fijos (sin números sin tamaño)
  • La concatenación se puede utilizar tanto en el lado izquierdo como en el derecho de las asignaciones
challenge icon

Desafío

Escribe las expresiones de concatenación correctas para cada tarea.

Qué hacer:

  1. Combina a y b en un resultado de 8 bits y almacénalo en combine1
  2. Combina c, d y e en un resultado de 12 bits y almacénalo en combine2
  3. Combina f y dos copias de g en un resultado de 12 bits y almacénalo en combine3

Hoja de referencia

El operador de concatenación { } une bits para formar un vector más ancho. El ancho del resultado = suma de todos los anchos individuales.

// Basic: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low};  // high = bits superiores, low = bits inferiores

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

La replicación {n{value}} repite un valor n veces:

repeated = {3{4'b1010}};              // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b};  // extensión de signo

Reglas clave:

  • El orden importa: {a, b}{b, a}
  • Todas las partes deben tener anchos fijos y conocidos
  • Se puede utilizar en ambos lados de las asignaciones

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos