Introduccion
después de algunos pedidos, empezaré también a escribir blogs con respecto al otro HDL, Verilog. En este caso en particular detallo el uso de la directiva de compilación (compiler directive) "timescale".
Detalles
La directiva 'timescale' especifica la unidad de tiempo y precisión ha ser usada por la herramienta de simulación.
La sintaxis es la siguiente:
'timescale time_units / precision_units
Donde "time_units" es un valor que declara la unidad de tiempo de los retardos en el módulo en el que se especifica este valor. Mientras que "precision_units" es un valor que declara la precisión de la unidad de tiempo ha ser usada por el simulador cuando simule el módulo en el que se especifica este valor. Como regla práctica trate de usar como valor de la precisión un valor cercano al valor de la unidad de tiempo. Ambos valores deben ser números enteros (1, 10, 100), y son seguidos por un string que representa la unidad de tiempo (s, ms, us, ns, ps, fs).
Reglas:
- se deben usar valores de 1, 10, 100 para la unidad de tiempo y para la precisión.
- puede usar 's' para segundos, 'ms' para milisegundos, 'us' para microsegundos, 'ns' para nanosegundos, 'ps' para picosegundos y 'fs' para fentosegundos, para ambos, la unidad de tiempo y la de precisión.
- la unidad de tiempo debe ser por lo menos tan grande como la unidad de precisión
- no existe un valor de 'timescale' por defecto; pero los simuladores pueden asignar uno por defecto.
- para mantener consistencia de los valores de 'timescale', se debe usar una directiva de timescale para TODOS los módulos del diseño.
Esta directiva se escribe fuera de la definición del módulo.
IMPORTANTE: Se debe tener cuidado de que no exista una gran diferencia entre el valor de la unidad de tiempo y el valor de la unidad de precisión ya el tiempo de simulacion avanza en incrementos de la unidad de precisión. Así por ejemplo, si escribimos
`timescale 1ns/100ps
el simulador hará 10 pasos para avanzar 1 ns de tiempo de simulación. Si, escribimos
`timescale 1ns/1ps
el simulador hará 1000 pasos para avanzar 1 ns de tiempo de simulación.
Otro ejemplo:
`timescale 1ns/10ps
module1 (. . .);
not #1.23 (. . .) // 1.23ns (12300 simulation time units)
. . .
endmodule
Use valores de precisión que no sobrecarguen la tarea del simulador. Valores demasiados pequeños incrementarán sin sentido el tiempo de simulación y el uso de memoria. Un valor práctico es el siguiente:
`timescale 1ns/1ns
En caso de proyectos con múltiples módulos el valor de 'timescale' es pasado a todos los módulos que no tienen definido el 'timescale' y que son sub-módulos del mismo. El simulador usualmente da un 'warning' para los módulos que no tienen definido el valor (los valores de 'timescale').
Finalmente un figura es mejor que mil palabras....
Primer blog de Verilog..... !!! pero, por supuesto no el último :) !!
No hay comentarios:
Publicar un comentario