将always_comb进程分开以获得速度?

时间:2017-03-13 00:43:02

标签: verilog system-verilog

有几个变量定义:

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上的执行(在综合和实现之后)。我的观点是:如果阻塞语句真的阻塞,即使变量不相互依赖,分离的大小写应该导致较低的延迟,直到cbase之后稳定} 已经改变。 规范对此有何看法?

1 个答案:

答案 0 :(得分:0)

  

...鉴于RHS在下一个语句执行之前被完全评估并分配给LHS?

这个假设是不准确的。您提供的代码示例完全等效,并将合成到相同的RTL。

always_comb生成组合逻辑。没有暗示的顺序 - 当其中一个输入(如base)发生变化时,所有三个输出都将尽快变为新结果,受传播延迟的影响。无法保证哪一个(如果有的话)会首先稳定新值。

对于它的价值,同样的原则也适用于always_ff。如果这些代码示例使用的是always_ff而不是always_comb,那么它们也是等效的; base更改后,单个时钟边缘会导致所有三个值abc更新为新的值。