Directiva de escala temporal
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 y la precisión temporal para la simulación. Indica al simulador cómo interpretar valores de retardo como #10.
En lecciones anteriores, usamos retrasos 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| Parte | Significado | Ejemplo |
|---|---|---|
time_unit | La unidad básica para los retardos | 1ns |
time_precision | Qué tan precisa debe ser la simulación | 1ps |
La comilla invertida ` delante de timescale significa que es una directiva del compilador.
Ejemplo
`timescale 1ns / 1pstime_unit = 1ns→#10significa 10 nanosegundostime_precision = 1ps→ La simulación redondea al picosegundo más cercano
Valores comunes de escala temporal
| Unidad de tiempo | Precisión | Caso de uso |
|---|---|---|
1ns / 1ns | Nanosegundo | Simulaciones simples |
1ns / 1ps | Picosegundo | Más preciso |
1ps / 1ps | Picosegundo | Diseños de alta velocidad |
1us / 1ns | Microsegundo | Simulaciones lentas |
Cómo afecta a los retardos
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Espera 10 nanosegundos
endSin timescale, algunos simuladores asumen un valor predeterminado (a menudo 1ns). Es mejor especificarlo siempre.
Reglas importantes
| Regla | Explicación |
|---|---|
| Debe estar fuera de los módulos | Se coloca antes de cualquier definición de módulo |
| Símbolo de comilla invertida | `timescale, no 'timescale |
| La unidad de tiempo ≥ la precisión de tiempo | 1ns / 1ps es correcto, 1ps / 1ns no |
| Afecta a todos los retardos del archivo | Retardos generales, retardos de compuertas, retardos de asignación |
Desafío
Qué hacer:
Añade la directiva timescale que falta para hacer que los retrasos representen 10ns, 20ns y 30ns.
Pruébalo tú mismo
// TODO: Añade la 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
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: circuito de compuertas lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU13Temporización y retrasos
Qué son los retrasosRetrasos de puertaRetrasos de asignaciónDirectiva de escala temporalGeneración de relojRepaso: control de la temporización5Operadores, parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online