Disable Statement
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 named block (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 block deve ser rotulado com um nome.
Disable 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 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.
Disable 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 block 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 block no module |
Útil para interromper loops forever | Caso contrário, eles nunca param |
Desafio
Você recebeu um módulo com um contador que executa forever.
O que fazer:
Complete o block vazio substituindo cada comentário pelo código correto:
- Adicione
#50;para aguardar 50 time units - Adicione
disable counter;para interromper o block do contador - Adicione
$display("Counter stopped");para imprimir a mensagem - Adicione
$finish;para finalizar a simulation
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 projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online