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 named block (como um loop forever, bloco begin-end ou task). Ela é útil para sair de loops que, de outra forma, executariam para sempre.

Sintaxe:

disable block_name;

O bloco deve ser rotulado com um nome.

Disable com Loop Forever

initial 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 aquele bloco nomeado.
    end
  end
end

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

Disable em um Bloco Separado

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

initial begin
  #50;
  disable counter;   // Para o bloco counter de fora
end

Aqui, o loop forever executa continuamente dentro do bloco nomeado counter. A instrução disable counter é colocada em um bloco initial separado. Após 50 unidades de tempo, o disable counter executa e interrompe o bloco counter — o que encerra o loop forever pelo lado de fora.

Regras Importantes

RegraExplicação
block deve ser nomeadobegin : block_name
disable interrompe a execução imediatamenteO código para naquele momento
Pode ser usado de qualquer lugarDe qualquer block no module
Útil para parar laços foreverCaso contrário, eles nunca param
challenge icon

Desafio

Você recebe um módulo com um contador que executa para sempre. 

O que fazer:

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

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

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: Aguarde 50 unidades de tempo
        
        // Passo 2: Desabilite o bloco counter
        
        // Passo 3: Imprima "Counter stopped"
        
        // Passo 4: Encerre 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