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

时间:2015-02-13 14:14:21

标签: math signal-processing vhdl fpga lookup-tables

我在FPGA中实现了一个支持硬件乘法的块。这个块通过几乎不使用任何逻辑元件来进行一些划分,因为它可以使用一些内部DSP。

这个块必须移植到另一个设计,但是这里我有2k个逻辑元素,没有硬件乘法器。

我的想法是在内存中使用查找表来实现这个分区,因为我有60 kbit可用,但我很难找到正确的方法来完成它。这就是我需要做的事情:

使用非常少的逻辑元素将数字从62720除以65279。在对数字进行四舍五入后,我只得到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个相似的结果。我的想法是为这种模式写几行,但根本无法搞清楚。

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

1 个答案:

答案 0 :(得分:4)

减去62710(不是62720,使第一个范围与其他范围相同)。请注意,20 = 5 * 4因此除以4(省略两个LSB)。你现在有一个更小的范围适合LUT。

还从每个LUT条目中减去3072。 (您只需要设置2位将其重新添加:无需加法器。)

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

要做更多事情(例如除以5),需要进行一些数学分析,以确保不会错误地进行舍入。