Atribuição Bloqueante
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 49 de 90.
O Verilog possui dois tipos de atribuições procedurais: blocking (=) e non-blocking (<=). Nesta lição, nos concentramos na blocking assignment.
A atribuição de tipo Blocking uses o operador =. É chamada de "blocking" porque ela bloqueia a execução da próxima instrução até que a atribuição (assignment) atual seja concluída. O código é executado passo a passo (step por step), em ordem.
Sintaxe:
variable = expression;Quando Usar Blocking assignment
Blocking assignment (=) é usada para lógica combinacional — circuitos onde as saídas mudam imediatamente quando as entradas mudam, sem clock e sem memória.
Exemplos de lógica combinacional:
- Portas AND / OR / XOR
- Somadores e subtraidores
- Multiplexadores
- Decodificadores
Exemplo em Verilog:
always @(*) begin
sum = a + b; // Atribuição bloqueante
carry = a & b; // Atribuição bloqueante
endBlocking em Blocos Always (Lógica Combinacional)
always @(*) begin
temp = a & b; // Passo 1
out = temp | c; // Passo 2 (usa temp do passo 1)
endA ordem importa. Isso é adequado para lógica combinacional.
Blocking vs Non-Blocking
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| Execution | Uma após a outra | Todas de uma vez |
| Next line waits? | Sim | Não |
| Uses | Lógica combinacional | Lógica sequencial (flip-flops) |
Importante: Não use atribuição impeditiva (Blocking) para Flip-Flops
Desafio
Adicione as atribuições bloqueantes que faltam para trocar os valores de x e y usando uma variável temporária.
O que fazer:
- Atribua o valor de
xparatemp(salve x em temp) - Atribua o valor de
yparax(mova y para x) - Atribua o valor de
tempparay(mova o x salvo para y)
Experimente você mesmo
module swap;
reg x, y;
reg temp;
initial begin
x = 1;
y = 0;
$display("Before swap: x=%d, y=%d", x, y);
// TODO: Passo 1 - Atribuir x a temp
// TODO: Passo 2 - Atribuir y a x
// TODO: Passo 3 - Atribuir temp a y
$display("After swap: x=%d, y=%d", x, y);
$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ódulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRecapitulação - Always vs Initial