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 111: Linha 111:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*afirmação '''NULL''' que não faz nada
+
*Afirmação '''NULL''' que não faz nada
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] NULL;
 
[rótulo:] NULL;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
:*Instrução '''IF'''
+
:*Afirmação '''IF'''
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] IF condição THEN
 
[rótulo:] IF condição THEN
Linha 127: Linha 127:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Instrução '''CASE'''   
+
*Afirmação '''CASE'''   
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
  [rótulo :] CASE expressão IS
 
  [rótulo :] CASE expressão IS
Linha 141: Linha 141:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Instrução '''LOOP''' incondicional:
+
*Afirmação '''LOOP''' incondicional:
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] LOOP
 
[rótulo:] LOOP
Linha 148: Linha 148:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Instrução '''FOR-LOOP''':
+
*Afirmação '''FOR-LOOP''':
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo :] FOR identificador IN faixa LOOP
 
[rótulo :] FOR identificador IN faixa LOOP
Linha 155: Linha 155:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Instrução '''WHILE-LOOP''':
+
*Afirmação '''WHILE-LOOP''':
 
<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
Linha 162: Linha 162:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Instrução LOOP com '''EXIT''':
+
*Afirmação LOOP com '''EXIT''':
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo :] [FOR identificador IN faixa] LOOP
 
[rótulo :] [FOR identificador IN faixa] LOOP
Linha 174: Linha 174:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Instrução LOOP com '''NEXT''':
+
*Afirmação LOOP com '''NEXT''':
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo :] [FOR identificador IN faixa] LOOP
 
[rótulo :] [FOR identificador IN faixa] LOOP

Edição das 22h22min 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;
  • Afirmaçã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];
  • Afirmaçã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];
  • Afirmação LOOP incondicional:
[rótulo:] LOOP
                 afirmações_sequenciais;
          END LOOP [rótulo];
  • Afirmação FOR-LOOP:
[rótulo :] FOR identificador IN faixa LOOP
                 afirmações_sequenciais;
          END LOOP [rótulo];
  • Afirmaçã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];
  • Afirmaçã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];
  • Afirmaçã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];