Ejemplo de procedimiento VHDL: Incrementando un vector Standard Logic
¿Qué es un procedimiento VHDL?
Los procedimientos pertenecen a la familia de subprogramas en VHDL. Encapsulan lógica reutilizable, reduciendo duplicación de código y mejorando mantenibilidad. Al definir un procedimiento una vez, puede invocarlo desde múltiples procesos o arquitecturas, asegurando comportamiento consistente.
Ejemplo: Incrementando un std_logic_vector
El siguiente ejemplo demuestra un procedimiento que toma un std_logic_vector de 8 bits, le suma uno y devuelve el resultado. El procedimiento también incluye una espera de 1 ns para ilustrar control de temporización dentro de un 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"; -- Propósito: Incrementa un std_logic_vector en 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 es OK aquí. 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 qué incluir una sentencia Wait?
Las sentencias wait son legales dentro de un procedimiento siempre que el proceso llamante no tenga lista de sensibilidad. Esta característica es especialmente útil en testbenches, donde puede necesitar introducir retrasos deterministas sin ensuciar el proceso principal.
Conclusiones clave
- Los procedimientos pueden tener señales IN y OUT.
- Son ideales para operaciones comunes como aritmética en std_logic_vector.
- Usar wait dentro de un procedimiento mantiene la lógica del testbench ordenada.
VHDL
- Redacción de procedimientos digitales: Simple, eficiente y fiable
- Dominando la sentencia switch en C#: Sintaxis, ejemplos y mejores prácticas
- Sentencia break en C#: Cómo y cuándo usarla
- Dominando la sentencia continue en C#: Cómo saltar iteraciones de bucles eficazmente
- Dominando switch-case en C++: Sintaxis, uso y ejemplos prácticos
- Introducción a VHDL: Construyendo tu primera compuerta AND
- Guía completa de conversiones de tipos VHDL con Numeric_Std y Std_Logic_Arith
- Aprovechando records VHDL para interfaces FIFO limpias y reutilizables
- Dominando tipos Signed vs Unsigned en VHDL: Perspectivas prácticas
- Variables VHDL explicadas: Ejemplos prácticos y reglas para diseño fiable
- Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo