Menu
CoddyTech

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, 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 bloco deve ter um nome como rótulo.

Desabilitar 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 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 chega a 5, disable counter é executada e interrompe todo o bloco counter, o que também interrompe imediatamente o loop forever.

Desativar em um bloco separado

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

initial begin
  #50;
  disable counter;   // Interrompe 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 separado initial. Após 50 unidades de tempo, disable counter é executada e interrompe o bloco counter, encerrando o loop forever externamente.

Regras importantes

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

Desafio

Você recebeu um módulo com um contador que funciona para sempre. 

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 exibir 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
        // Etapa 1: Aguarde 50 unidades de tempo
        
        // Etapa 2: Desative o bloco counter
        
        // Etapa 3: Imprima "Counter stopped"
        
        // Etapa 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