Atribuição Contínua
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 37 de 90.
Em hardware, uma conexão é um fio físico que liga dois pontos em um circuito. Uma vez que o fio está no lugar, a conexão é permanente e está sempre ativa. Se uma extremidade muda, a outra extremidade muda imediatamente.
Em Verilog, precisamos de uma maneira de modelar esse comportamento. Queremos passar um valor para um wire e mantê-lo conectado para sempre. O processo de fazer isso é chamado de atribuição contínua.
A atribuição contínua utiliza a palavra-chave assign para criar uma conexão permanente entre um wire e uma expressão. O wire assume continuamente o valor da expressão — exatamente como um fio físico.
Pense nisso como soldar um fio em vez de escrever um valor uma única vez.
Sintaxe
assign wire_name = expression;| Parte | Significado |
|---|---|
assign | Palavra-chave que inicia a atribuição contínua |
wire_name | O fio (wire) sendo conduzido (não pode ser reg) |
expression | O valor que conduz o fio (wire) |
Exemplo Simples
wire out;
assign out = a & b;Isso significa: out é sempre igual a a AND b. Sempre que a ou b mudar, out muda imediatamente.
Como Funciona
Ao contrário de um reg que armazena um valor, um wire com atribuição contínua é constantemente atualizado:
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c segue a AND b em todos os momentos
initial begin
a = 0; b = 0;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0
a = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0 (1&0=0)
b = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=1 (1&1=1)
$finish;
end
endmoduleSaída:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1Toda vez que a ou b muda, c é atualizado automaticamente.
Atribuições Múltiplas
Você pode ter múltiplas atribuições contínuas em um módulo:
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y depende de x
endmoduleTodas as atribuições são executadas em paralelo, continuamente.
Usos Comuns
Atribuições contínuas são usadas para:
- Lógica combinacional simples (AND, OR, XOR)
- Conectar fios (wires) entre si
- Criar buffers tri-state
- Acionar saídas a partir de expressões combinacionais
Desafio
O que fazer:
- Adicione a atribuição contínua que falta para tornar
zigual ax AND y.
Folha de consulta
Atribuição contínua cria uma conexão permanente entre um wire e uma expressão usando a palavra-chave assign:
assign wire_name = expression;O wire reflete continuamente o valor da expressão — sempre que as entradas mudam, a saída é atualizada imediatamente:
wire out;
assign out = a & b; // out é sempre igual a a AND bMúltiplas atribuições são executadas em paralelo:
assign x = a & b;
assign y = x | c; // y depende de x, todos se atualizam continuamenteRegras principais: apenas wire (não reg) pode ser acionado por assign.
Experimente você mesmo
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Adicione a atribuição contínua que falta para tornar z igual a x AND y
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