Diretiva de Escala de Tempo
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 70 de 90.
A diretiva timescale define a unidade de tempo e a precisão de tempo da simulação. Ela informa ao simulador como interpretar valores de atraso, como #10.
Nas lições anteriores, usamos atrasos como #10 sem especificar o que significa "10". São 10 nanossegundos? 10 picossegundos? A diretiva timescale responde a essa pergunta.
Sintaxe:
`timescale time_unit / time_precision| Parte | Significado | Exemplo |
|---|---|---|
time_unit | A unidade básica para atrasos | 1ns |
time_precision | O nível de precisão da simulação | 1ps |
A crase ` antes de timescale significa que se trata de uma diretiva do compilador.
Exemplo
`timescale 1ns / 1pstime_unit = 1ns→#10significa 10 nanossegundostime_precision = 1ps→ A simulação arredonda para o picosegundo mais próximo
Valores comuns de escala de tempo
| Unidade de tempo | Precisão | Caso de uso |
|---|---|---|
1ns / 1ns | Nanossegundo | Simulações simples |
1ns / 1ps | Picosegundo | Mais preciso |
1ps / 1ps | Picosegundo | Projetos de alta velocidade |
1us / 1ns | Simulações lentas |
Como Isso Afeta os Atrasos
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Espera 10 nanossegundos
endSem timescale, alguns simuladores assumem um valor padrão (geralmente 1ns). É melhor sempre especificá-lo.
Regras importantes
| Regra | Explicação |
|---|---|
| Deve estar fora dos módulos | Colocado antes de qualquer definição de módulo |
| Símbolo de crase | `timescale, não 'timescale |
| Unidade de tempo ≥ precisão de tempo | 1ns / 1ps está correto, 1ps / 1ns não está |
| Atrasos gerais, atrasos de portas, atrasos de atribuição |
Desafio
O que fazer:
Adicione a diretiva timescale ausente para fazer com que os atrasos representem 10ns, 20ns e 30ns.
Experimente você mesmo
// TODO: Adicionar diretiva timescale (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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU13Temporização e Atrasos
O Que São AtrasosAtrasos de PortasAtrasos de AtribuiçãoDiretiva de Escala de TempoGeração de ClockRevisão - Controle de Temporização2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online