Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

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 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

  1. Dominar Verilog: Tutorial completo para diseño de circuitos digitales
  2. Dominar la concatenación en Verilog: Guía práctica
  3. Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
  4. Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
  5. Dominar las funciones en Verilog para diseño RTL eficiente
  6. Comprender las Tasks en Verilog: Funciones vs Tasks, sintaxis y uso
  7. Diseño práctico a nivel de puertas en Verilog: Puertas AND, OR, NOT y Multiplexor 2x1
  8. Generador de reloj en Verilog: Guía de diseño e implementación
  9. Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
  10. Comprender e imprimir timescales de Verilog en cualquier alcance
  11. Dominando la E/S de Archivos en Verilog: Abrir, Leer, Escribir y Cerrar