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, de outra forma, seriam executados para sempre.
Sintaxe:
disable block_name;O bloco deve ser rotulado com um nome.
Desabilitar com um loop infinito
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
endO 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; // Para o bloco counter de fora
endAqui, 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
| 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 do módulo |
Útil para interromper loops forever | Caso contrário, eles nunca param |
Desafio
Você recebeu um módulo com um contador que é executado para sempre.
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 interromper o bloco do contador - Adicione
$display("Counter stopped");para imprimir a mensagem - Adicione
$finish;para finalizar 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
// 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
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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online