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 conecta 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.

No 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 continuous assignment.

A atribuição contínua (continuous assignment) usa a palavra-chave assign para criar uma conexão permanente entre um wire e uma expression. O wire assume continuamente o valor da expression — assim 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 o continuous assignment
wire_nameO wire sendo acionado (não pode ser reg)
expressionO valor that aciona o wire

Exemplo Simples

wire out;
assign out = a & b;

Isso significa: out é always equal a a AND b. Sempre que a ou b muda, out muda imediatamente.

Como Funciona

Diferente de um reg que armazena um valor, um wire com atribução contínua (continuous assignment) é atualizado constantemente:

module continuous_demo;
  reg a, b;
  wire c;
  
  assign c = a & b;   // c segue a AND b o tempo todo
  
  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

Output:

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

Sempre que a ou b muda, c se atualiza automaticamente.

Múltiplas Atribuições

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 executam em paralelo, continuamente.

Usos Comuns

Atribuições contínuas (assign) são usadas para:

  • Lógica combinacional simples (AND, OR, XOR)
  • Conectar wires entre si
  • Criar buffers tri-state
  • Acionar saídas a partir de expressões combinacionais
challenge icon

Desafio

O que fazer:

  1. Add a missing continuous assignment that makes z equal a x AND y.

Experimente você mesmo

module continuous_challenge (
  input x,
  input y,
  output z
);
  
  // TODO: Adicione a atribuição contínua faltante que faz 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