Menu
Coddy logo textTech

Continuous Assignment

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.

Em Verilog, precisamos de uma forma 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 continuous usa 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, 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 assignment contínuo
wire_nameO wire que está sendo acionado (não pode ser reg)
expressionO valor que aciona o wire

Exemplo simples

wire out;
assign out = a & b;

Isso significa: out is always equal to 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

All assignments são executadas em paralelo, continuously.

Usos comuns

As continuous assignment são usadas para:

  • Lógica combinacional simples (AND, OR, XOR)
  • Conectar wire entre si
  • Criar buffers de três estados
  • Gerar output a partir de expressões combinacionais
challenge icon

Desafio

O que fazer:

  1. Add the 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 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