Dominar $timeformat en Verilog: Control de precisión y visualización
La directiva de timescale de Verilog especifica la unidad de tiempo y precisión para simulaciones.
La función de sistema $timeformat de Verilog especifica el estilo de reporte del especificador de formato %t en declaraciones de visualización como $display y $strobe.
Sintaxis
$timeformat(<número_unidad>, <precisión>, <cadena_sufijo>, <ancho_mínimo_campo>);
- número_unidad es la menor precisión de tiempo de todas las directivas
`timescaleusadas en el código fuente - precisión representa el número de dígitos fraccionarios para el timescale actual
- cadena_sufijo es una opción para mostrar la escala junto a los valores de tiempo real
| Número de unidad | Unidad de tiempo |
|---|---|
| -3 | 1ms |
| -6 | 1us |
| -9 | 1ns |
| -12 | 1ps |
| -15 | 1fs |
Ejemplo #1: 1ns/1ps
Aquí hay un ejemplo de cómo $timeformat afecta el formato de visualización de unidad de tiempo.
`timescale 1ns/1ps
module tb;
bit a;
initial begin
// Esperar algún tiempo - note que porque la precisión es 1/1000 de
// la escala principal (1ns), este retraso será truncado por la 3ra
// posición
#10.512351;
// Mostrar tiempo actual con parámetros timeformat por defecto
$display("[T=%0t] a=%0b", $realtime, a);
// Cambiar parámetros timeformat y mostrar de nuevo
$timeformat(-9, 2, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Quitar el espacio en sufijo, y extender dígitos fraccionarios a 5
$timeformat(-9, 5, "ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Aquí el sufijo está mal, no debería ser "ns" porque estamos
// configurando visualización en "ps" (-12)
$timeformat(-12, 3, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Corregir el sufijo a ps
$timeformat(-12, 2, " ps");
$display("[T=%0t] a=%0b", $realtime, a);
end
endmodule
xcelium> run [T=10512] a=0 [T=10.51 ns] a=0 [T=10.51200ns] a=0 [T=10512.000 ns] a=0 [T=10512.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Ejemplo #2: 1ns/100ps
Aquí está el mismo ejemplo de arriba con un timescale diferente.
`timescale 1ns/100ps
xcelium> run [T=105] a=0 [T=10.50 ns] a=0 [T=10.50000ns] a=0 [T=10500.000 ns] a=0 [T=10500.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Ejemplo #3: 100ns/1ns
`timescale 100ns/1ns
#1 representa 100ns y por tanto #10 rinde 1000ns
xcelium> run [T=1051] a=0 [T=1051.00 ns] a=0 [T=1051.00000ns] a=0 [T=1051000.000 ns] a=0 [T=1051000.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Verilog
- Dominar Verilog: Tutorial completo para diseño de circuitos digitales
- Dominar la concatenación en Verilog: Guía práctica
- Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
- Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
- Dominar las funciones en Verilog para diseño RTL eficiente
- Comprender las Tasks en Verilog: Funciones vs Tasks, sintaxis y uso
- Diseño práctico a nivel de puertas en Verilog: Puertas AND, OR, NOT y Multiplexor 2x1
- Generador de reloj en Verilog: Guía de diseño e implementación
- Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
- Comprender e imprimir timescales de Verilog en cualquier alcance
- Dominando la E/S de Archivos en Verilog: Abrir, Leer, Escribir y Cerrar