我可以找到很多算法,用于在8位和16位的FPGA中进行整数的平方根(或估计),但我有64位值,我似乎无法找到一个好的解决方案。
对于无符号64位值的平方根,有一个好的方法吗? (如果重要的话,我将在Vilado的Xilinx部分使用Verilog进行接线)
- Edit-- 我应该补充一点,我将在每个时钟上对新值执行此计算,因此一定数量的迭代将是最佳的,因此我知道哪个输出正在出现。
答案 0 :(得分:1)
最简单,也可能是最佳优化的方法是让其他人这样做 - Xilinx拥有可以做到这一点的IP核;这是LogiCore CORDIC。
您可能还想查看对数实现(例如log2,或将您的固定点数转换为浮点数的任何内容); Sylvain Munaut wrote one;应用基本数学,使用对数 log_b 到基础 b :
sqrt(x)= b ^(log_b(x)/ 2)= b ^(y / 2)= b ^ z
您可以使用DSP切片执行 y / 2 操作,或者只使用bitshift。 2 ^ z 有点棘手,但实际上它归结为将0b10
移动到 z 的整数部分,并将其与看起来相乘 - 将 2 的版本升级到小数部分的幂。
如果您真的不准确,那么如何通过最高非零二进制数字的位置粗略地近似数字的 log_2 ,然后使用查找表转换为平方根。
假设您可以在两个周期中找到最高位,并在下一个周期中查找和生成,您将有一个三周期实现;管道而不是建立一个庞大的多路复用链仍然是非常明智的。