비활성화 문
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 62번째.
disable 문은 이름이 지정된 블록(forever 루프, begin-end 블록 또는 태스크와 같은)의 실행을 중지합니다. 이는 그렇지 않으면 영원히 실행될 루프를 빠져나오는 데 유용합니다.
구문:
disable block_name;블록은 이름으로 레이블이 지정되어야 합니다.
Forever 루프로 비활성화하기
begin : counter // counter는 블록에 counter라는 이름을 부여합니다.
forever begin
#10 count = count + 1;
if (count == 5) begin
disable counter; // disable counter는 해당 이름의 블록 전체를 중지시킵니다.
end
end
endforever 루프는 counter라는 이름의 블록 안에 들어 있습니다. disable counter 문은 루프 내부에 위치합니다. count가 5에 도달하면, disable counter가 실행되어 counter 블록 전체를 중지시키며, 이는 forever 루프 또한 즉시 중단시킵니다.
별도의 블록에서 비활성화하기
begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // 외부에서 counter 블록을 중지합니다
end여기서 forever 루프는 counter라는 이름의 블록 내부에서 계속해서 실행됩니다. disable counter 문은 별도의 initial 블록에 배치됩니다. 50 시간 단위 후에 disable counter가 실행되어 counter 블록을 중지시키며, 이는 외부에서 forever 루프를 종료하게 됩니다.
중요 규칙
| 규칙 | 설명 |
|---|---|
| 블록의 이름을 지정해야 함 | begin : block_name |
| Disable은 즉시 실행을 중단함 | 그 시점에 코드가 중단됨 |
| 어디서나 사용 가능 | 모듈 내의 모든 블록에서 |
forever 루프를 중단하는 데 유용함 | 그렇지 않으면 루프가 절대 멈추지 않음 |
챌린지
영원히 실행되는 카운터가 포함된 모듈이 제공됩니다.
수행할 작업:
각 주석을 올바른 코드로 교체하여 빈 블록을 완성하세요:
- 50 시간 단위 동안 대기하도록
#50;를 추가합니다. - 카운터 블록을 중지하도록
disable counter;를 추가합니다. - 메시지를 출력하도록
$display("Counter stopped");를 추가합니다. - 시뮬레이션을 종료하도록
$finish;를 추가합니다.
치트 시트
disable 문은 이름이 지정된 블록(예: forever 루프)의 실행을 중지합니다. 블록은 begin : block_name을 사용하여 레이블을 지정해야 합니다.
블록 내부에서 비활성화(Disable):
begin : counter
forever begin
#10 count = count + 1;
if (count == 5) disable counter;
end
end별도의 블록에서 비활성화(Disable):
begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // 외부에서 이름이 지정된 블록을 중지함
end직접 해보기
module disable_challenge;
integer count;
initial begin
count = 0;
fork
begin : counter
forever begin
#10 count = count + 1;
$display("count = %d", count);
end
end
begin
// 1단계: 50 시간 단위 동안 대기
// 2단계: counter 블록 비활성화
// 3단계: "Counter stopped" 출력
// 4단계: 시뮬레이션 종료
end
join
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.