Exemplo de Procedure VHDL: Incrementando um Standard Logic Vector
O que é uma Procedure VHDL?
Procedimentos pertencem à família de subprogramas no VHDL. Eles encapsulam lógica reutilizável, reduzindo duplicação de código e melhorando manutenibilidade. Definindo um procedimento uma vez, você pode invocá-lo de múltiplos processos ou arquiteturas, garantindo comportamento consistente.
Exemplo: Incrementando um std_logic_vector
O exemplo a seguir demonstra um procedimento que recebe um std_logic_vector de 8 bits, adiciona um a ele e retorna o resultado. O procedimento também inclui um wait de 1 ns para ilustrar controle de timing dentro de um testbench.
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity example_procedure_simple is end example_procedure_simple; architecture behave of ex_procedure_simple is signal r_TEST : std_logic_vector(7 downto 0) := X"42"; -- Purpose: Increments a std_logic_vector by 1 procedure p_INCREMENT_SLV ( signal r_IN : in std_logic_vector(7 downto 0); signal r_OUT : out std_logic_vector(7 downto 0) ) is begin r_OUT <= std_logic_vector(unsigned(r_IN) + 1); wait for 1 ns; -- Wait is OK here. end p_INCREMENT_SLV; begin process is begin wait for 10 ns; p_INCREMENT_SLV(r_TEST, r_TEST); wait for 10 ns; p_INCREMENT_SLV(r_TEST, r_TEST); wait for 10 ns; p_INCREMENT_SLV(r_TEST, r_TEST); wait; end process; end behave;
Por que Incluir um Statement Wait?
Statements wait são legais dentro de um procedimento desde que o processo chamador não tenha lista de sensibilidade. Esse recurso é especialmente útil em testbenches, onde você pode precisar introduzir atrasos determinísticos sem poluir o processo principal.
Principais Conclusões
- Procedimentos podem ter sinais IN e OUT.
- São ideais para operações comuns como aritmética em std_logic_vector.
- Usar wait dentro de um procedimento mantém lógica de testbench organizada.
VHDL
- Introdução ao VHDL: Construindo sua Primeira Porta AND
- Guia Completo de Conversões de Tipos VHDL com Numeric_Std e Std_Logic_Arith
- Aproveitando Records VHDL para Interfaces FIFO Limpas e Reutilizáveis
- Dominando Tipos Signed vs Unsigned em VHDL: Insights Práticos
- Dominando a Instrução Switch em C#: Sintaxe, Exemplos e Boas Práticas
- Instrução Break em C#: Como e Quando Usar
- Dominando a Instrução Continue em C#: Como Pular Iterações de Loop Eficazmente
- Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
- Dominando Switch-Case em C++: Sintaxe, Uso e Exemplos Práticos
- Escrita de Procedimentos Digitais: Simples, Eficiente e Confiável