禁用语句
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 62 课,共 90 课。
disable 语句会停止执行命名代码块(例如 forever 循环、begin-end 代码块或任务)。它适合用于跳出原本会一直运行的循环。
语法:
disable block_name;必须为代码块指定名称。
使用 Forever Loop 禁用
initial begin : counter // counter 将这个代码块命名为 counter。
forever begin
#10 count = count + 1;
if (count == 5) begin
disable counter; // disable counter 会停止整个名为 counter 的代码块。
end
end
endforever 循环位于一个名为 counter 的代码块中。disable counter 语句放在循环内部。当 count 达到 5 时,disable counter 会执行并停止整个 counter 代码块,这也会立即停止 forever 循环。
在单独的代码块中禁用
initial begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // 从外部停止 counter 块
end这里,forever 循环在名为 counter 的代码块中持续运行。disable counter 语句放在一个单独的initial 代码块中。经过 50 个时间单位后,disable counter 执行并停止 counter 代码块,从外部终止 forever 循环。
重要规则
| 规则 | 说明 |
|---|---|
| 必须为代码块命名 | begin : block_name |
| Disable 会立即停止执行 | 代码会在那一刻停止 |
| 可以从任何位置使用 | 可以在模块中的任何代码块中使用 |
适合用于停止 forever 循环 | 否则它们永远不会停止 |
挑战
给你一个包含计数器的模块,该计数器会一直运行。
要做什么:
完成空代码块,将每条注释替换为正确的代码:
- 添加
#50;,等待 50 个时间单位 - 添加
disable counter;,停止计数器代码块 - 添加
$display("Counter stopped");,输出这条消息 - 添加
$finish;,结束仿真
亲手试试
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
// 第 1 步:等待 50 个时间单位
// 第 2 步:禁用 counter 块
// 第 3 步:打印 "Counter stopped"
// 第 4 步:结束仿真
end
join
end
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器