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. Depois que o fio é colocado, a conexão é permanente e está sempre ativa. Se uma extremidade mudar, a outra extremidade muda imediatamente.

No Verilog, precisamos de uma maneira de modelar esse comportamento. Queremos passar um valor para um fio e mantê-lo conectado para sempre. O processo de fazer isso é chamado de atribuição contínua.

A atribuição contínua usa a palavra-chave assign para criar uma conexão permanente entre um fio e uma expressão. O fio assume continuamente o valor da expressão, 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 a atribuição contínua
wire_nameO fio que está sendo acionado (não pode ser reg)
expressionO valor que aciona o fio

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 é atualizado continuamente:

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

Saída:

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 é atualizado automaticamente.

Múltiplas atribuições

Você pode ter várias 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

As atribuições contínuas são usadas para:

  • Lógica combinacional simples (AND, OR, XOR)
  • Conectar fios entre si
  • Criar buffers de três estados
  • Acionar saídas a partir de expressões combinacionais
challenge icon

Desafio

O que fazer:

  1. Adicione a atribuição contínua ausente que faz z ser igual a x AND y.

Experimente você mesmo

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

Pratique por conta própria: Compilador de Verilog online