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

Math FPGA:使用查找表将范围除以固定数字,math,signal-processing,vhdl,fpga,lookup-tables,Math,Signal Processing,Vhdl,Fpga,Lookup Tables,我在FPGA中实现了一个支持硬件乘法的模块。这个模块通过几乎不使用任何逻辑元件来进行一些划分,因为它能够使用一些内部DSP 这个模块必须被移植到另一个设计中,但这里我的逻辑元素少了2k,并且没有硬件乘法器 我的想法是通过内存中的查找表来实现这个划分,这仅仅是因为我有60 kbit的可用空间,但我很难找到正确的方法来实现它。以下是我需要做的: 使用很少的逻辑元素将62720到65279之间的数字除以20。在对数字进行四舍五入后,我只得到128个不同的结果,因此表格应该不会太重,但对我来说,问题是删

我在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

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

在某些FPGA技术中,结果是小于1024深8宽1块RAM


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

这将是一件很容易被塞进块RAM的事情。您使用的是哪种FPGA?你们有多少块闸板可用?减去62710(不是62720,使第一个量程与其他量程大小相同)。注意,20=5*4除以4(省略两个LSB)。您现在有一个更小的范围来适应LUT。还从每个LUT条目中减去3072。(只需设置2位即可将其添加回:无需加法器)。要做更多的事情(例如,除以5),需要进行一些数学分析,以确保不会出现错误的取整。@BrianDrummond回答这个问题!我们需要在VHDL标签中找到更多答案,在comment.Done中回答更少的问题。答案实在太短了,可能还有更好的选择,需要更多的工作才能得到好的答案,所以我希望其他人也能加入进来。谢谢你,布莱恩。因为我只有128个不同的结果,所以我的想法是,应该可以有一个只有这128个条目的表。你的建议给了我“小于”1024,但不能把它缩小吗?或者我只是没有正确理解它吗?它可以通过一些明显的技巧变小,但是这些技巧包括5除,或者1/5的缩放和舍入版本的乘法(可以简化),并且您需要验证缩放和舍入后,每个输入都会得到正确的输出。在哪一点上:值得花时间和精力吗?(如果时间不是一个考虑因素,那么这是一个很好的练习,并且可能是一个有益的教训,告诉我们如何正确地取整……)您建议的替代方案是一个输入值表,由输出索引。这同样有效——但是——您必须在整个表中搜索每个新输入。你有多少个周期,搜索引擎在硬件上会有多大?我有点困惑。当我有2559个不同的输入值时,您建议的表怎么可能只有1024个条目?我读你的解释时一定遗漏了什么。再次感谢你,答案是:“所以除以4”,给你600多个值。