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;| Parte | Significado |
|---|---|
assign | Palavra-chave que inicia o assignment contínuo |
wire_name | O wire que está sendo acionado (não pode ser reg) |
expression | O 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
endmoduleSaída:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1Sempre 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
endmoduleAll 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
Desafio
O que fazer:
- Add the missing continuous assignment that makes
zequal ax 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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online