Dominando $timeformat do Verilog: Precisão e Controle de Exibição
A diretiva timescale do Verilog especifica unidade de tempo e precisão para simulações.
A função de sistema $timeformat do Verilog especifica o estilo de relatório do especificador de formato %t em instruções de display como $display e $strobe.
Sintaxe
$timeformat(<unit_number>, <precision>, <suffix_string>, <minimum field width>);
- unit_number é a menor precisão de tempo de todas as diretivas
`timescaleusadas no código fonte - precision representa o número de dígitos fracionários para o timescale atual
- suffix_string é uma opção para exibir a escala junto com os valores de tempo reais
| Número da unidade | Unidade de tempo |
|---|---|
| -3 | 1ms |
| -6 | 1us |
| -9 | 1ns |
| -12 | 1ps |
| -15 | 1fs |
Exemplo #1: 1ns/1ps
Aqui está um exemplo de como $timeformat afeta o formato de exibição da unidade de tempo.
`timescale 1ns/1ps
module tb;
bit a;
initial begin
// Esperar por algum tempo - note que como precisão é 1/1000 da
// escala principal (1ns), este atraso será truncado pela 3ª
// posição
#10.512351;
// Exibir tempo atual com parâmetros padrão de timeformat
$display("[T=%0t] a=%0b", $realtime, a);
// Alterar parâmetros de timeformat e exibir novamente
$timeformat(-9, 2, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Remover espaço no sufixo, e estender dígitos fracionários para 5
$timeformat(-9, 5, "ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Aqui sufixo está errado, não deveria ser "ns" porque estamos
// definindo display em "ps" (-12)
$timeformat(-12, 3, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Corrigir sufixo para ps
$timeformat(-12, 2, " ps");
$display("[T=%0t] a=%0b", $realtime, a);
end
endmodule
Log de Simulação
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.
Exemplo #2: 1ns/100ps
Aqui está o mesmo exemplo de cima com um timescale diferente.
`timescale 1ns/100ps
Log de Simulação
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.
Exemplo #3: 100ns/1ns
`timescale 100ns/1ns
#1 representa 100ns e portanto #10 resulta em 1000ns
Log de Simulação
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
- Domine o Verilog: Tutorial Completo para Projeto de Circuitos Digitais
- Dominando Concatenação Verilog: Guia Prático
- Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
- Verilog Blocking vs Non-Blocking: Diferenças Essenciais Explicadas
- Dominando Funções em Verilog para Design RTL Eficiente
- Entendendo Tasks em Verilog: Funções vs Tasks, Sintaxe e Uso
- Design Prático em Nível de Porta Verilog: Portas AND, OR, NOT e Multiplexador 2x1
- Gerador de Clock Verilog: Guia de Design e Implementação
- Dominando Funções Matemáticas do Verilog para Design de Hardware Eficiente
- Entendendo e Imprimindo Timescales do Verilog em Qualquer Escopo