산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 타임스케일

Verilog 시뮬레이션은 시뮬레이터가 #1이 시간 측면에서 무엇을 의미하는지 알아야 하기 때문에 시간이 정의되는 방식에 따라 다릅니다. `timescale 컴파일러 지시문은 뒤에 오는 모듈의 시간 단위와 정밀도를 지정합니다.

구문

  
  
`timescale <time_unit>/<time_precision>

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

  

time_unit time_precision 동안 지연 및 시뮬레이션 시간 측정 시뮬레이션에 사용되기 전에 지연 값이 반올림되는 방법을 지정합니다.

동일한 설계에서 다른 시간 단위를 사용하려면 다음 시간 척도 구성을 사용하십시오. 디자인의 지연 사양은 합성할 수 없으며 하드웨어 논리로 변환할 수 없습니다.

문자 단위
s
ms 밀리초
우리 마이크로초
ns 나노초
ps 피코초
fs 펨토초

이 사양의 정수는 1, 10 또는 100일 수 있으며 단위를 지정하는 문자열은 위의 표에 언급된 모든 값을 사용할 수 있습니다.

예시 #1:1ns/1ns

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

  

첫 번째 지연 문은 시뮬레이터가 `timescale로 1ns로 지정된 정확히 1시간 단위를 기다리게 하는 #1을 사용합니다. 지령. esecond 지연 문은 반 시간 단위보다 작은 0.49를 사용합니다. 그러나 시간 정밀도는 1ns로 지정되므로 시뮬레이터는 1ns보다 작아질 수 없으므로 주어진 지연 문을 반올림하고 0ns를 산출합니다. 따라서 두 번째 지연은 시뮬레이션 시간을 앞당기는 데 실패합니다.

세 번째 지연 문은 정확히 시간 단위 [hl]#0.5[/lh]의 절반을 사용하고 시뮬레이터는 값을 반올림하여 하나의 전체 시간 단위를 나타내는 #1을 얻습니다. 따라서 이것은 T=2ns에서 인쇄됩니다.

네 번째 지연 문은 시간 단위의 절반보다 큰 값을 사용하고 반올림하여 표시 문을 T=3ns에서 인쇄하도록 합니다.

시뮬레이션 로그
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.

시뮬레이션은 예상대로 8ns 동안 실행되지만 파형이 각 나노초 사이에 더 작은 분할을 가지지 않는다는 점에 유의하십시오. 시간의 정밀도는 시간 단위와 동일하기 때문입니다.

<노스크립트>

예시 #2:10ns/1ns

이전 예제와 비교하여 이 예제에서 변경된 사항은 타임스케일이 1ns/1ns에서 10ns/1ns로 변경되었다는 것입니다. 따라서 시간 단위는 10ns이고 정밀도는 1ns입니다.

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

  

실제 시뮬레이션 시간은 #을 사용하여 지정된 지연을 곱하여 얻습니다. 시간 단위로 표시한 다음 정밀도에 따라 반올림됩니다. 첫 번째 지연 문은 10ns를 생성하고 두 번째 지연 문은 14.9를 제공하며 반올림되어 15ns가 됩니다.

세 번째 문장도 마찬가지로 5ns(0.5 * 10ns)를 더하면 총 시간은 20ns가 됩니다. 네 번째는 5ns(0.51 * 10)를 추가하여 총 시간을 25ns로 늘립니다.

시뮬레이션 로그
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.

파형의 기본 단위는 1ns의 정밀도로 수십 나노초 단위입니다.

<노스크립트>

예시 #3:1ns/1ps

이전 예제와 비교하여 이 예제에서 변경된 사항은 타임스케일이 1ns/1ns에서 1ns/1ps로 변경되었다는 것입니다. 따라서 시간 단위는 1ns이고 정밀도는 1ps입니다.

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

  

1ps의 새로운 정밀도 값과 일치하도록 조정된 시간 단위를 확인하십시오. 또한 시간은 이 경우 피코초인 가장 작은 해상도로 표시됩니다.

시뮬레이션 로그
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 기능
  6. Verilog 작업
  7. Verilog 스케줄링 의미론
  8. Verilog 클록 생성기
  9. Verilog 수학 함수
  10. Verilog 시간 형식