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
endIl 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
endQui, 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
| Regola | Spiegazione |
|---|---|
| Il blocco deve avere un nome | begin : block_name |
| Disable interrompe immediatamente l'esecuzione | Il codice si interrompe in quel momento |
| Può essere usato da qualsiasi punto | Da qualsiasi blocco del modulo |
Utile per interrompere i cicli forever | Altrimenti non si interrompono mai |
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:
- Aggiungi
#50;per attendere 50 unità di tempo - Aggiungi
disable counter;per fermare il blocco del contatore - Aggiungi
$display("Counter stopped");per stampare il messaggio - 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
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online