Atribuição com Operadores
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 38 de 90.
Uma vez que você entenda a atribuição contínua, você pode combiná-la com operadores para criar lógica útil. A instrução assign pode usar qualquer operador para acionar um wire.
Sintaxe Básica
assign wire_name = expression;A expressão pode incluir:
- Operadores aritméticos (
+,-,*,/) - Operadores bit a bit (
&,|,^,~) - Operadores lógicos (
&&,||,!)
- Operadores de comparação (
>,<,==,!=) - Operadores de deslocamento (
<<,>>) - Operador condicional (
? :)
Exemplos com Diferentes Operadores
AND Bit a Bit:
assign out = a & b;Adição:
assign sum = a + b;Comparação:
assign is_greater = (a > b);Condicional (multiplexador):
assign out = sel ? a : b;Deslocamento:
assign shifted = data << 2;Concatenação:
assign bus = {high_byte, low_byte};Exemplo de Código
module assign_operators (
input [3:0] a, b,
input sel,
output [3:0] and_out,
output [4:0] sum_out,
output is_equal,
output mux_out
);
assign and_out = a & b; // AND bit a bit
assign sum_out = a + b; // Adição
assign is_equal = (a == b); // Comparação
assign mux_out = sel ? a : b; // Condicional (multiplexador)
endmoduleMúltiplos Operadores em uma Única Atribuição
Você pode combinar operadores em uma única expressão:
assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data; // XOR de redução (número ímpar de 1's)Precedência de Operadores
O Verilog segue a precedência de operadores padrão. Use parênteses ( ) para tornar sua intenção clara:
// Pouco claro
assign out = a & b | c;
// Claro
assign out = (a & b) | c;Desafio
Adicione as instruções assign ausentes com base nas tarefas.
O que fazer:
- Torne
and_resultigual ainput_a AND input_b(bit a bit) - Torne
or_resultigual ainput_a OR input_b(bit a bit) - Torne
xor_resultigual ainput_a XOR input_b(bit a bit) - Torne
not_resultigual aNOT input_a(bit a bit)
Folha de consulta
A instrução assign suporta vários operadores para lógica combinacional:
assign wire_name = expression;Tipos de operadores:
- Bitwise:
&,|,^,~ - Aritméticos:
+,-,*,/ - Lógicos:
&&,||,! - Comparação:
>,<,==,!= - Deslocamento (Shift):
<<,>> - Condicional:
? : - Concatenação:
{ }
assign and_out = a & b; // AND bit a bit
assign sum_out = a + b; // Adição
assign is_equal = (a == b); // Comparação
assign mux_out = sel ? a : b; // Multiplexador
assign bus = {high, low}; // Concatenação
assign parity = ^data; // XOR de reduçãoUse parênteses para esclarecer a precedência:
assign out = (a & b) | c;Experimente você mesmo
module assign_challenge (
input input_a,
input input_b,
output and_result,
output or_result,
output xor_result,
output not_result
);
// TODO: Adicione instruções assign para:
// and_result = input_a & input_b
// or_result = input_a | input_b
// xor_result = input_a ^ input_b
// not_result = ~input_a
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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo