Atribuição Bloqueante
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 49 de 90.
Verilog tem dois tipos de atribuições procedurais: bloqueante (=) e não bloqueante (<=). Nesta lição, vamos nos concentrar na atribuição bloqueante.
A atribuição bloqueante usa o operador =. Ela é chamada de "bloqueante" porque bloqueia a execução da próxima instrução até que a atribuição atual seja concluída. O código é executado passo a passo, em ordem.
Sintaxe:
variable = expression;Quando Usar Atribuição Bloqueante
A atribuição bloqueante (=) é usada para lógica combinacional: circuitos em que 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 subtratores
- Multiplexadores
- Decodificadores
Exemplo de Verilog:
always @(*) begin
sum = a + b; // Atribuição bloqueante
carry = a & b; // Atribuição bloqueante
endAtribuição bloqueante 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 a lógica combinacional.
Bloqueante vs. no bloqueante
Bloqueante (=) | No bloqueante (<=) | |
|---|---|---|
| Execução | Uma após a outra | Todas ao mesmo tempo |
| A próxima linha espera? | Sim | Não |
| Usos | Lógica combinacional | Lógica sequencial (flip-flops) |
Importante: não use atribuição bloqueante para flip-flops
Desafio
Adicione as atribuições bloqueantes ausentes para trocar os valores de x e y usando uma variável temporária.
O que fazer:
- Atribua o valor de
xatemp(salve x em temp) - Atribua o valor de
yax(mova y para x) - Atribua o valor de
tempay(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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um Módulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRevisão - Always vs InitialPratique por conta própria: Compilador de Verilog online