Mudanças entre as edições de "Folha de consulta de VHDL"
Ir para navegação
Ir para pesquisar
Linha 119: | Linha 119: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo:] IF condição THEN | [rótulo:] IF condição THEN | ||
− | + | afirmações_sequenciais; | |
− | |||
− | |||
ELSIF condição THEN | ELSIF condição THEN | ||
− | + | afirmações_sequenciais; | |
− | |||
− | |||
ELSE | ELSE | ||
− | + | afirmações_sequenciais; | |
− | |||
− | |||
END IF [rótulo]; | END IF [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 136: | Linha 130: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo :] CASE expressão IS | [rótulo :] CASE expressão IS | ||
− | + | WHEN valor => -- valor único | |
− | + | afirmações_sequenciais; | |
− | + | WHEN valor1 | valor2 | ... | valorN => -- lista de valores | |
− | + | afirmações_sequenciais; | |
− | + | WHEN valor1 TO valor2 => -- faixa de valores | |
− | + | afirmações_sequenciais; | |
− | + | WHEN OTHERS => | |
− | + | afirmações_sequenciais; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
END CASE [rótulo]; | END CASE [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 158: | Linha 144: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo:] LOOP | [rótulo:] LOOP | ||
− | + | afirmações_sequenciais; | |
− | |||
− | |||
END LOOP [rótulo]; | END LOOP [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 167: | Linha 151: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo :] FOR identificador IN faixa LOOP | [rótulo :] FOR identificador IN faixa LOOP | ||
− | + | afirmações_sequenciais; | |
− | |||
− | |||
END LOOP [rótulo]; | END LOOP [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 176: | Linha 158: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo :] WHILE condição LOOP -- Executa as "afirmações enquanto a "condição" for verdadeira | [rótulo :] WHILE condição LOOP -- Executa as "afirmações enquanto a "condição" for verdadeira | ||
− | + | afirmações_sequenciais; | |
− | |||
− | |||
END LOOP [rótulo]; | END LOOP [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 185: | Linha 165: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo :] [FOR identificador IN faixa] LOOP | [rótulo :] [FOR identificador IN faixa] LOOP | ||
− | + | afirmações_sequenciais;; | |
-- EXIT incondicional. | -- EXIT incondicional. | ||
EXIT [rótulo_loop]; | EXIT [rótulo_loop]; | ||
-- EXIT condicional. | -- EXIT condicional. | ||
EXIT [rótulo_loop] WHEN condição; -- Se a "condição" é verdadeira, termina o "LOOP" | EXIT [rótulo_loop] WHEN condição; -- Se a "condição" é verdadeira, termina o "LOOP" | ||
− | + | afirmações_sequenciais; | |
− | |||
END LOOP [rótulo]; | END LOOP [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 198: | Linha 177: | ||
<syntaxhighlight lang=vhdl> | <syntaxhighlight lang=vhdl> | ||
[rótulo :] [FOR identificador IN faixa] LOOP | [rótulo :] [FOR identificador IN faixa] LOOP | ||
− | + | afirmações_sequenciais; | |
-- NEXT incondicional. | -- NEXT incondicional. | ||
NEXT [rótulo_loop]; -- Não executa as linhas até a linha "END LOOP", e incrementa o "identificador". | NEXT [rótulo_loop]; -- Não executa as linhas até a linha "END LOOP", e incrementa o "identificador". | ||
-- NEXT condicional. | -- NEXT condicional. | ||
NEXT [rótulo_loop] WHEN condição; -- Se a "condição" é verdadeira, não executa as linhas até a linha "END LOOP", e incrementa o "identificador". | NEXT [rótulo_loop] WHEN condição; -- Se a "condição" é verdadeira, não executa as linhas até a linha "END LOOP", e incrementa o "identificador". | ||
− | + | afirmações_sequenciais; | |
− | |||
END LOOP [rótulo]; | END LOOP [rótulo]; | ||
</syntaxhighlight> | </syntaxhighlight> |
Edição das 22h21min de 1 de abril de 2024
Estrutura do código VHDL
No código VHDL cada arquivo é composto pela estrutura básica na qual se declaram os LIBRARY / PACKAGE utilizados, em seguida se declara a ENTITY e a ARCHITECTURE.
- Declaração das bibliotecas e pacotes LIBRARY / PACKAGE
library library_name;
use library_name.package_name.all;
- Biblioteca ieee e seus pacotes mais utilizados:
library ieee;
-- para utilizar os tipos STD_LOGIC e STD_LOGIC_VECTOR e suas funções
use ieee.std_logic_1164.all;
-- para utilizar os tipos SIGNED e UNSIGNED e suas funções
use ieee.numeric_std.all;
- Declaração da ENTITY
entity entity_name is
[generic (
cons_name1: const_type const_value;
cons_name2: const_type const_value;
...
cons_nameN: const_type const_value);]
[port (
signal_name1: mode signal_type;
signal_name2: mode signal_type;
...
signal_nameN: mode signal_type);]
[declarative_part]
[begin
statement_part]
end [entity] [entity_name];
- Declaração da ARCHITECTURE
architecture arch_name of entity_name is
[declarative_part]
begin
statement_part
end [architecture] [arch_name];
- Declaração da CONFIGURATION
Instruções concorrentes
- Afirmação WHEN-ELSE
[rótulo:] <signal_alvo> <=
<valor> WHEN <condição> ELSE
<valor> WHEN <condição> ELSE
...
<valor>;
- Afirmação WITH-SELECT
[rótulo:] WITH <expressão> SELECT
<signal_alvo> <=
<valor> WHEN <escolha>,
<valor> WHEN <escolha>,
...
<valor> WHEN OTHERS;
- Afirmação FOR-GENERATE
É preciso ter atenção que no VHDL apenas nas afirmação do tipo GENERATE o rótulo é obrigatório
'''rótulo_obrigatório''':
FOR identificador IN faixa GENERATE
[Parte_Declarativa
BEGIN]
afirmações_concorrentes
END GENERATE [rótulo];
- Afirmação IF-GENERATE
É preciso ter atenção que no VHDL apenas nas afirmação do tipo GENERATE o rótulo é obrigatório
'''rótulo_obrigatório''':
IF condição GENERATE
afirmações_concorrentes
END GENERATE [rótulo];
- Afirmação PROCESS
A afirmação PROCESS é uma instrução concorrente, mas internamente a ela todas as instruções/afirmações devem ser sequenciais
[rótulo:] PROCESS [(lista_de_sensibilidade)] [IS]
[parte_declarativa]
BEGIN
afirmações_sequenciais;
END PROCESS [rótulo];
Instruções sequencias
Essas instruções devem ser utilizadas dentro de um PROCESS, ou FUNCTION, ou PROCEDURE. Elas não podem ser usadas diretamente na ARCHITECTURE
- Atribuição de valor sobre SIGNAL:
[rótulo:] <signal_name> <= <expression>;
- Atribuição de valor sobre VARIABLE:
[rótulo:] <variable_name> := <expression>;
- afirmação NULL que não faz nada
[rótulo:] NULL;
- Instrução IF
[rótulo:] IF condição THEN
afirmações_sequenciais;
ELSIF condição THEN
afirmações_sequenciais;
ELSE
afirmações_sequenciais;
END IF [rótulo];
- Instrução CASE
[rótulo :] CASE expressão IS
WHEN valor => -- valor único
afirmações_sequenciais;
WHEN valor1 | valor2 | ... | valorN => -- lista de valores
afirmações_sequenciais;
WHEN valor1 TO valor2 => -- faixa de valores
afirmações_sequenciais;
WHEN OTHERS =>
afirmações_sequenciais;
END CASE [rótulo];
- Instrução LOOP incondicional:
[rótulo:] LOOP
afirmações_sequenciais;
END LOOP [rótulo];
- Instrução FOR-LOOP:
[rótulo :] FOR identificador IN faixa LOOP
afirmações_sequenciais;
END LOOP [rótulo];
- Instrução WHILE-LOOP:
[rótulo :] WHILE condição LOOP -- Executa as "afirmações enquanto a "condição" for verdadeira
afirmações_sequenciais;
END LOOP [rótulo];
- Instrução LOOP com EXIT:
[rótulo :] [FOR identificador IN faixa] LOOP
afirmações_sequenciais;;
-- EXIT incondicional.
EXIT [rótulo_loop];
-- EXIT condicional.
EXIT [rótulo_loop] WHEN condição; -- Se a "condição" é verdadeira, termina o "LOOP"
afirmações_sequenciais;
END LOOP [rótulo];
- Instrução LOOP com NEXT:
[rótulo :] [FOR identificador IN faixa] LOOP
afirmações_sequenciais;
-- NEXT incondicional.
NEXT [rótulo_loop]; -- Não executa as linhas até a linha "END LOOP", e incrementa o "identificador".
-- NEXT condicional.
NEXT [rótulo_loop] WHEN condição; -- Se a "condição" é verdadeira, não executa as linhas até a linha "END LOOP", e incrementa o "identificador".
afirmações_sequenciais;
END LOOP [rótulo];