Menu
Coddy logo textTech

Istruzione Disable

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 62 di 90.

L’istruzione disable interrompe l’esecuzione di un blocco con nome (come un ciclo forever, un blocco begin-end o un’attività). È utile per uscire dai cicli che altrimenti continuerebbero all’infinito.

Sintassi:

disable block_name;

Il blocco deve avere un nome come etichetta.

Disabilitare con un ciclo infinito

initial begin : counter // counter assegna al blocco il nome counter.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter arresta l'intero blocco con quel nome.
    end
  end
end

Il ciclo forever si trova all'interno di un blocco denominato counter. L'istruzione disable counter è posizionata all'interno del ciclo. Quando count raggiunge 5, viene eseguito disable counter e si arresta l'intero blocco counter, interrompendo immediatamente anche il ciclo forever.

Disabilita in un blocco separato

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

initial begin
  #50;
  disable counter;   // Arresta il blocco counter dall'esterno
end

Qui, il ciclo forever viene eseguito continuamente all'interno del blocco denominato counter. L'istruzione disable counter è inserita in un blocco separato initial. Dopo 50 unità di tempo, disable counter viene eseguita e interrompe il blocco counter, terminando dall'esterno il ciclo forever.

Regole importanti

RegolaSpiegazione
Il blocco deve avere un nomebegin : block_name
Disable interrompe immediatamente l'esecuzioneIl codice si interrompe in quel momento
Può essere usato da qualsiasi puntoDa qualsiasi blocco del modulo
Utile per interrompere i cicli foreverAltrimenti non si interrompono mai
challenge icon

Sfida

Ti viene dato un modulo con un contatore che gira all'infinito. 

Cosa fare:

Completa il blocco vuoto sostituendo ogni commento con il codice corretto:

  1. Aggiungi #50; per attendere 50 unità di tempo
  2. Aggiungi disable counter; per fermare il blocco del contatore
  3. Aggiungi $display("Counter stopped"); per stampare il messaggio
  4. Aggiungi $finish; per terminare la simulazione

Provalo tu

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
        // Passaggio 1: Attendi 50 unità di tempo
        
        // Passaggio 2: Disabilita il blocco counter
        
        // Passaggio 3: Stampa "Counter stopped"
        
        // Passaggio 4: Termina la simulazione
        
      end
    join
  end
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online