Timescale Directive
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 70 de 90.
La directiva timescale establece la unidad de tiempo y la precisión temporal para la simulación. Indica al simulador cómo interpretar valores de retardo como #10.
En lecciones anteriores, usamos retrasos como #10 sin especificar qué significa "10". ¿Son 10 nanoseconds? ¿10 picosegundos? La directiva timescale responde a esta pregunta.
Sintaxis:
`timescale time_unit / time_precision| Parte | Significado | Ejemplo |
|---|---|---|
time_unit | La unidad básica para los retardos | 1ns |
time_precision | Qué tan precisa debe ser la simulación | 1ps |
La comilla invertida ` delante de timescale significa que es una directiva del compilador.
Ejemplo
`timescale 1ns / 1pstime_unit = 1ns→#10significa 10 nanosegundostime_precision = 1ps→ La simulación redondea al picosegundo más cercano
Valores comunes de timescale
| Unidad de tiempo | Precisión | Caso de uso |
|---|---|---|
1ns / 1ns | Nanosegundo | Simulaciones simples |
1ns / 1ps | Picosegundo | Más preciso |
1ps / 1ps | Picosegundo | Diseños de alta velocidad |
1us / 1ns | Microsegundo | Simulaciones lentas |
Cómo afecta a los retardos
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Espera 10 nanosegundos
endSin timescale, algunos simuladores asumen un valor predeterminado (a menudo 1ns). Es mejor especificarlo siempre.
Reglas importantes
| Regla | Explicación |
|---|---|
| Debe estar fuera de los módulos | Se coloca antes de cualquier definición de módulo |
| Símbolo de comilla invertida | `timescale, no 'timescale |
| La unidad de tiempo ≥ la precisión de tiempo | 1ns / 1ps es correcto, 1ps / 1ns no |
| Afecta a todos los retardos del archivo | Retardos generales, retardos de compuertas, retardos de asignación |
Desafío
Qué hacer:
Add the missing timescale directive to make the delays represent 10ns, 20ns, and 30ns.
Pruébalo tú mismo
// TODO: Añade la directiva 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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators 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 LogicPractica por tu cuenta: Compilador de Verilog online