Menu
Coddy logo textTech

Instrução Disable

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 62 de 90.

A instrução disable interrompe a execução de um bloco nomeado (como um loop forever, bloco begin-end ou task). Ela é útil para sair de loops que, de outra forma, seriam executados para sempre.

Sintaxe:

disable block_name;

O bloco deve ser rotulado com um nome.

Desabilitar com Loop Forever

begin : counter // counter dá ao bloco o nome counter.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter interrompe todo esse bloco nomeado.
    end
  end
end

O loop forever está dentro de um bloco nomeado counter. A instrução disable counter é colocada dentro do loop. Quando count atinge 5, disable counter executa e interrompe todo o bloco counter — o que interrompe imediatamente o loop forever também.

Desabilitar em um Bloco Separado

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

initial begin
  #50;
  disable counter;   // Interrompe o bloco counter por fora
end

Aqui, o loop forever executa continuamente dentro do bloco nomeado counter. O comando disable counter é colocado em um bloco initial separado. Após 50 unidades de tempo, disable counter executa e para o bloco counter — o que encerra o loop forever pelo lado de fora.

Regras Importantes

RegraExplicação
O bloco deve ser nomeadobegin : block_name
Disable interrompe a execução imediatamenteO código para naquele momento
Pode ser usado de qualquer lugarDe qualquer bloco no módulo
Útil para interromper loops foreverCaso contrário, eles nunca param
challenge icon

Desafio

Você recebeu um módulo com um contador que executa indefinidamente. 

O que fazer:

Complete o bloco vazio substituindo cada comentário pelo código correto:

  1. Adicione #50; para aguardar 50 unidades de tempo
  2. Adicione disable counter; para parar o bloco do contador
  3. Adicione $display("Counter stopped"); para imprimir a mensagem
  4. Adicione $finish; para encerrar a simulação

Folha de consulta

A instrução disable interrompe a execução de um bloco nomeado (ex: loop forever). O bloco deve ser rotulado usando begin : block_name.

Desabilitar de dentro do bloco:

begin : counter
  forever begin
    #10 count = count + 1;
    if (count == 5) disable counter;
  end
end

Desabilitar de um bloco separado:

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

initial begin
  #50;
  disable counter; // interrompe o bloco nomeado por fora
end

Experimente você mesmo

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
        // Passo 1: Aguardar 50 unidades de tempo
        
        // Passo 2: Desativar o bloco counter
        
        // Passo 3: Imprimir "Counter stopped"
        
        // Passo 4: Encerrar a simulação
        
      end
    join
  end
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos