Menu
CoddyTech

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
challenge icon

挑战

要做什么:

  1. 添加缺少的 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Verilog 在线编译器