Verilog 如何用定点数实现指数?

Verilog 如何用定点数实现指数?,verilog,hdl,Verilog,Hdl,我如何在verilog中实现一个代码来解析一个指数方程,该方程的数字必须表示为固定点 例如,我在C++上有这个等式,希望转换为verilog或vhdl:< /p> double y = 0.1+0.75*(1.0/(1.0+exp((x[i]+40.5)/6.0))); 其中“y”和“x”必须是固定点数。x也是一个向量 我查找了具有定点但没有一个具有指数的模块和库。Verilog有一个真实的数据类型,它为浮点数提供模拟时支持。它还有一个求幂运算符,例如a**b将a计算为b的幂 但是,使用真实数

我如何在verilog中实现一个代码来解析一个指数方程,该方程的数字必须表示为固定点

例如,我在C++上有这个等式,希望转换为verilog或vhdl:< /p>
double y = 0.1+0.75*(1.0/(1.0+exp((x[i]+40.5)/6.0)));
其中“y”和“x”必须是固定点数。x也是一个向量

我查找了具有定点但没有一个具有指数的模块和库。

Verilog有一个真实的数据类型,它为浮点数提供模拟时支持。它还有一个求幂运算符,例如a**b将a计算为b的幂

但是,使用真实数据类型编写的代码通常不可合成。相反,在实际硬件设计中,对固定和浮点数的支持通常是通过实现实现的算术逻辑单元来实现的,例如IEEE浮点标准

大多数情况下,即使对于加法和乘法等基本运算,这样的设计也至少需要几个周期。更复杂的算法,如除法、正弦、余弦等,通常使用基于近似多项式的算法来实现


如果你真的想了解如何表示和操作定点和浮点数,你可能应该买一本数学课程的教科书,比如数值方法,或者计算机算术的EE课程。

问题应该能展示你的尝试。在verilog中工作时,人们应该考虑他们试图描述的硬件。乘数相当大,除数更大。如果可能的话,在1个时钟周期内完成的指数合成将比大多数人所能容忍的还要大。您需要将函数分解并将其拆分为多个时钟周期。