math - FPGA:使用查找表将范围除以固定数字

标签 math signal-processing vhdl fpga lookup-tables

我已经在 FPGA 中实现了一个支持硬件乘法的模块。该 block 几乎不使用任何逻辑元件来进行一些除法,因为它能够使用一些内部 DSP。

这个模块必须移植到另一个设计中,但这里我的逻辑元件少了 2k,并且没有硬件乘法器。

我的想法是用内存中的查找表来实现这个除法,只是因为我有 60 kbit 可用,但我很难找到正确的方法来做到这一点。这是我需要做的:

使用很少的逻辑元素将 62720 到 65279 之间的数字除以 20。对数字进行四舍五入后,我只得到 128 个不同的结果,因此表格不应该那么重,但对我来说,问题是删除所有相似的结果,并仍然使用表格来查找精确除法的结果。

表格的第一个条目如下所示:

62720/20 = 3136  
62721/20 = 3136  
62722/20 = 3136      
62723/20 = 3136  
62724/20 = 3136  
62725/20 = 3136  
62726/20 = 3136  
62727/20 = 3136  
62728/20 = 3136  
62729/20 = 3136  
62730/20 = 3137  
62731/20 = 3137  
62732/20 = 3137  
62733/20 = 3137   
62734/20 = 3137   
62735/20 = 3137  
62736/20 = 3137    
62737/20 = 3137    
62738/20 = 3137  
62739/20 = 3137  
62740/20 = 3137    
62741/20 = 3137  
62742/20 = 3137  
62743/20 = 3137  
62744/20 = 3137  
62745/20 = 3137  
62746/20 = 3137  
62747/20 = 3137  
62748/20 = 3137  
62749/20 = 3137  
62750/20 = 3138  
62751/20 = 3138  
62752/20 = 3138  
62753/20 = 3138   
62754/20 = 3138    
62755/20 = 3138   
...   

对于每个结果,我都有 20 个相似的结果,除了第一个 3136,它只给我 10 个相似的结果。我的想法是为这个模式写几行,但根本无法弄清楚。

请告诉我你对此的看法。它不一定是完整的解决方案,只需一些输入,因为我被困住了:)谢谢。

最佳答案

减去 62710(不是 62720,以使第一个范围与其他范围的大小相同。)。请注意,20=5*4,因此除以 4(忽略两个 LSB)。现在,您可以将更小的范围放入 LUT 中。

同时从每个 LUT 条目中减去 3072。 (您只需设置 2 位即可将其添加回来:无需加法器)。

在某些 FPGA 技术中,结果小于 1024 深 x 8 宽、1 个 BlockRam。

要执行更多操作(例如除以 5),需要进行一些数学分析以确保您没有错误地舍入。

关于math - FPGA:使用查找表将范围除以固定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501549/

相关文章:

python - 振幅和相位谱。改变相位,保持振幅不变

c# - 自定义音频效果如何在AudioFileInputNode完成播放后产生一些声音

c# - 峰检测库?

vhdl - 避免在 VHDL 中使用 inout

excel - 根据单元格中的数字将单个单元格扩展到多行 - EXCEL

java - 对于大数使用对数而不是除法?

c++ - 获取线段和 2^n 网格之间的所有交点(以整数表示)

math - 如果 f(n) = θ(g(n)),则 2^f(n) = θ(2^g(n)) 吗?

mips - 使用VHDL开发MIPS处理器-有什么好的教程吗?

error-handling - VHDL类型在仿真期间不匹配