Operador de Concatenação
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 27 de 90.
O operador de concatenação { } combina múltiplos sinais, constantes ou expressões em um único vetor maior. Ele é usado sempre que você precisa juntar bits para formar valores mais largos.
Quais valores funcionam com concatenação
Você pode concatenar:
- Wires e regs — qualquer sinal
- Constantes — números como
4'b1010ou8'hFF
- Expressões — resultados de operações como
a + b - Replicações — repetir um valor várias vezes
Todos os valores concatenados devem ter larguras fixas e conhecidas.
Sintaxe Básica: {value1, value2, value3, ...} A largura resultante é 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 torna-se os 4 bits superiores, low torna-se os 4 inferioresCombine com constantes:
data = {4'b1010, 4'b0000}; // 8'b10100000Combine mais de dois:
full = {a, b, c, d}; // Todas as larguras se somamReplicação
Você pode repetir um valor várias vezes usando {n{value}}:
repeat = {4{4'b1010}}; // 16'b1010101010101010 (repetir 4 vezes)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
endmoduleSaída:
{upper, lower} = 10101100
{3{4'b1010}} = 101010101010Notas Importantes
- A ordem importa:
{a, b}é diferente de{b, a} - Todas as partes devem ter larguras fixas (sem números sem tamanho definido)
- A concatenação pode ser usada em ambos os lados das atribuições
Desafio
Escreva as expressões de concatenação corretas para cada tarefa.
O que fazer:
- Combine
aebem um resultado de 8 bits e armazene emcombine1 - Combine
c,deeem um resultado de 12 bits e armazene emcombine2 - Combine
fe duas cópias degem um resultado de 12 bits e armazene emcombine3
Folha de consulta
O operador de concatenação { } junta bits para formar um vetor mais largo. A largura do resultado = soma de todas as larguras individuais.
// 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
A Replicação {n{value}} repete um valor n vezes:
repeated = {3{4'b1010}}; // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b}; // extensão de sinal
Regras principais:
- A ordem importa:
{a, b}≠{b, a} - Todas as partes devem ter larguras fixas e conhecidas
- Pode ser usado em ambos os lados de atribuições
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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo