如何在 Verilog 中计算浮点被乘数?到目前为止,我通常使用 shift << 1024 ,然后 float 变成整数。然后我做了一些运算,然后 >> 1024 再次获得分数。
例如 0.3545 = 2^-2 + 2^-4 + ...
我对另一种方式有疑问,比如这样。我不知道减号 (-) 从何而来:
0.46194 = 2^-1 - 2^-5 - 2^-7 + 2^-10。
我刚刚从某人那里看到了这个。但按照你的方式,它是这样表示的
0.46194 = 2^-2 + 2^-3 + 2^-4 + 2^-6 + 2^-7 + 2^-10 + .... .
我不明白它怎么知道减号被使用了?
我们如何知道何时需要减号?另外我如何申请verilog RTL?
更新:我理解在操作中使用减号的概念。但是有没有其他方法或方法可以使约简表达式乘以 2 的幂?
更新:我们如何在verilog中使用这个方法?例如,我倾斜了 0.46194 = 2^-1 - 2^-5 - 2^-7 + 2^-10。然后这段代码在verilog中是这样写的。 0.011101101 ='hED ='d237。那么问题的关键是我们如何将其应用到verilog中的应用中?
<小时/>更新:先生,请您检查一下这个吗?结果略有不同。
0.46194 = 0.011101101。我只是尝试这样
0.011101101
0.100T10T01
= 2^-1 - 2^-4 + 2^-5 - 2^-7 + 2^-9。 = 0.462890625
有些不同。我做错了什么?
最佳答案
变量与常量的乘法通常是通过将变量添加到其自身的移位版本来实现的。与接受两个变量的乘法器电路相比,这在 FPGA 上的成本要低得多。
当常量中有一系列 1 位时,您还可以通过使用减法来进一步节省成本。 (减法电路的成本仅与加法电路相同。)
考虑数字30 = 11110
。它等于 16 + 8 + 4 + 2,但也等于 32 - 2。
一般来说,被乘数 1 位的序列,或者几个连续的 2 的幂的和,可以通过在最高有效位之后添加 2 的第一个幂并减去最低有效位来形成。因此,请使用 32x - 2x
,而不是 16x + ... + 2x
。
1 位序列是分数还是整数的一部分并不重要。您只是应用恒等式 2^a = 1 + Σ2^0 ... 2^(a-1)
,换句话说 Σ2^0 ... 2^ a = 2^(a+1) - 1
。
关于vhdl - 乘以带负项的幂级数求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370330/