If 条件语句
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 52 课,共 90 课。
if 语句是一个决策代码块,只有当条件为真时才会执行代码。if 语句会检查条件。
如果条件为true(1),就会执行其中的代码。如果条件为false(0),就会跳过这段代码。
语法:
if (condition) begin
// 当 condition 为真时,代码会运行
end简单示例
if (reset) begin
count = 0;
end在这个示例中:
- 使用
begin和end标记代码块的开始和结束
- 如果
reset为 1(真),则会执行begin和end之间的代码 →count变为 0 - 如果
reset为 0(假),则会跳过其中的代码 → 什么也不会发生
begin 和 end 的作用类似于其他编程语言中的花括号 { }。它们将语句组合在一起,让 Verilog 知道哪些代码属于 if 条件。虽然这里只有一条语句,但为了保持一致,使用 begin 和 end 仍然是个好习惯。
Always 块中的 If 语句
always @(posedge clk) begin
if (reset)
count <= 0;
end注意:对于单条语句,begin 和 end 是可选的。例如,在上面的 always 块中,if 后面不需要 begin/end,因为它只有一条语句。
条件可以是任意表达式
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
end重要规则
| 规则 | 说明 |
|---|---|
| 条件可以是任意表达式 | 非零(且已知)的值会被视为真,零会被视为假 |
多条语句需要使用 begin / end | 类似于其他语言中的 { } |
不使用 begin/end 时,后面只能跟一条语句 | 只有下一条语句属于 if |
挑战
要做什么:
- 添加缺少的
if语句,让代码正常运行。
- 当
enable为1时,out应等于a & b - 当
enable为0时,out应保持为0(不变)
起始代码将 out = 0 初始化,并测试这两种情况。
亲手试试
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// 测试用例 1:enable = 1
enable = 1;
// TODO:添加 if 语句(out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// 测试用例 2:enable = 0
enable = 0;
out = 0;
// TODO:out 应保持为 0
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器