sábado, 2 de febrero de 2013

Especificando el 'timescale' en Verilog

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