Мастерство timescale в Verilog: единицы, точность и точное тайминг симуляции
Симуляция Verilog зависит от определения времени, так как симулятору нужно знать, что означает #1 во времени. Директива компилятора `timescale задает единицу времени и точность для последующих модулей.
Синтаксис
`timescale <time_unit>/<time_precision>
// Примеры
`timescale 1ns/1ps
`timescale 10us/100ns
`timescale 10ns/1ns
time_unit — единица измерения задержек и времени симуляции. time_precision — точность округления значений задержек перед использованием в симуляции.
Для использования разных единиц времени в одном дизайне:
`timescale— базовая единица и точность$printtimescale— системная задача для отображения единицы и точности$timeи$realtime— системные функции текущего времени; формат вывода меняется через$timeformat
| Символ | Единица |
|---|---|
| s | секунды |
| ms | миллисекунды |
| us | микросекунды |
| ns | наносекунды |
| ps | пикосекунды |
| fs | фемтосекунды |
Целые числа в спецификациях могут быть 1, 10 или 100. Строковый символ единицы — любое из таблицы.
Пример #1: 1ns/1ns
// time_unit=1ns, time_precision=1ns
`timescale 1ns/1ns
module tb;
reg val;
initial begin
val <= 0;
#1 $display ("T=%0t At time #1", $realtime); val <= 1;
#0.49 $display ("T=%0t At time #0.49", $realtime); val <= 0;
#0.50 $display ("T=%0t At time #0.50", $realtime); val <= 1;
#0.51 $display ("T=%0t At time #0.51", $realtime); val <= 0;
#5 $display ("T=%0t End of simulation", $realtime);
end
endmodule
Первый #1 — ровно 1 единица времени (1нс). Второй #0.49 — меньше половины единицы. Точность 1нс, симулятор не может идти меньше 1нс — округляет до 0нс, время не продвигается.
Третий #0.5 — ровно половина, округляется до #1 (1нс) — печатается в T=2нс.
Четвертый #0.51 — больше половины, округляется до 1нс — T=3нс.
Simulation Log
ncsim> run T=1 At time #1 T=1 At time #0.49 T=2 At time #0.50 T=3 At time #0.51 T=8 End of simulation ncsim: *W,RNQUIE: Simulation is complete.
Симуляция идет 8нс, но волна не имеет мелких делений между наносекундами — точность равна единице времени.
Пример #2: 10ns/1ns
Единственное изменение: timescale 10ns/1ns. Единица 10нс, точность 1нс.
`timescale 10ns/1ns
module tb;
reg val;
initial begin
val <= 0;
#1 $display ("T=%0t At time #1", $realtime); val <= 1;
#0.49 $display ("T=%0t At time #0.49", $realtime); val <= 0;
#0.50 $display ("T=%0t At time #0.50", $realtime); val <= 1;
#0.51 $display ("T=%0t At time #0.51", $realtime); val <= 0;
#5 $display ("T=%0t End of simulation", $realtime);
end
endmodule
Реальное время = задержка * time_unit, затем округление по precision. #1 → 10нс. #0.49 → 4.9нс → округление до 5нс (итого 15нс). #0.5 → 5нс (итого 20нс). #0.51 → 5.1нс → 5нс (итого 25нс).
Simulation Log
ncsim> run T=10 At time #1 T=15 At time #0.49 T=20 At time #0.50 T=25 At time #0.51 T=75 End of simulation ncsim: *W,RNQUIE: Simulation is complete.
Базовая единица волны — десятки наносекунд с точностью 1нс.
Пример #3: 1ns/1ps
Единственное изменение: timescale 1ns/1ps. Единица 1нс, точность 1пс.
`timescale 1ns/1ps
module tb;
reg val;
initial begin
val <= 0;
#1 $display ("T=%0t At time #1", $realtime); val <= 1;
#0.49 $display ("T=%0t At time #0.49", $realtime); val <= 0;
#0.50 $display ("T=%0t At time #0.50", $realtime); val <= 1;
#0.51 $display ("T=%0t At time #0.51", $realtime); val <= 0;
#5 $display ("T=%0t End of simulation", $realtime);
end
endmodule
Временные единицы масштабировались под точность 1пс. Время представлено в наименьшем разрешении — пикосекундах.
Simulation Log
ncsim> run T=1000 At time #1 T=1490 At time #0.49 T=1990 At time #0.50 T=2500 At time #0.51 T=7500 End of simulation ncsim: *W,RNQUIE: Simulation is complete.
Verilog
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Мастерство функций в Verilog для эффективного RTL дизайна
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Понимание семантики планирования в Verilog: тайминг, события и порядок выполнения
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна
- Мастерство $timeformat в Verilog: точность и контроль отображения времени