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

Верилог временная шкала

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

Синтаксис

  
  
`timescale <time_unit>/<time_precision>

// Example
`timescale 1ns/1ps
`timescale 10us/100ns
`timescale 10ns/1ns

  

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

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

Символ Единица
с секунды
мс миллисекунды
нас микросекунды
нс наносекунды
ps пикосекунды
фс фемтосекунды

Целые числа в этих спецификациях могут быть 1, 10 или 100, а строка символов, указывающая единицу измерения, может принимать любое значение, указанное в таблице выше.

Пример №1:1 нс/1 нс

  
  
// Declare the timescale where time_unit is 1ns
// and time_precision is also 1ns
`timescale 1ns/1ns

module tb;
	// To understand the effect of timescale, let us 
	// drive a signal with some values after some delay
  reg val;
  
  initial begin
  	// Initialize the signal to 0 at time 0 units
    val <= 0;
    
    // Advance by 1 time unit, display a message and toggle val
    #1 		$display ("T=%0t At time #1", $realtime);
    val <= 1;
    
    // Advance by 0.49 time unit and toggle val
    #0.49 	$display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    
    // Advance by 0.50 time unit and toggle val
    #0.50 	$display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    
    // Advance by 0.51 time unit and toggle val
    #0.51 	$display ("T=%0t At time #0.51", $realtime);
    val <= 0;

		// Let simulation run for another 5 time units and exit
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

  

Первый оператор задержки использует #1, что заставляет симулятор ждать ровно 1 единицу времени, которая указана как 1 нс с помощью `timescale. директива. Оператор задержки esecond использует 0,49, что меньше половины единицы времени. Однако точность времени указана равной 1 нс, и, следовательно, симулятор не может быть меньше 1 нс, что заставляет его округлять заданный оператор задержки и дает 0 нс. Таким образом, вторая задержка не может увеличить время моделирования.

В третьем операторе задержки используется ровно половина единицы времени [hl]#0.5[/lh], и снова симулятор будет округлять значение, чтобы получить #1, который представляет одну целую единицу времени. Таким образом, это печатается при T=2 нс.

В четвертом операторе задержки используется значение, превышающее половину единицы времени, и он также округляется, что приводит к выводу оператора display при T=3 нс.

Журнал моделирования
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:10 нс/1 нс

единственный изменение, сделанное в этом примере по сравнению с предыдущим, заключается в том, что шкала времени была изменена с 1 нс/1 нс на 10 нс/1 нс. Таким образом, единица времени составляет 10 нс, а точность — 1 нс.

  
  
// Declare the timescale where time_unit is 10ns
// and time_precision is 1ns
`timescale 10ns/1ns

// NOTE: Testbench is the same as in previous example
module tb;
	// To understand the effect of timescale, let us 
	// drive a signal with some values after some delay
  reg val;
  
  initial begin
  	// Initialize the signal to 0 at time 0 units
    val <= 0;
    
    // Advance by 1 time unit, display a message and toggle val
    #1 		$display ("T=%0t At time #1", $realtime);
    val <= 1;
    
    // Advance by 0.49 time unit and toggle val
    #0.49 	$display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    
    // Advance by 0.50 time unit and toggle val
    #0.50 	$display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    
    // Advance by 0.51 time unit and toggle val
    #0.51 	$display ("T=%0t At time #0.51", $realtime);
    val <= 0;

		// Let simulation run for another 5 time units and exit
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

  

Фактическое время моделирования получается путем умножения задержки, указанной с помощью #. с единицей времени, а затем округляется в зависимости от точности. Тогда первый оператор задержки даст 10 нс, а второй — 14,9, которые округляются до 15 нс.

Третье утверждение аналогичным образом добавляет 5 нс (0,5 * 10 нс), и общее время становится равным 20 нс. Четвертый добавляет еще 5 нс (0,51 * 10), чтобы увеличить общее время до 25 нс.

Журнал моделирования
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:1 нс/1 пс

единственный изменение, сделанное в этом примере по сравнению с предыдущим, заключается в том, что шкала времени была изменена с 1 нс/1 нс на 1 нс/1 пс. Таким образом, единицей измерения времени является 1 нс, а точность — 1 пс.

  
  
// Declare the timescale where time_unit is 1ns
// and time_precision is 1ps
`timescale 1ns/1ps

// NOTE: Testbench is the same as in previous example
module tb;
	// To understand the effect of timescale, let us 
	// drive a signal with some values after some delay
  reg val;
  
  initial begin
  	// Initialize the signal to 0 at time 0 units
    val <= 0;
    
    // Advance by 1 time unit, display a message and toggle val
    #1 		$display ("T=%0t At time #1", $realtime);
    val <= 1;
    
    // Advance by 0.49 time unit and toggle val
    #0.49 	$display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    
    // Advance by 0.50 time unit and toggle val
    #0.50 	$display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    
    // Advance by 0.51 time unit and toggle val
    #0.51 	$display ("T=%0t At time #0.51", $realtime);
    val <= 0;

		// Let simulation run for another 5 time units and exit
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

  

Убедитесь, что единицы времени масштабируются в соответствии с новым значением точности 1 пс. Также обратите внимание, что время представлено в наименьшем разрешении, которое в данном случае составляет пикосекунды.

Журнал моделирования
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. Верилог Задания
  4. Блокировка и неблокировка Verilog
  5. Верилог-функции
  6. Верилог Задача
  7. Семантика планирования Verilog
  8. Генератор часов Verilog
  9. Математические функции Verilog
  10. Формат времени Verilog