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

Verilog Timescale 마스터하기: 단위, 정밀도, 정확한 시뮬레이션 타이밍

Verilog 시뮬레이션은 시간이 어떻게 정의되는지에 의존합니다. 시뮬레이터는 #1이 시간 측면에서 무엇을 의미하는지 알아야 하기 때문입니다. `timescale 컴파일러 지시자는 뒤따르는 모듈들의 시간 단위와 정밀도를 지정합니다.

문법

`timescale <time_unit>/<time_precision>
// 예제
`timescale 1ns/1ps
`timescale 10us/100ns
`timescale 10ns/1ns

time_unit은 지연과 시뮬레이션 시간의 측정 단위이며, time_precision은 시뮬레이션에서 사용되기 전 지연 값이 어떻게 반올림되는지 지정합니다.

동일 설계에서 다른 시간 단위를 사용하려면 다음 timescale 구조를 사용하세요. 설계의 지연 사양은 합성 가능하지 않으며 하드웨어 로직으로 변환될 수 없음을 기억하세요.

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

이 사양의 정수는 1, 10, 100 중 하나일 수 있으며, 단위를 지정하는 문자열은 위 표의 어떤 값이든 취할 수 있습니다.

예제 #1: 1ns/1ns

// time_unit은 1ns, time_precision도 1ns인 timescale 선언
`timescale 1ns/1ns
module tb;
  // timescale 효과를 이해하기 위해 신호를 지연 후 값으로 구동
  reg val;
  initial begin
    // 시간 0 단위에서 신호를 0으로 초기화
    val <= 0;
    // 1 타임 유닛 진행, 메시지 표시, val 토글
    #1 $display ("T=%0t At time #1", $realtime); val <= 1;
    // 0.49 타임 유닛 진행, val 토글
    #0.49 $display ("T=%0t At time #0.49", $realtime); val <= 0;
    // 정확히 절반 타임 유닛 #0.5 진행, val 토글
    #0.50 $display ("T=%0t At time #0.50", $realtime); val <= 1;
    // 절반보다 큰 0.51 타임 유닛 진행, val 토글
    #0.51 $display ("T=%0t At time #0.51", $realtime); val <= 0;
    // 5 타임 유닛 더 실행 후 종료
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

첫 번째 지연 문은 #1을 사용하여 시뮬레이터가 정확히 1 타임 유닛(1ns) 대기하게 합니다. 두 번째 지연 문은 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

이 예제에서 이전 예제와 유일한 차이는 timescale이 1ns/1ns에서 10ns/1ns로 변경되었다는 것입니다. 시간 단위는 10ns이고 정밀도는 1ns입니다.

// time_unit은 10ns, time_precision은 1ns인 timescale 선언
`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

실제 시뮬레이션 시간은 #로 지정된 지연에 시간 단위를 곱한 후 정밀도에 따라 반올림하여 얻습니다. 첫 번째 지연 문은 10ns가 되고, 두 번째는 14.9ns가 되어 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.

파형의 기본 단위가 10나노초 단위이며 정밀도는 1ns임을 알 수 있습니다.

예제 #3: 1ns/1ps

이 예제에서 유일한 변화는 timescale이 1ns/1ns에서 1ns/1ps로 변경되었다는 것입니다. 시간 단위는 1ns이고 정밀도는 1ps입니다.

// time_unit은 1ns, time_precision은 1ps인 timescale 선언
`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

시간 단위가 새로운 정밀도 값인 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 결합(Concatenation) & 복제(Replication) 연산자 실전 가이드
  3. Verilog 할당문 이해: 유형, 문법, 모범 사례
  4. Verilog 차단 vs 비차단 할당: 핵심 차이점 완벽 이해
  5. Verilog 함수 마스터하기: 효율적인 RTL 설계를 위한 활용법
  6. Verilog 태스크 이해: 함수와의 차이점, 문법, 활용법
  7. Verilog 스케줄링 의미론 이해: 타이밍, 이벤트, 실행 순서
  8. Verilog 클럭 생성기: 설계 및 구현 가이드
  9. Verilog 수학 함수 마스터하기: 효율적인 하드웨어 설계를 위한 활용
  10. Verilog $timeformat 마스터하기: 정밀도 및 표시 제어