Blocking Assignment
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.
Blocking assignment uses o operador =. Ele é chamado de "bloqueante" porque bloqueia a execução da próxima instrução até que a assignment atual seja concluída. O código é executado step a step, 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
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 a lógica combinacional.
Blocking vs Non-Blocking
Blocking (=) | Não bloqueante (<=) | |
|---|---|---|
| Execução | Um após o outro | Todos ao mesmo tempo |
| A próxima linha espera? | Sim | Não |
| Uses | Lógica combinacional | Lógica sequencial (flip-flops) |
Importante: não use Blocking 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:
- Assign o valor de
xatemp(salve x em temp) - Assign o valor de
yax(mova y into x) - Assign o valor de
tempay(mova saved x into 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 projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online