在连续的 always 块中分配多个 if 语句

Assigning multiple if statements in a sequential always block

假设我有两个 always 块:

always @(posedge clk) begin
  if (rst) a <= 0;
  else begin
     if (condition_one) a <= 1;
  end
end

always @(posedge clk) begin
  if (rst) b <= 0;
  else begin
     if (condition_two) b <= 1;
  end
end

如果我像下面这样将它们组合成一个 always 块,会有什么不同?

always @(posedge clk) begin
  if (rst) begin
     a <= 0;
     b <= 0;
  end else begin
     if (condition_one) a <= 1;
     if (condition_two) b <= 1;
  end
end

而且如果除了a和b之外我还有更多的变量,比如c、d、e等,单个always块会不会有太多的延迟来处理所有这些并行独立的if 语句? 将它们分成平行的 always 块是否更安全?

无论您添加多少变量,两个代码示例都应该以相同的方式模拟。

关于您关于处理延迟的问题,对于这两种情况,模拟应该花费相同的时间来执行。由于 Verilog 代码是经过编译的,因此两个代码示例应该有效地编译成相同的图像。

如果您使用单独的 always 块,可能更容易理解和维护代码,尤其是随着变量数量的增加。对于像您的示例这样的少量变量,两者都可以。