2.9. Demoras en señales

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.

2.9.1. Modelo de demoras por transporte

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.

2.9.2. Modelo de demoras inerciales

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.

Ejemplo 2-22. Demoras inerciales equivalentes

A <= reject 10 ns inertial B after 10 ns;
A <= inertial B after 10 ns;
A <= B after 10 ns;

2.9.3. Asignación generalizada

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.

Ejemplo 2-23. Generación de un pulso

A <= '0', '1' after 10 ns, '0' after 25 ns;

2.9.4. Diferencia entre ambos tipos de demoras

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

Figura 2-1. Diferencia entre ambos tipos de demoras

Copyright © 2011 UTN FRBA - INTI - Ing. Salvador E. Tropea