【发布时间】:2018-02-04 01:40:31
【问题描述】:
我有两个 64 位寄存器,我想将它们相乘。我只对结果的前 64 位感兴趣。在verilog中写这个的最好方法是什么?我试过了
c = (a*b)[127:64]
这是行不通的。所以现在我将乘法的结果分配给一个 128 位寄存器,然后只使用该寄存器的前 64 位。但是计算和存储低 64 位似乎是一种浪费。或者,合成器是否足够聪明,如果这些位从未使用过,就不会真正合成它们?
【问题讨论】:
-
这个乘法的结果是 128位,所以你需要提供一个寄存器来保存它们。我相信合成器,如果它能够合成乘法,将需要所有这些。否则,您将需要实现自己的自定义乘数,它根本不会产生下半部分。
-
合成器能够合成 64x64->128 乘法(我已经试过了)。是的,我还使用自己的乘法例程(内部仅使用 32x32->64 位乘法)实现了它。我想知道是否有一种(更好的)方法可以在 verilog 中以标准/有效的方式编写它。