Menu
Coddy logo textTech

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
end

Blocking em Blocos always (Lógica combinacional)

always @(*) begin
  temp = a & b;    // Passo 1
  out = temp | c;  // Passo 2 (usa temp do passo 1)
end

A ordem importa. Isso é adequado para a lógica combinacional.

Blocking vs Non-Blocking

 Blocking (=)Não bloqueante (<=)
ExecuçãoUm após o outroTodos ao mesmo tempo
A próxima linha espera?SimNão
UsesLógica combinacionalLógica sequencial (flip-flops)

Importante: não use Blocking para flip-flops

challenge icon

Desafio

Adicione as atribuições bloqueantes ausentes para trocar os valores de x e y usando uma variável temporária.

O que fazer:

  1. Assign o valor de x a temp (salve x em temp)
  2. Assign o valor de y a x (mova y into x)
  3. Assign o valor de temp a y (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
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online