Initial 블록
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 47번째.
Verilog에는 두 가지 절차적 블록이 있습니다: initial (한 번 실행)과 always (계속 실행). 이제 initial 블록에 대해 알아보겠습니다.
Initial 블록이란 무엇인가요?
initial 블록은 시뮬레이션 시작 시(시간 0) 단 한 번만 실행됩니다. 실행이 끝나면 다시 실행되지 않습니다.
주로 테스트벤치에서 다음과 같은 용도로 사용됩니다:
- 초기값 설정
- 테스트 신호 생성
- 메시지 표시
- 시뮬레이션 시작
구문
initial begin
// 구문은 순차적으로 한 번만 실행됩니다
end기본 예제
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
end출력:
Simulation started
This runs once테스트 신호를 위한 initial 블록 사용하기
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
end이것은 a를 0, 10, 20 시점에 변경합니다.
Initial vs Always
initial | always | |
|---|---|---|
| 실행 | 한 번 | 지속적으로 (영구히) |
| 용도 | 테스트벤치, 초기화 | 하드웨어 (플립플롭, 카운터) |
| 합성 가능 여부? | 아니요 (시뮬레이션 전용) | 예 (감지 목록 포함 시) |
중요 참고 사항
initial블록은 합성 가능하지 않습니다(not synthesizable) — 하드웨어로 변환될 수 없습니다initial은 테스트벤치(testbenches)에서만 사용하세요$finish가 없으면 시뮬레이션이 영원히 실행됩니다 (중지할 클락이 없음)
챌린지
a를 0으로 설정하고, 10 시간 단위 후에 a를 1로 설정하는 누락된 initial 블록을 추가하세요.
수행할 작업:
initial begin과end를 추가하세요a = 0으로 설정하세요#10동안 대기하세요a = 1로 설정하세요- 시뮬레이션을 종료하기 위해 $finish를 추가하세요
치트 시트
initial 블록은 시뮬레이션 시간 0에 한 번 실행됩니다. 테스트벤치에서만 사용됩니다 (합성 불가능).
initial begin
a = 0; // time 0에 설정
#10 a = 1; // time 10에 설정
#10 a = 0; // time 20에 설정
$finish; // 시뮬레이션 종료
end$finish가 없으면 시뮬레이션은 영원히 실행됩니다.
initial | always | |
|---|---|---|
| 실행 | 한 번 | 지속적으로 |
| 용도 | 테스트벤치 | 하드웨어 |
| 합성 가능 여부? | 아니요 | 예 |
직접 해보기
module test;
reg a;
// TODO: 여기에 initial 블록 추가
// a = 0으로 설정
// #10 대기
// a = 1로 설정
// 시뮬레이션을 종료하기 위해 $finish; 추가
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.