Dominando Lógica Condicional em VHDL: If-Then-Elsif-Else Explicado
No tutorial anterior, usamos uma expressão condicional com a instrução Wait Until para disparar um processo apenas quando dois sinais de contador coincidiam. E se precisarmos que o programa execute ações diferentes baseadas em entradas variadas?
A construção If-Then-Elsif-Else permite ramificar nossa lógica. Dependendo do valor de uma variável ou do resultado de uma expressão, o programa pode seguir caminhos distintos.
Este artigo faz parte da série Tutoriais Básicos de VHDL.
Sintaxe Básica
A forma canônica é:
if <condição> then elsif <condição> then else end if;
As cláusulas elsif e else são opcionais, e elsif pode aparecer múltiplas vezes. Uma <condição> pode ser um literal booleano ou uma expressão que avalia para true ou false.
Exemplo: MeuContador < 10 é verdadeiro quando MeuContador é menor que dez.
Operadores Relacionais
| = | igual |
| /= | diferente |
| < | menor que |
| <= | menor ou igual |
| > | maior que |
| >= | maior ou igual |
Operadores Lógicos
| not a | verdadeiro se a for falso |
| a and b | verdadeiro se a e b forem verdadeiros |
| a or b | verdadeiro se a ou b forem verdadeiros |
| a nand b | verdadeiro se a ou b for falso |
| a nor b | verdadeiro se a e b forem falsos |
| a xor b | verdadeiro se exatamente um de a ou b for verdadeiro |
| a xnor b | verdadeiro se a e b forem iguais |
Exercício
Abaixo está um exemplo completo de VHDL que demonstra a construção If-Then-Elsif-Else em ação.
Código final:
entity T08_IfTb is end entity; architecture sim of T08_IfTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; process is begin if CountUp > CountDown then report "CountUp é maior"; elsif CountUp < CountDown then report "CountDown é maior"; else report "São iguais"; end if; wait on CountUp, CountDown; end process; end architecture;
Saída do console do simulador ao executar o modelo no ModelSim:
VSIM 2> run # ** Note: CountDown é maior # Time: 0 ns Iteration: 0 Instance: /t08_iftb # ** Note: CountDown é maior # Time: 0 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown é maior # Time: 10 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown é maior # Time: 20 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown é maior # Time: 30 ns Iteration: 1 Instance: /t08_iftb # ** Note: São iguais # Time: 40 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountUp é maior # Time: 50 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountUp é maior # Time: 60 ns Iteration: 1 Instance: /t08_iftb ...
Análise
Inicializamos CountDown com 10 e CountUp com 0. Ambos os contadores são atualizados simultaneamente a cada 10 ns no primeiro processo. O segundo processo espera por esses sinais, então dispara cada vez que eles mudam. O bloco If-Then-Elsif-Else então seleciona um de três ramos: CountUp > CountDown, CountUp < CountDown ou CountUp = CountDown. Embora um else explícito não seja obrigatório, incluí-lo é uma prática recomendada, garantindo que todos os casos extremos sejam tratados.
O rastreamento do console confirma que o segundo processo avalia a condição após cada atualização, imprimindo a mensagem apropriada.
Conclusão
- Use If-Then sozinho ou combine com Elsif e Else para cobrir todos os cenários possíveis.
- Condições podem incluir expressões relacionais, lógicas e aritméticas.
Continue para o próximo tutorial »
VHDL
- Como o Molibdênio Molda a Indústria Moderna: Usos, Benefícios e Dinâmica de Fornecimento
- Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
- Finalizando Graciosamente uma Simulação de Testbench VHDL
- Implementando um Controlador PWM em VHDL: Projeto, Simulação e Demo em FPGA
- Gerando Números Aleatórios em VHDL: De Uniforme a OSVVM
- Aproveitando Procedimentos In-Process para Design de FSM em VHDL Mais Limpo
- Usando Funções Impuras em VHDL: Melhorando Legibilidade e Manutenibilidade de FSM
- Dominando Funções VHDL: Guia Prático para Design Eficiente
- Projetando uma Máquina de Estados Finitos em VHDL: Exemplo Prático de Semáforo
- Dominando Técnicas de Retificadora de Ferramentas e Cortadores: Guia Prático