Menu
Coddy logo textTech

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;
ParteSignificado
assignPalavra-chave que inicia a atribuição contínua
wire_nameO fio (wire) sendo conduzido (não pode ser reg)
expressionO 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
endmodule

Saída:

a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1

Toda 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
endmodule

Todas 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
challenge icon

Desafio

O que fazer:

  1. Adicione a atribuição contínua que falta para tornar z igual a x 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 b

Múltiplas atribuições são executadas em paralelo:

assign x = a & b;
assign y = x | c; // y depende de x, todos se atualizam continuamente

Regras 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
  

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