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 13: Linha 13:
 
==Instruções sequencias==
 
==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'''
 
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:
+
*Atribuição de valor sobre '''SIGNAL''':
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] <signal_name> <= <expression>;
 
[rótulo:] <signal_name> <= <expression>;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
*Atribuição de valor sobre VARIABLE:
+
*Atribuição de valor sobre '''VARIABLE''':
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
 
[rótulo:] <variable_name> := <expression>;
 
[rótulo:] <variable_name> := <expression>;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
*afirmação '''NULL''' que não faz nada
 +
<syntaxhighlight lang=vhdl>
 +
[rótulo:] NULL;
 +
</syntaxhighlight>
  
 
:*Instrução '''IF'''
 
:*Instrução '''IF'''
Linha 43: Linha 47:
 
*Instrução '''CASE'''   
 
*Instrução '''CASE'''   
 
<syntaxhighlight lang=vhdl>
 
<syntaxhighlight lang=vhdl>
  [rótulo opcional:] CASE expressão IS
+
  [rótulo :] CASE expressão IS
 
                   WHEN valor =>                            -- valor único
 
                   WHEN valor =>                            -- valor único
 
                     afirmação_sequencial;                             
 
                     afirmação_sequencial;                             
Linha 60: Linha 64:
 
                     afirmação_sequencial;  
 
                     afirmação_sequencial;  
 
                     ...
 
                     ...
           END CASE;
+
           END CASE [rótulo];
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Linha 94: Linha 98:
 
[rótulo :] [FOR identificador IN faixa] LOOP
 
[rótulo :] [FOR identificador IN faixa] LOOP
 
             afirmação_sequencial;
 
             afirmação_sequencial;
             EXIT [rótulo] [WHEN condição];   -- Se a "condição" é verdadeira, termina o "LOOP"
+
            -- 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;
 
             afirmação_sequencial;
 
             ...
 
             ...
Linha 104: Linha 111:
 
[rótulo :] [FOR identificador IN faixa] LOOP
 
[rótulo :] [FOR identificador IN faixa] LOOP
 
             afirmação_sequencial;
 
             afirmação_sequencial;
             NEXT [rótulo] [WHEN condição];   -- Se a "condição" é verdadeira, não executa as linhas até a linha "END LOOP"
+
            -- NEXT incondicional.
                                              -- 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 [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;
 
             afirmação_sequencial;
 
             ...
 
             ...
 
           END LOOP [rótulo];
 
           END LOOP [rótulo];
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 21h55min de 1 de abril de 2024

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];