Disable 문
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 62번째.
disable 문은 이름이 지정된 블록(예: forever 루프, begin-end 블록 또는 작업)의 실행을 중지합니다. 그렇지 않으면 영원히 실행될 루프에서 빠져나오는 데 유용합니다.
구문:
disable block_name;블록에는 이름이 지정되어 있어야 합니다.
무한 루프로 비활성화하기
initial 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 루프도 즉시 중지됩니다.
별도의 블록에서 비활성화하기
initial 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 |
| 비활성화하면 실행이 즉시 중지됨 | 그 시점에 코드가 중지됨 |
| 어디서나 사용할 수 있음 | 모듈의 모든 블록에서 |
forever 루프를 중지하는 데 유용함 | 그렇지 않으면 루프가 절대 중지되지 않음 |
챌린지
영원히 실행되는 카운터가 있는 모듈이 주어집니다.
할 일:
각 주석을 올바른 코드로 바꾸어 빈 블록을 완성하세요:
- 시간 단위 50만큼 기다리도록
#50;을 추가하세요 - 카운터 블록을 중지하도록
disable counter;를 추가하세요 - 메시지를 출력하도록
$display("Counter stopped");를 추가하세요 - 시뮬레이션을 종료하도록
$finish;를 추가하세요
직접 해보기
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러