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 begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
end이 코드는 시각 0, 10, 20에 a의 값을 변경합니다.
초기 실행과 항상 실행
initial | always | |
|---|---|---|
| 실행 | 한 번 | 계속해서 (영원히) |
| 용도 | 테스트벤치, 초기화 | 하드웨어 (플립플롭, 카운터) |
| 합성 가능? | 초기값 설정에만 사용 (FPGA) | 가능 (감도 목록 사용 시) |
중요 참고 사항
initial블록은 주로 시뮬레이션용입니다. 합성 도구는#10과 같은 지연이나$display와 같은 태스크를 하드웨어로 구현할 수 없습니다.initial은 주로 테스트벤치에서 사용하세요. 설계 모듈에서는 FPGA 합성 도구만 이를 사용하며, 레지스터나 메모리의 초기값을 설정하는 용도로만 사용합니다.- 테스트벤치에 자유 실행 클록(예:
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러