在连续的 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
块,可能更容易理解和维护代码,尤其是随着变量数量的增加。对于像您的示例这样的少量变量,两者都可以。
假设我有两个 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
块,可能更容易理解和维护代码,尤其是随着变量数量的增加。对于像您的示例这样的少量变量,两者都可以。