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