Timescale Directive
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.
Em lições anteriores, usamos atrasos como #10 sem especificar o que significa "10". São 10 nanoseconds? 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 Timescale
| Time Unit | 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 projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online