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, bloco begin-end ou task). Ela é útil para sair de loops que, de outra forma, seriam executados para sempre.
Sintaxe:
disable block_name;O bloco deve ser rotulado com um nome.
Desabilitar com Loop Forever
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
endO loop forever está dentro de um bloco nomeado counter. A instrução disable counter é colocada dentro do loop. Quando count atinge 5, disable counter executa e interrompe todo o bloco counter — o que interrompe imediatamente o loop forever também.
Desabilitar em um Bloco Separado
begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // Interrompe o bloco counter por fora
endAqui, o loop forever executa continuamente dentro do bloco nomeado counter. O comando disable counter é colocado em um bloco initial separado. Após 50 unidades de tempo, disable counter executa e para o bloco counter — o que encerra o loop forever pelo lado de fora.
Regras Importantes
| Regra | Explicação |
|---|---|
| O bloco deve ser nomeado | begin : block_name |
| Disable interrompe a execução imediatamente | O código para naquele momento |
| Pode ser usado de qualquer lugar | De qualquer bloco no módulo |
Útil para interromper loops forever | Caso contrário, eles nunca param |
Desafio
Você recebeu um módulo com um contador que executa indefinidamente.
O que fazer:
Complete o bloco vazio substituindo cada comentário pelo código correto:
- Adicione
#50;para aguardar 50 unidades de tempo - Adicione
disable counter;para parar o bloco do contador - Adicione
$display("Counter stopped");para imprimir a mensagem - Adicione
$finish;para encerrar a simulação
Folha de consulta
A instrução disable interrompe a execução de um bloco nomeado (ex: loop forever). O bloco deve ser rotulado usando begin : block_name.
Desabilitar de dentro do bloco:
begin : counter
forever begin
#10 count = count + 1;
if (count == 5) disable counter;
end
endDesabilitar de um bloco separado:
begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // interrompe o bloco nomeado por fora
endExperimente 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: Aguardar 50 unidades de tempo
// Passo 2: Desativar o bloco counter
// Passo 3: Imprimir "Counter stopped"
// Passo 4: Encerrar a simulação
end
join
end
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo