首页 > 解决方案 > 在连续的 always 块中分配多个 if 语句

问题描述

假设我有两个总是块:

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

解决方案


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

关于您关于处理延迟的问题,模拟应该花费相同的时间来执行这两种情况。由于 Verilog 代码已编译,因此两个代码示例都应编译为有效的同一映像。

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


推荐阅读