Timescale 지시어
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 70번째.
timescale 지시어는 시뮬레이션을 위한 시간 단위와 시간 정밀도를 설정합니다. 이는 시뮬레이터가 #10과 같은 지연 값을 어떻게 해석할지 알려줍니다.
이전 레슨에서, 우리는 #10과 같은 지연 시간을 "10"이 무엇을 의미하는지 명시하지 않고 사용했습니다. 이것은 10 나노초일까요? 아니면 10 피코초일까요? timescale 지시어가 이 질문에 대한 답을 제공합니다.
구문:
`timescale time_unit / time_precision| 구성 요소 | 의미 | 예시 |
|---|---|---|
time_unit | 지연 시간을 위한 기본 단위 | 1ns |
time_precision | 시뮬레이션의 정밀도 | 1ps |
timescale 앞의 백틱 `은 이것이 컴파일러 지시어임을 의미합니다.
예제
`timescale 1ns / 1pstime_unit = 1ns→#10은 10 나노초를 의미합니다time_precision = 1ps→ 시뮬레이션이 가장 가까운 피코초 단위로 반올림됩니다
일반적인 Timescale 값
| 시간 단위 | 정밀도 | 사용 사례 |
|---|---|---|
1ns / 1ns | 나노초 (Nanosecond) | 단순 시뮬레이션 |
1ns / 1ps | 피코초 (Picosecond) | 더 정밀한 시뮬레이션 |
1ps / 1ps | 피코초 (Picosecond) | 고속 설계 |
1us / 1ns | 마이크로초 (Microsecond) | 느린 시뮬레이션 |
지연 시간에 미치는 영향
`timescale 1ns / 1ps
initial begin
#10 a = 1; // 10 나노초 대기
endtimescale이 없으면, 일부 시뮬레이터는 기본값(종종 1ns)을 가정합니다. 항상 이를 명시하는 것이 가장 좋습니다.
중요 규칙
| 규칙 | 설명 |
|---|---|
| 모듈 외부에 있어야 함 | 모듈 정의 앞에 위치해야 함 |
| 백틱(Backtick) 기호 | 'timescale이 아닌 `timescale |
| 시간 단위 ≥ 시간 정밀도 | 1ns / 1ps는 허용되지만, 1ps / 1ns는 허용되지 않음 |
| 파일 내의 모든 지연 시간에 영향을 미침 | 일반 지연, 게이트 지연, 할당 지연 |
챌린지
할 일:
지연 시간이 10ns, 20ns, 30ns를 나타내도록 누락된 timescale 지시어를 추가하세요.
치트 시트
`timescale 지시어는 시뮬레이션을 위한 시간 단위(time unit)와 시간 정밀도(time precision)를 설정합니다. 이 지시어는 반드시 모듈 정의 앞에 위치해야 합니다.
`timescale time_unit / time_precision`timescale 1ns / 1ps
initial begin
#10 a = 1; // 10 나노초를 대기합니다
endtime_unit— 지연 시간에 대한 기본 단위 (예:#10= 10ns)time_precision— 시뮬레이션 반올림의 정밀도 (반드시 시간 단위보다 작거나 같아야 함)
| Timescale | 사용 사례 |
|---|---|
1ns / 1ns | 단순 시뮬레이션 |
1ns / 1ps | 더 높은 정밀도 |
1ps / 1ps | 고속 설계 |
1us / 1ns | 저속 시뮬레이션 |
직접 해보기
// TODO: 타임스케일 지시어 추가 (1ns / 1ps)
module timescale_challenge;
initial begin
$display("Time %0t", $time);
#10 $display("Time %0t (10ns = 10000ps)", $time);
#10 $display("Time %0t (20ns = 20000ps)", $time);
#10 $display("Time %0t (30ns = 30000ps)", $time);
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.