【发布时间】:2017-04-04 08:40:51
【问题描述】:
我正在构建一个在 FPGA 上运行的神经网络,最后一个难题是在硬件中运行一个 sigmoid 函数。这是:
1/(1 + e^-x)
或
(atan(x) + 1) / 2
不幸的是,这里的 x 是一个浮点值(SystemVerilog 中的 real 值)。
有没有关于如何在 SystemVerilog 中实现这些功能的任何提示?
这真的让我很困惑,因为这两个函数都很复杂,而且由于浮点值增加了复杂性,我什至不知道从哪里开始实现它们。
【问题讨论】:
-
您为哪种 FPGA 设计?它有任何 DSP 资源吗?
-
使用 FPGA 上的 DSP 模块计算 sigmoid 函数。
-
延迟和吞吐量要求是什么?这将严重影响我为此设计的任何东西。另外,我不熟悉任何可以将真实(浮点数)合成到硬件中的 FPGA 工具(它可能存在,但如果有的话,它是最近的)。
-
在许多神经网络计算中,计算可能不需要很精确。如果你真的实现了浮点运算单元,那么评估上面的等式和复杂的实现可能会非常昂贵。一种选择是使用定点数学或查找表来实现特定的域范围。
标签: neural-network verilog fpga system-verilog sigmoid