Menu
Coddy logo textTech

Directiva Timescale

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 70 de 90.

La directiva timescale establece la unidad de tiempo (time_unit) y la precisión de tiempo (time_precision) para la simulación. Le indica al simulador cómo interpretar los valores de retardo como #10.

En lecciones anteriores, usamos retardos como #10 sin especificar qué significa "10". ¿Son 10 nanosegundos? ¿10 picosegundos? La directiva timescale responde a esta pregunta.

Sintaxis:

`timescale time_unit / time_precision
ParteSignificadoEjemplo
time_unitLa unidad básica para los retardos1ns
time_precisionQué tan precisa debe ser la simulación1ps

El acento grave ` antes de timescale significa que es una directiva del compilador (o directive).

Ejemplo

`timescale 1ns / 1ps
  • time_unit = 1ns#10 significa 10 nanosegundos
  • time_precision = 1ps → La simulación se redondea al picosegundo más cercano

Valores comunes de Timescale

Unidad de tiempoPrecisiónCaso de uso
1ns / 1nsNanosegundoSimulaciones simples
1ns / 1psPicosegundoMás preciso
1ps / 1psPicosegundoDiseños de alta velocidad
1us / 1nsMicrosegundoSimulaciones lentas

Cómo afecta a los retardos

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // Espera 10 nanosegundos
end

Sin timescale, algunos simuladores asumen un valor predeterminado (a menudo 1ns). Es mejor especificarlo siempre.

Reglas importantes

ReglaExplicación
Debe estar fuera de los módulosSe coloca antes de cualquier definición de module
Símbolo de acento grave`timescale no 'timescale 
Unidad de tiempo ≥ precisión de tiempo1ns / 1ps está bien, 1ps / 1ns no
Afecta a todos los retardos en el archivoRetardos generales, retardos de puertas, retardos de asignación
challenge icon

Desafío

Qué hacer:

Añade la directiva timescale que falta para que los retardos representen 10ns, 20ns y 30ns.

Pruébalo tú mismo

// TODO: Añadir directiva timescale (1ns / 1ps)

module timescale_challenge;
  
  initial begin
    $display("Time %0t", $time);
    #10 $display("Time %0t (10ns = 10000ps)", $time);
    #10 $display("Time %0t (20ns = 20000ps)", $time);
    #10 $display("Time %0t (30ns = 30000ps)", $time);
    $finish;
  end
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos