Cuando se trata de hacer una simulación de un dispositivo físico es posible que necesitemos modelar los tiempos de demora de dicho dispositivo. A este tipo de simulaciones se las denomina temporales, ya que tienen en cuenta los tiempos. A las simulaciones en las que se ignoran dichos tiempos se las denomina funcionales.
En esta sección veremos un mecanismo que posee VHDL para modelar tiempos de propagación y efectos asociados con las demoras en circuitos físicos.
VHDL posee dos tipos de demoras denominadas de transporte e inerciales. Ambas demoras se pueden expresar durante la conexión (asignación) de señales. Las señales son los elementos de VHDL asociados con el tiempo, usualmente el tiempo necesario para que una señal se propague es tomado como infinitesimal, pero nunca cero. Mediante los mecanismos que se exponen en esta sección podremos asignar tiempos que no sean infinitesimales a dicha propagación y seleccionar detalles de su comportamiento.
Este mecanismo nos permite modelar tiempos de propagación en los cuales la señal se ve demorada, pero siempre llegará a destino, sin importar cuan corta sea la duración de un pulso. La sintaxis de estas asignaciones junto con dos ejemplos puede observarse en el Ejemplo 2-20.
Ejemplo 2-20. Ejemplo de demoras por transporte
SEÑAL_DESTINO <= transport SEÑAL_ORIGEN after TIEMPO; A <= transport B after 10 ns; A <= transport '1' after 10 ns;
En el primer ejemplo se indica que la señal B se propagará a la señal A luego de 10 ns. En el segundo ejemplo se indica que la señal A pasará a '1' luego de 10 ns.
Este modelo es similar al anterior, sólo que nos permite modelar un segundo detalle. En este caso especificaremos cual es la duración mínima que debe tener un pulso para llegar a destino. Si la señal de origen posee un cambio más rápido que el especificado el mismo no se verá reflejado en la de destino. La sintaxis de estas asignaciones junto con dos ejemplos puede observarse en el Ejemplo 2-21.
Ejemplo 2-21. Ejemplo de demoras inerciales
SEÑAL_DESTINO <= reject DURACIÓN_MÍNIMA inertial SEÑAL_ORIGEN after TIEMPO; A <= reject 3 ns inertial B after 10 ns;
En el ejemplo se indica que la señal B se propagará a la señal A luego de 10 ns, pero sólo si el pulso dura más de 3 ns.
Si no se especifica que modelo se usará el lenguaje asume que se trata del modelo inercial. Por otro lado, si el tiempo mínimo que deseamos especificar es igual al tiempo de demora, podemos omitir el reject. En el Ejemplo 2-22 se observan tres sentencias equivalentes.
Es posible indicar más de un tiempo en una asignación, de esta manera es posible generar un pulso en una sola línea VHDL como se muestra en el Ejemplo 2-23. En este ejemplo se genera un pulso de 15 ns de duración, el mismo comienza 10 ns después.
En el Ejemplo 2-24 se muestra un ejemplo simple que permite ilustrar la diferencia entre ambos tipos de demoras. La forma de onda resultante se puede observar en la Figura 2-1.
Ejemplo 2-24. Diferencia entre ambos tipos de demoras
library IEEE; use IEEE.std_logic_1164.all; entity Demora is end entity Demora; architecture Ejemplo of Demora is signal A, B, C : std_logic:='0'; begin A <= '0', '1' after 5 ns, '0' after 15 ns, '1' after 25 ns, '0' after 30 ns; B <= transport A after 10 ns; C <= A after 10 ns; end architecture Ejemplo; -- Entity: Demora