Verilog $timeformat 마스터하기: 정밀도 및 표시 제어
Verilog timescale 지시자는 시뮬레이션의 시간 단위와 정밀도를 지정합니다.
Verilog $timeformat 시스템 함수는 $display와 $strobe 같은 디스플레이 문장에서 %t 포맷 지정자의 보고 스타일을 지정합니다.
문법
$timeformat(<unit_number>, <precision>, <suffix_string>, <minimum field width>);
- unit_number는 소스 코드에서 사용된 모든
`timescale 지시자 중 가장 작은 시간 정밀도
- precision은 현재 timescale의 소수 자릿수를 나타냄
- suffix_string은 실제 시간 값과 함께 스케일을 표시하는 옵션
| 단위 번호 |
시간 단위 |
| -3 |
1ms |
| -6 |
1us |
| -9 |
1ns |
| -12 |
1ps |
| -15 |
1fs |
예제 #1: 1ns/1ps
$timeformat이 시간 단위 표시 형식에 어떻게 영향을 미치는지 보여주는 예제입니다.
`timescale 1ns/1ps
module tb;
bit a;
initial begin
// 정밀도가 메인 스케일(1ns)의 1/1000이므로
// 이 지연은 3번째 위치에서 잘림
#10.512351;
// 기본 timeformat 파라미터로 현재 시간 표시
$display("[T=%0t] a=%0b", $realtime, a);
// timeformat 파라미터 변경 후 다시 표시
$timeformat(-9, 2, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// 접미사 공백 제거, 소수 자릿수 5로 확장
$timeformat(-9, 5, "ns");
$display("[T=%0t] a=%0b", $realtime, a);
// 접미사가 잘못됨, "ps"(-12)로 설정했으므로 "ns"면 안 됨
$timeformat(-12, 3, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// 접미사를 ps로 수정
$timeformat(-12, 2, " ps");
$display("[T=%0t] a=%0b", $realtime, a);
end
endmodule
시뮬레이션 로그
xcelium> run
[T=10512] a=0
[T=10.51 ns] a=0
[T=10.51200ns] a=0
[T=10512.000 ns] a=0
[T=10512.00 ps] a=0
xmsim: *W,RNQUIE: Simulation is complete.
예제 #2: 1ns/100ps
위 예제와 같은 코드지만 다른 timescale을 사용했습니다.
`timescale 1ns/100ps
시뮬레이션 로그
xcelium> run
[T=105] a=0
[T=10.50 ns] a=0
[T=10.50000ns] a=0
[T=10500.000 ns] a=0
[T=10500.00 ps] a=0
xmsim: *W,RNQUIE: Simulation is complete.
예제 #3: 100ns/1ns
`timescale 100ns/1ns
#1은 100ns를 나타내므로 #10은 1000ns가 됩니다.
시뮬레이션 로그
xcelium> run
[T=1051] a=0
[T=1051.00 ns] a=0
[T=1051.00000ns] a=0
[T=1051000.000 ns] a=0
[T=1051000.00 ps] a=0
xmsim: *W,RNQUIE: Simulation is complete.