繁体   English   中英

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

[英]FPGA: Divide range by fixed number using a look-up table

我已经在支持硬件乘法的FPGA中实现了一个模块。 该模块几乎不使用任何逻辑元件进行某种划分,因为它可以使用一些内部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条目中减去3072。 (您只需要设置2位即可将其添加回:无需加法器)。

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

要做更多的事情(例如,除以5)将需要进行一些数学分析,以确保您没有舍入不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM