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 y la precisión de tiempo para la simulación. Le indica al simulador cómo interpretar los valores de retardo como #10.
En lecciones anteriores, utilizamos 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| 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 ` antes de timescale significa que es una directiva de 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 de tiempo
| 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). Lo mejor es especificarlo siempre.
Reglas importantes
| Regla | Explicación |
|---|---|
| Debe estar fuera de los módulos | Ubicado antes de cualquier definición de módulo |
| Símbolo de acento grave (backtick) | `timescale no 'timescale |
| Unidad de tiempo ≥ precisión de tiempo | 1ns / 1ps está bien, 1ps / 1ns no |
| Afecta a todos los retardos en el archivo | Retardos generales, retardos de compuerta, retardos de asignación |
Desafío
Qué hacer:
Añade la directiva timescale que falta para que los retardos representen 10ns, 20ns y 30ns.
Hoja de referencia
La directiva `timescale establece la unidad de tiempo y la precisión de tiempo para la simulación. Debe colocarse antes de cualquier definición de módulo.
`timescale time_unit / time_precision`timescale 1ns / 1ps
initial begin
#10 a = 1; // Espera 10 nanosegundos
endtime_unit— la unidad básica para los retardos (por ejemplo,#10= 10ns)time_precision— qué tan precisamente redondea la simulación (debe ser ≤ unidad de tiempo)
| Escala de tiempo | Caso de uso |
|---|---|
1ns / 1ns | Simulaciones simples |
1ns / 1ps | Más preciso |
1ps / 1ps | Diseños de alta velocidad |
1us / 1ns | Simulaciones lentas |
Pruébalo tú mismo
// TODO: Agregar directiva de escala de tiempo (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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU13Temporización y retardos
¿Qué son los retardos?Retardos de compuertaRetardos de asignaciónDirectiva TimescaleGeneración de relojResumen - Control de temporización5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo