Introducción
Para algunas personas el concepto de delta delay en HDLs es uno de los mas difíciles de 'digerir' (entender). No es el objetivo de este articulo escribir acerca del concepto de 'delta delay' y sus derivados .... (hay demasiada literatura al respecto), lo que SI quiero hacerles llegar es que ModelSim tiene herramientas disponibles de modo que de manera sencilla se puede 'ver' el delta delay en forma gráfica o tabular.Como 'ver' los delta delays en ModelSim
Explicaré los pocos pasos necesarios a seguir para saber y ver cuantos delta times suceden hasta que una señal obtiene un valor estable.Primero, les detallo el simple código VHDL a usar para la demostración.
1 library ieee;
2 use eee.std_logic_1164.all;
3
4 entity aoi is
5 port(A, B, C, D: in std_logic;
6 E : out std_logic);
7 end aoi;
8
9 architecture beha4 of aoi is
10 signal O1, O2, O3:std_logic;
11
12 begin
13 b4: process(A, B, C, D, O1, O2, O3)
14 begin
15 E <= not O3;
16 O1 <= A and B;
17 O2 <= C and D;
18 O3 <= O1 or O2;
19 end process b4;
20 end dflow1;
2 use eee.std_logic_1164.all;
3
4 entity aoi is
5 port(A, B, C, D: in std_logic;
6 E : out std_logic);
7 end aoi;
8
9 architecture beha4 of aoi is
10 signal O1, O2, O3:std_logic;
11
12 begin
13 b4: process(A, B, C, D, O1, O2, O3)
14 begin
15 E <= not O3;
16 O1 <= A and B;
17 O2 <= C and D;
18 O3 <= O1 or O2;
19 end process b4;
20 end dflow1;
A continuación el simple test bench usado.
1 library ieee;
2 use eee.std_logic_1164.all;
3
4 entity aoi_tb is
5 end aoi_tb;
6
7 architecture test of aoi_tb is
8 signal O1, O2, O3 : std_logic;
9 signal a, b, c, d, e: std_logic;
10 component aoi is
11 port(A, B, C, D: in std_logic; E: out std_logic);
12 end component;
13
14 begin
15 a <= '0', '1' after 6 ns;
16 b <= '0', '1' after 5 ns, '0' after 8 ns;
17 c <= '0', '1' after 7 ns;
18 d <= '0';
19
20 uut: aoi port map(
21 E => e, a => a ,b => b ,c => c, d => d
22 );
23 end test;
24
2 use eee.std_logic_1164.all;
3
4 entity aoi_tb is
5 end aoi_tb;
6
7 architecture test of aoi_tb is
8 signal O1, O2, O3 : std_logic;
9 signal a, b, c, d, e: std_logic;
10 component aoi is
11 port(A, B, C, D: in std_logic; E: out std_logic);
12 end component;
13
14 begin
15 a <= '0', '1' after 6 ns;
16 b <= '0', '1' after 5 ns, '0' after 8 ns;
17 c <= '0', '1' after 7 ns;
18 d <= '0';
19
20 uut: aoi port map(
21 E => e, a => a ,b => b ,c => c, d => d
22 );
23 end test;
24
Bien, entonces una vez que ejecutas el test bench en el entorno ModelSim se abre la ventana 'Wave', que muestra la forma de ondas de las senales del modulo que se esta simulando. Un punto a considerar es que normalmente por defecto se muestran solo por puertos de Entrada y Salida del modulo, por lo que hará falta agregar las señales internas necesarias a la ventana 'Wave' para poder ver los delta delay respectivos.
Despues de ejecutar el test bench del ejemplo descrito la ventana Wave que se obtiene es la siguiente
Entonces, supongamos que queremos saber los delta delay asociados al evento en la senal 'B' al tiempo 8 ns. Los pasos a seguir son los siguientes:
1- Colocar (sumar) un cursor en el tiempo de simulacion 8 ns.
2- Hace click en el boton "Expanded Time Delta Mode"
3- Hace click en el boton "Expand Time At Active Cursor"
4- Click en "Zoom In At Active Cursor"
5- LiStO !
La siguiente figure resume los pasos detallados arriba y muestra el resultado obtenido.
< br/> Otro modo de Ver los Delta Delay
ModelSim ofrece tambien una especie de tabla, llamada en realidad 'List', donde detalla las senales, sus eventos y los respectivos delta delays. Para acceder a la misma hacer 'View->List'. De ese modo se obtiene una table similar a la siguiente.Finalmente
Si alguna vez tuviste problemas para entender los delta delay, y como realmente 'funcionan', esta herramienta te ayuda mucho a poder dilucidad ese dilema...Hasta la próxima.....