我目前正在用Verilog 2001编写硬件加速器的代码,出现了一个问题,我找不到答案(也许我不知道如何搜索它):
always @(posedge clk) begin
reg_q <= reg_d;
end
always @* begin
...
reg_d = reg_q;
case(...) begin
...
end
...
end
问题是:
我有一个简单的 1 位寄存器
A
,在某些情况下它会在 1 和 0 之间交替。
寄存器
reg_q
的下一个状态取决于某个变量foo
,并且其依赖性与A
的位变化一致。因此,我可以做两件事,但我不知道它们是否相同,或者它们会产生一些差异,比如说加速器的功耗或电路的面积。综合后会产生相同的电路吗?下面两个选项:
乘法:
reg_d = reg_q + (foo)*(A)
If 语句:
reg_d = reg_q
if(A) begin
reg_d = reg_q + (foo)
end
这是我第一次在这里提问,如果这是一个重复或不相关的问题,我很抱歉。
这都是组合逻辑,它生成相同的布尔方程,从而产生相同的硬件。只要您不编写创建额外锁存器的代码,功率/面积就不会有差异。