设计数字电路时,if 语句还是乘法(特定情况)哪个更省电?

问题描述 投票:0回答:1

我目前正在用Verilog 2001编写硬件加速器的代码,出现了一个问题,我找不到答案(也许我不知道如何搜索它):

  1. 有一个简单的顺序逻辑:
always @(posedge clk) begin
   reg_q <= reg_d;
end
  1. 有一个 FSM 正在做一些事情:
always @* begin
   ...
   reg_d = reg_q;
   case(...) begin
      ...
   end
   ...
end

问题是:

  1. 我有一个简单的 1 位寄存器

    A
    ,在某些情况下它会在 1 和 0 之间交替。

  2. 寄存器

    reg_q
    的下一个状态取决于某个变量
    foo
    ,并且其依赖性与
    A
    的位变化一致。因此,我可以做两件事,但我不知道它们是否相同,或者它们会产生一些差异,比如说加速器的功耗或电路的面积。综合后会产生相同的电路吗?下面两个选项:

乘法:

reg_d = reg_q + (foo)*(A)

If 语句:

reg_d = reg_q
if(A) begin
   reg_d = reg_q + (foo)
end

这是我第一次在这里提问,如果这是一个重复或不相关的问题,我很抱歉。

verilog synthesis
1个回答
0
投票

这都是组合逻辑,它生成相同的布尔方程,从而产生相同的硬件。只要您不编写创建额外锁存器的代码,功率/面积就不会有差异。

© www.soinside.com 2019 - 2024. All rights reserved.