Menu
Coddy logo textTech

비활성화 문

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 62번째.

disable 문은 named block(forever 루프, begin-end 블록 또는 task와 같은)의 실행을 중지합니다. 이는 그렇지 않으면 영원히 실행될 루프에서 벗어나는 데 유용합니다.

구문:

disable block_name;

해당 블록은 이름(name)으로 레이블되어 있어야 합니다.

Forever Loop와 함께 Disable 사용하기

initial begin : counter // counter는 블록에 counter라는 이름을 부여합니다.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter는 해당 이름의 전체 블록을 중지합니다.
    end
  end
end

forever 루프는 이름 지정된 블록인 counter 내부에 있습니다. disable counter 문은 루프 내부에 위치합니다. count가 5에 도달하면 disable counter가 실행되어 counter 블록 전체를 중지하며, 이는 forever 루프 역시 즉시 중지시킵니다.

별도 블록에서의 Disable

initial begin : counter
  forever begin
    #10 count = count + 1;
  end
end

initial begin
  #50;
  disable counter;   // 외부에서 counter 블록을 중지합니다
end

여기서 forever 루프는 이름이 지정된 counter 블록 내에서 지속적으로 실행됩니다. disable counter 문은 별도의 initial 블록에 배치되어 있습니다. 50 time 유닛이 지난 후, disable counter가 실행되어 counter 블록을 중지하며 — 이는 외부에서 forever 루프를 종료시킵니다.

주요 규칙

규칙설명
Block must be namedbegin : block_name
Disable stops execution immediatelyCode stops at that moment
Can be used from anywhereFrom any block in the module
Useful for stopping forever loopsOtherwise they never stop
challenge icon

챌린지

무한히 실행되는 카운터가 포함된 모듈이 주어집니다. 

해야 할 일:

각 주석을 올바른 코드로 대체하여 빈 블록을 완성하세요:

  1. 50 time units 동안 대기하기 위해 #50; 추가
  2. counter 블록을 중지하기 위해 disable counter; 추가
  3. 메시지를 출력하기 위해 $display("Counter stopped"); 추가
  4. simulation을 종료하기 위해 $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
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨