Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Мастерство timescale в Verilog: единицы, точность и точное тайминг симуляции

Симуляция Verilog зависит от определения времени, так как симулятору нужно знать, что означает #1 во времени. Директива компилятора `timescale задает единицу времени и точность для последующих модулей.

Синтаксис

`timescale <time_unit>/<time_precision>
// Примеры
`timescale 1ns/1ps
`timescale 10us/100ns
`timescale 10ns/1ns

time_unit — единица измерения задержек и времени симуляции. time_precision — точность округления значений задержек перед использованием в симуляции.

Для использования разных единиц времени в одном дизайне:

СимволЕдиница
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

  1. Освоение Verilog: полное руководство по проектированию цифровых схем
  2. Освоение конкатенации в Verilog: практическое руководство
  3. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  4. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  5. Мастерство функций в Verilog для эффективного RTL дизайна
  6. Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
  7. Понимание семантики планирования в Verilog: тайминг, события и порядок выполнения
  8. Генератор тактового сигнала в Verilog: проектирование и реализация
  9. Мастерство математических функций Verilog для эффективного аппаратного дизайна
  10. Мастерство $timeformat в Verilog: точность и контроль отображения времени