UNIDADE 3
CAPÍTULO 2
Comandos e estruturas
Como vimos, existe toda uma estrutura de um projeto em VHDL e veremos que dentro dessas estruturas existem expressões compostas de comandos, variáveis e operadores.

variáveis
As variáveis são usadas apenas em processos e subprogramas (funções e procedimentos) e suas atribuições são sequenciais, ou seja, deve-se ter atenção na ordem delas. O fato de que as variáveis só são usadas em processos é a principal diferença com relação ao sinal.
A variável deve ser declarada depois do comando “PROCESS” e antes do comando “BEGIN” com o seguinte padrão:
-
VARIABLE <Nome_Variavel> : <Tipo> [:= <Valor>];
-
VARIABLE opcode: Bit_Vector (3 downto 0) := “0000”; VARIABLE Freq: Interger;
A decisão entre qual utilizar dependerá do objetivo do projeto, por exemplo no quadro a seguir:
Declaração genérica de uma variável
Caso 1
A <= B;
A := B;
Caso 2
B <= A;
B := A;
No primeiro caso, ocorre uma permuta dos valores enquanto que, no segundo, o A recebe o valor anterior de B.
Operações e expressões
Os operadores são divididos em classes de acordo com sua precedência e estão relacionados no quadro a seguir.

Operadores de Adição
Os operadores de adição e subtração tratam os tipos numéricos e o operador de concatenação trata vetor unidimensional e elementos do mesmo tipo.


Por meio de expressões, é possível realizar operações com objetos do mesmo tipo. Essas expressões são formulas compostas de sinais e operadores.
Sua atribuição é dada utilizando o delimitador “<=”, temos, portanto, a expressão genérica:
SINAL <= expressão;
Ou
x <= a;
Que significa que X assume o valor de A.
Comandos e laços de repetições
Existem alguns comandos que refletem algumas condições que, quando atendidas,
executam alguma operação e aqui trataremos deles:
Construção “when Else”
Essa construção permite que associemos um valor a um sinal, se caso algumas condições forem satisfeitas.
Uma lista de opções é apresentada estabelecendo qual valor de uma expressão deve ser transferido
a um sinal de destino. A primeira condição verdadeira definirá a expressão transferida.
Formato utilizado para o comando “when else”
Sinal_destino <= expressao_a When condicao_1 Else
expressao_b When condicao_2 Else
expressao_c;

Construção “with Select”
Essa construção transfere um valor a um sinal de destino seguindo uma relação de opções. Todas as condições de seleção devem ser atendidas e serem mutuamente exclusivas.
Normalmente, as opções são agrupadas por meio do uso de “|”, equivalente ao “ou”, podendo também utilizar as palavras “To” e “Downto”.

Estrutura if
Utiliza-se em situações que requerem a execução de uma sequência dependendo de uma
ou mais condições. Comumente é usada por meio da estrutura “IF-THEN-END-IF”.

Nesse exemplo, a condição (chave=1) é verificada e, em caso verdadeiro, o “valor_saida” é atribuído à variável “saida”, senão “saida” recebe o valor 228 e o “registrador” recebe o valor de “valor_saida”.
Estrutura Case
Essa estrutura realiza uma comparação de valores com estrutura “CASE-IS-WHEN- ENDCASE”. Frequentemente usada em aplicações em que uma determinada variável pode assumir uma quantidade limitada de valores, sendo cada uma associada a um conjunto de operações.

Estrutura “while”
A estrutura “While” atua como um laço de repetição que permite que um bloco de expressões seja “executado” repetidamente até que uma determinada condição seja inválida.

Estrutura “for”
A estrutura “For” atua como um laço de repetição que permite que um bloco de expressões seja “executado” repetidamente até uma contagem predefinida.
