Verilog 固定/浮点乘法的最佳方式是什么?

Verilog 固定/浮点乘法的最佳方式是什么?,verilog,register-transfer-level,Verilog,Register Transfer Level,一般来说,有两种方法,我知道什么是乘法固定/浮点乘法。 我是像Verilog一样的硬件工程师 1.单向 2.另一种方式是 向左移动“” 我认为以上方法的结果都是一样的。 但我不确定,所以我在这里问我想知道的是,esay可以使用哪种方法并加以纠正 更新1。 1.第一条路 What if I want to multipicate with 3.82 *2.581. Then we can make integer above fractional numbers like this. 3.98*

一般来说,有两种方法,我知道什么是乘法固定/浮点乘法。 我是像Verilog一样的硬件工程师

1.单向

2.另一种方式是 向左移动“”

我认为以上方法的结果都是一样的。 但我不确定,所以我在这里问我想知道的是,esay可以使用哪种方法并加以纠正

更新1。 1.第一条路

What if I want to multipicate with 3.82 *2.581.
Then we can make integer above fractional numbers like this.
3.98*8  = 31.84.
What if we want only integer result then we could like this way to calculate .
3.98<<7 =3.98 * 2^7  = almost 509.
Then we can get 509 * 8 = 4072
Then we can 31 at 4072>>7.
如果我想用3.82*2.581进行多次复制怎么办。
然后我们可以像这样把整数变成分数以上的整数。
3.98*8  = 31.84.
若我们只想要整数结果,那个么我们可以用这种方法来计算。
3.987.
2.双向。 3.98=几乎“b11_111110101…”。。。 在这里,我们可以选择一套计算乘法的深度。 8='b1000 11_11111010*1000=(4分),(0分)*(2分),(8分) 11 1111101000 = 8144 然后我们得到8144*2^-8=31.8125

更新2 我对和之间的乘法感到困惑


哪种方法更好?

进行定点运算的最佳方法是使用(希望)经过仔细编写和调试的定点库。您使用的是Verilog,所以只需在Google中搜索“Verilog定点库”。你会找到这个的


等等。我不推荐这一款,因为我没有使用过它,但你可以看到它已经被很多人使用过。

我不知道你在问什么。你是在问如何做分数运算,寻找固定点和浮点数,还是如何做定点乘法。您的链接1只描述了如何解释
*
的结果,我想讨论的是乘法器的实现,而不是定点数据的解释。@Morgan。我想问的是哪一种乘法方法在第一和第二之间更好。我认为以上两个都是关于定点乘法的。我失踪了吗?怎么会更好?易于实施、维护、更快或更低的功耗。Shift-add可以拆分为多个周期,所以数据速率与时钟速率的比较也是一个考虑因素。即使是shift和add也可以在多个循环中进行拆分,但我认为在简单和维护方面,它们比“”更好,不是吗?有时designware的性能非常好,现在它只是在verilog中直接使用了“”。比一行代码更简单。Mul=a*b;它允许工具比特定的实现更容易地优化时间。
What if I want to multipicate with 3.82 *2.581.
Then we can make integer above fractional numbers like this.
3.98*8  = 31.84.
What if we want only integer result then we could like this way to calculate .
3.98<<7 =3.98 * 2^7  = almost 509.
Then we can get 509 * 8 = 4072
Then we can 31 at 4072>>7.