Timescale Directive
Часть раздела Основы путешествия по Verilog на Coddy. Урок 70 из 90.
Директива timescale задаёт единицу времени и точность времени для симуляции. Она сообщает симулятору, как интерпретировать значения задержки, такие как #10.
В предыдущих уроках мы использовали задержки, такие как #10, не уточняя, что означает «10». Это 10 nanoseconds? 10 пикосекунд? Директива timescale отвечает на этот вопрос.
Синтаксис:
`timescale time_unit / time_precision| Часть | Значение | Пример |
|---|---|---|
time_unit | Базовая единица для задержек | 1ns |
time_precision | Точность симуляции | 1ps |
Обратный апостроф ` перед timescale означает, что это директива компилятора.
Пример
`timescale 1ns / 1pstime_unit = 1ns→#10означает 10 наносекундtime_precision = 1ps→ Моделирование округляется до ближайшей пикосекунды
Распространённые значения timescale
| Time Единица | Точность | Вариант использования |
|---|---|---|
1ns / 1ns | Наносекунда | Простые симуляции |
1ns / 1ps | Пикосекунда | Более высокая точность |
1ps / 1ps | Пикосекунда | Высокоскоростные проекты |
1us / 1ns | Микросекунда | Медленные симуляции |
Как это влияет на задержки
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Ожидает 10 наносекунд
endБез timescale некоторые симуляторы используют значение по умолчанию (часто 1ns). Лучше всегда указывать его.
Важные правила
| Правило | Объяснение |
|---|---|
| Должно находиться вне module | Размещается перед любым определением module |
| Символ обратного апострофа | `timescale, а не 'timescale |
| time unit ≥ time precision | 1ns / 1ps — допустимо, 1ps / 1ns — нет |
| Влияет на все задержки в файле | Общие задержки, задержки вентилей, задержки присваиваний |
Задание
Что нужно сделать:
Добавьте отсутствующую директиву timescale, чтобы задержки соответствовали 10ns, 20ns и 30ns.
Попробуйте сами
// TODO: Добавить директиву 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
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators 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 LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog