有几个变量定义:
var integer a;
var integer b;
var integer c;
var integer base;
是这个组合过程
always_comb begin
a = base + 2;
b = base + 3;
c = base + 5;
end
比这些组合过程花费的时间更长
always_comb begin
a = base + 2;
end
always_comb begin
b = base + 3;
end
always_comb begin
c = base + 5;
end
鉴于RHS在下一个语句执行之前被完全评估并分配给LHS? (我知道assign
在这里会好得多,这不是我的观点)
我在谈论FPGA上的执行(在综合和实现之后)。我的观点是:如果阻塞语句真的阻塞,即使变量不相互依赖,分离的大小写应该导致较低的延迟,直到c
在base
之后稳定} 已经改变。
规范对此有何看法?
答案 0 :(得分:0)
...鉴于RHS在下一个语句执行之前被完全评估并分配给LHS?
这个假设是不准确的。您提供的代码示例完全等效,并将合成到相同的RTL。
always_comb
生成组合逻辑。没有暗示的顺序 - 当其中一个输入(如base
)发生变化时,所有三个输出都将尽快变为新结果,受传播延迟的影响。无法保证哪一个(如果有的话)会首先稳定新值。
对于它的价值,同样的原则也适用于always_ff
。如果这些代码示例使用的是always_ff
而不是always_comb
,那么它们也是等效的; base
更改后,单个时钟边缘会导致所有三个值a
,b
和c
更新为新的值。