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
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; // Interrompe 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 separado initial. Após 50 unidades de tempo, disable counter é executada e interrompe o bloco counter, encerrando o loop forever externamente.
Regras importantes
| Regra | Explicação |
|---|---|
| O bloco deve ter um nome | begin : block_name |
| Desativar interrompe a execução imediatamente | O código para nesse 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 funciona 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 parar o bloco do contador - Adicione
$display("Counter stopped");para exibir a mensagem - 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
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