Menu
Coddy logo textTech

Disable Statement

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, um bloco begin-end ou uma tarefa). Ela é útil para sair de loops que, caso contrário, seriam executados para sempre.

Sintaxe:

disable block_name;

O block 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 é colocada dentro do loop. Quando count chega a 5, disable counter é executada e interrompe todo o bloco counter, o que também interrompe imediatamente o loop forever.

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 é executado continuamente dentro do bloco nomeado counter. A instrução disable counter é colocada em um bloco initial separado. Após 50 unidades de tempo, disable counter é executada e interrompe o bloco counter, o que encerra o loop forever a partir de fora.

Regras importantes

RegraExplicação
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 interromper loops foreverCaso contrário, eles nunca param
challenge icon

Desafio

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

O que fazer:

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

  1. Adicione #50; para aguardar 50 time units
  2. Adicione disable counter; para interromper o block do contador
  3. Adicione $display("Counter stopped"); para imprimir a mensagem
  4. Adicione $finish; para finalizar a simulation

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

Pratique por conta própria: Compilador de Verilog online