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

Охват шкалы времени Verilog

Шкала времени по умолчанию

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

  
  
module tb;
	initial begin
		// Print timescale of this module
		$printtimescale(tb);
		// $printtimescale($root);
	end
endmodule

  

Обратите внимание, что даже несмотря на то, что директива шкалы времени не была помещена перед этим модулем, симулятор в конечном итоге применил значение шкалы времени 1 нс/1 нс.

Журнал моделирования
xcelium> run
Time scale of (tb) is  1ns /  1ns
xmsim: *W,RNQUIE: Simulation is complete.

Стандартная шкала времени

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

  
  
`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 имеют шкалу времени 1 нс/1 нс, а des получает шкалу времени 1 нс/10 пс из-за размещения директивы перед определением модуля des

Журнал моделирования
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 получает шкалу времени 1 нс/1 пс, потому что это была последняя директива, которая оставалась в силе до тех пор, пока компилятор не нашел определение alu, несмотря на то, что поместил его в другой файл. des получает шкалу времени 1 нс/10 пс, поскольку директива была заменена до ее определения.

Журнал моделирования
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.

Обмен файлами может изменить шкалу времени

Порядок включения файлов играет важную роль в переопределении директив временной шкалы, что видно из приведенного ниже примера.

  
  
// 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

// NOTE! Swapped order of inclusion
`include "file_des.v"
`include "file_alu.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

Обратите внимание, что модуль alu теперь получает шкалу времени 1 нс/10 пс.

Журнал моделирования
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.

Это одна из причин наличия директивы шкалы времени в верхней части файлов, чтобы все модули в этом файле принимали правильную шкалу времени независимо от включения файла.

Однако этот подход может затруднить компиляцию с другой точностью шкалы времени (значение после косой черты) без изменения каждого файла. Многие компиляторы и симуляторы также предоставляют возможность переопределить значения шкалы времени по умолчанию, которые будут применяться ко всем модулям.


Verilog

  1. Учебник Verilog
  2. Конкатенация Verilog
  3. Верилог Задания
  4. Блокировка и неблокировка Verilog
  5. Верилог-функции
  6. Верилог Задача
  7. Иерархическая справочная область Verilog
  8. Генератор часов Verilog
  9. Математические функции Verilog
  10. Формат времени Verilog