Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

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

  1. Domine o Verilog: Tutorial Completo para Projeto de Circuitos Digitais
  2. Dominando Concatenação Verilog: Guia Prático
  3. Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
  4. Verilog Blocking vs Non-Blocking: Diferenças Essenciais Explicadas
  5. Dominando Funções em Verilog para Design RTL Eficiente
  6. Entendendo Tasks em Verilog: Funções vs Tasks, Sintaxe e Uso
  7. Design Prático em Nível de Porta Verilog: Portas AND, OR, NOT e Multiplexador 2x1
  8. Gerador de Clock Verilog: Guia de Design e Implementação
  9. Dominando Funções Matemáticas do Verilog para Design de Hardware Eficiente
  10. Entendendo e Imprimindo Timescales do Verilog em Qualquer Escopo