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

Понимание и печать timescale в Verilog в любой области видимости

Дефолтный timescale

Хотя модулям Verilog ожидается наличие timescale перед модулем, симуляторы могут вставлять дефолтный timescale. Фактический timescale, применяемый в любой области иерархии, можно напечатать системной задачей $printtimescale, принимающей область (scope) как аргумент.

module tb;
  initial begin
    // Печать timescale этого модуля
    $printtimescale(tb);
    // $printtimescale($root);
  end
endmodule

Даже без директивы timescale перед модулем, симулятор применил 1ns/1ns.

Simulation Log

xcelium> run
Time scale of (tb) is 1ns / 1ns
xmsim: *W,RNQUIE: Simulation is complete.

Стандартная область видимости timescale

По умолчанию директива timescale в файле применяется ко всем модулям после неё до следующей директивы timescale.

`timescale 1ns/1ps
module tb;
  des m_des();
  alu m_alu();
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
    $printtimescale(tb.m_des);
  end
endmodule

module alu;
endmodule

`timescale 1ns/10ps
module des;
endmodule

В примере tb и alu получают 1ns/1ps, а des — 1ns/10ps из-за размещения директивы перед его определением.

Simulation Log

xcelium> run
Time scale of (tb) is 1ns / 1ps
Time scale of (tb.m_alu) is 1ns / 1ps
Time scale of (tb.m_des) is 1ns / 10ps
xmsim: *W,RNQUIE: Simulation is complete.

Область видимости между Verilog-файлами

Другие файлы включаются через `include — препроцессорная директива, заставляющая компилятор поместить содержимое включенного файла перед компиляцией. Эквивалентно простой вставке всего содержимого другого файла в основной.

// main.v
`timescale 1ns/1ps
module tb;
  des m_des();
  alu m_alu();
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
    $printtimescale(tb.m_des);
  end
endmodule
`include "file_alu.v"
`include "file_des.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps
module des;
endmodule

Результаты те же: alu получает 1ns/1ps, так как последняя действующая директива до его определения — 1ns/1ps, несмотря на отдельный файл. des получает 1ns/10ps, так как директива переопределена перед его определением.

Simulation Log

xcelium> run
Time scale of (tb) is 1ns / 1ps
Time scale of (tb.m_alu) is 1ns / 1ps
Time scale of (tb.m_des) is 1ns / 10ps
xmsim: *W,RNQUIE: Simulation is complete.

Смена порядка файлов меняет timescale

Порядок включения файлов важен для переопределения timescale, как видно ниже.

// main.v
`timescale 1ns/1ps
module tb;
  des m_des();
  alu m_alu();
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
    $printtimescale(tb.m_des);
  end
endmodule
// ПОМЕНЯН ПОРЯДОК!
`include "file_des.v"
`include "file_alu.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps
module des;
endmodule

Теперь alu получает 1ns/10ps.

Simulation Log

xcelium> run
Time scale of (tb) is 1ns / 1ps
Time scale of (tb.m_alu) is 1ns / 10ps
Time scale of (tb.m_des) is 1ns / 10ps
xmsim: *W,RNQUIE: Simulation is complete.

Это одна из причин ставить timescale в начало файлов — все модули в файле получают правильный timescale независимо от порядка включения. Но это может затруднить компиляцию с другой точностью timescale без изменения каждого файла. Многие компиляторы/симуляторы предоставляют опцию переопределения дефолтных значений timescale для всех модулей.

Verilog

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