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 1: Linha 1:
 +
==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'''
 +
<syntaxhighlight lang=vhdl>
 +
library library_name;
 +
use library_name.package_name.all;
 +
-- 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;
 +
</syntaxhighlight>
 +
 +
:* Declaração da '''ENTITY'''
 +
<syntaxhighlight lang=vhdl>
 +
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];
 +
</syntaxhighlight>
 +
 +
:* Declaração da '''ARCHITECTURE'''
 +
<syntaxhighlight lang=vhdl>
 +
architecture arch_name of entity_name is
 +
  [declarative_part]
 +
begin
 +
  statement_part
 +
end [architecture] [arch_name];
 +
</syntaxhighlight>
 +
 +
:* Declaração da '''CONFIGURATION'''
 +
 
==Instruções concorrentes==
 
==Instruções concorrentes==
  

Edição das 22h04min 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;
 -- 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];