Mudanças entre as edições de "Folha de consulta de VHDL"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 2: Linha 2:
 
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'''.
 
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'''
+
* Declaração das bibliotecas e pacotes '''LIBRARY''' / '''PACKAGE'''
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
  library library_name;
 
  library library_name;
 
  use library_name.package_name.all;
 
  use library_name.package_name.all;
-- Pacotes mais utilizados:
+
</syntaxhighlight>
 +
 
 +
* Biblioteca '''ieee''' e seus pacotes mais utilizados:
 +
<syntaxhighlight lang=vhdl>
 
  library ieee;
 
  library ieee;
 
  -- para utilizar os tipos STD_LOGIC e STD_LOGIC_VECTOR e suas funções
 
  -- para utilizar os tipos STD_LOGIC e STD_LOGIC_VECTOR e suas funções
Linha 14: Linha 17:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
:* Declaração da '''ENTITY'''
+
* Declaração da '''ENTITY'''
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
  entity entity_name is
 
  entity entity_name is
Linha 33: Linha 36:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
:* Declaração da '''ARCHITECTURE'''
+
* Declaração da '''ARCHITECTURE'''
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
  architecture arch_name of entity_name is
 
  architecture arch_name of entity_name is
Linha 42: Linha 45:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
:* Declaração da '''CONFIGURATION'''
+
* Declaração da '''CONFIGURATION'''
  
 
==Instruções concorrentes==
 
==Instruções concorrentes==

Edição das 22h05min 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

[rótulo:] PROCESS [(lista_de_sensibilidade)] [IS]
             [parte_declarativa]
         BEGIN
             afirmação_sequencial;
             afirmação_sequencial;
             ...
         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ção_sequencial;
             afirmação_sequencial;
             ...
         ELSIF condição THEN
             afirmação_sequencial;
             afirmação_sequencial;
             ...
         ELSE
             afirmação_sequencial;
             afirmação_sequencial;
             ...
         END IF [rótulo];
  • Instrução CASE
 [rótulo :] CASE expressão IS
                  WHEN valor =>                             -- valor único
                    afirmação_sequencial;                            
                    afirmação_sequencial;                            
                    ...
                  WHEN valor1 | valor2 | ... | valorN  =>   -- lista de valores
                    afirmação_sequencial;                            
                    afirmação_sequencial;                            
                    ...
                  WHEN valor1 TO valor2 =>                  -- faixa de valores
                    afirmação_sequencial;                            
                    afirmação_sequencial; 
                    ...
                  WHEN OTHERS  => 
                    afirmação_sequencial;                            
                    afirmação_sequencial; 
                    ...
          END CASE [rótulo];
  • Instrução LOOP incondicional:
[rótulo:] LOOP
             afirmação_sequencial;
             afirmação_sequencial;
             ...
          END LOOP [rótulo];
  • Instrução FOR-LOOP:
[rótulo :] FOR identificador IN faixa LOOP
             afirmação_sequencial;
             afirmação_sequencial;
             ...
          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ção_sequencial;
             afirmação_sequencial;
             ...
          END LOOP [rótulo];
  • Instrução LOOP com EXIT:
[rótulo :] [FOR identificador IN faixa] LOOP
             afirmação_sequencial;
             -- EXIT incondicional.
             EXIT [rótulo_loop];
             -- EXIT condicional.
             EXIT [rótulo_loop] WHEN condição;	-- Se a "condição" é verdadeira, termina o "LOOP"
             afirmação_sequencial;
             ...
          END LOOP [rótulo];
  • Instrução LOOP com NEXT:
[rótulo :] [FOR identificador IN faixa] LOOP
             afirmação_sequencial;
             -- 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ção_sequencial;
             ...
          END LOOP [rótulo];