Integer FPGA中64b平方根的最智能方法

Integer FPGA中64b平方根的最智能方法,integer,signal-processing,verilog,fpga,square-root,Integer,Signal Processing,Verilog,Fpga,Square Root,我可以找到很多算法在FPGA中对8位和16位的整数进行平方根(或估计),但我有一个64位的值,我似乎找不到一个好的解决方案 对于无符号64位值的平方根,有好的方法吗?(如果有必要的话,我正在用Verilog连接Vivado中的Xilinx部分) --编辑-- 我应该补充一点,我将在每个时钟上对一个新值执行此计算,因此设置的迭代次数将是最好的,这样我就可以知道输出结果了。最简单、可能也是最好的优化方法是让其他人这样做–Xilinx有一个IP核可以做到这一点;这是最重要的 您可能还想看看对数实现(例

我可以找到很多算法在FPGA中对8位和16位的整数进行平方根(或估计),但我有一个64位的值,我似乎找不到一个好的解决方案

对于无符号64位值的平方根,有好的方法吗?(如果有必要的话,我正在用Verilog连接Vivado中的Xilinx部分)

--编辑--
我应该补充一点,我将在每个时钟上对一个新值执行此计算,因此设置的迭代次数将是最好的,这样我就可以知道输出结果了。

最简单、可能也是最好的优化方法是让其他人这样做–Xilinx有一个IP核可以做到这一点;这是最重要的

您可能还想看看对数实现(例如log2,或任何将固定点数转换为浮点的东西);西尔万·穆诺;应用基础数学,使用对数对数b作为基数b:

sqrt(x)=b^(log_b(x)/2)=b^(y/2)=b^z

您可以使用DSP片执行y/2操作,也可以仅通过位移位。2^z有点棘手,但实际上它归结为将
0b10
移动到z的整数部分,然后将其与查找版本的2乘以分数部分的幂

如果你能忍受不准确的情况,那就用最高非零二进制数字的位置粗略地近似一个数字的log_2,然后使用查找表转换成平方根


假设您可以在两个周期中查找最高数字,并在下一个周期中查找和生成输出,那么您将有一个三周期的实现;通过管道传输而不是构建庞大的mux链仍然是非常明智的。

你想要最快的方式,还是最聪明的方式?@Nick Good question,我想这是一种折衷。如果你是说最聪明的人就是最聪明的人,那我就不在乎了。我猜哪一个是最好的资源和可预测的周期数。在线搜索各种有效平方根计算的例子。wikipedia的文章在处理浮点数时有一个很好的例子,其中有一整堆Q&a专门讨论嵌入式上下文中的
sqrt
问题。FPGA为您提供了巨大的自由度,显然,以最具FPGA-y特性的方式实现这一点的建议是,设计实现这些快速方法之一的电路,使其达到合理的近似值。还有一些方法是通过查找表来辅助的,需要装载到ROM存储中的某些字节。所有建议都取决于您的特定用例、现有数据格式和/或互操作要求(为什么是64位int?)、精度要求、FPGA编程能力等。我不确定“每个时钟”是什么意思,但很明显,你受到了速度的限制,需要飞到雷达以下,相应地进行精度权衡。需要进行大量的数值分析,以确保实现的属性在某种程度上是稳定的,并且不存在会产生比您合理使用的偏差更大的“不良输入”。@toozie21:所以您要计算64位整数的32位整数平方根,并且不寻求计算64位定点数字的平方根,例如32.32定点格式?我想知道什么样的信号处理需要64位操作数,因为大多数传感器提供16位或更低的分辨率。您确定响应需要完整的64位?ty吗。我计划使用CORDIC,但我的版本(Vivado 2015.2)不允许输入>48b。我目前不是在定点工作,而是在整数。我基本上有两个32b的浮点值,但我想简化数学,所以我将其缩放为介于[-2^16,2^16]之间的整数,并尝试基于此进行所有数学运算。最后,我尝试对一个复数进行abs-val,因此使用sqrt(我使用CORDIC对Re和Im部分进行平方处理)。我肯定我已经想得太多了,所以我会看看西尔万的作品。“两个32位浮动”不值得一个64位浮动int@toozie21如果您试图计算复数的abs值,则应使用CORDIC进行矩形到极坐标的转换。Re和Im是你的直角坐标,你只需要极坐标的大小,你可以扔掉相位。@nguthrie只是一个评论,以避免让后来读到这篇文章的人感到困惑:我很确定你说的对定点是正确的,但对浮点是荒谬的;如果你有一些东西可以把两个浮点数相加,那么浮点数中的abs(z)=sqrt(Im(z)²+Re(z)²)是非常简单的;平方/根浮动相对可行。。然而,在FPGA上,你通常不使用浮点数,所以我不太确定OP到底在考虑做什么。谢谢各位,我已经脱离了这个循环,但仍在研究所有这些。我有浮动vs固定的选项,我确信我已经说服自己,我的构建成功的唯一途径就是坚持在固定的世界中。我将不得不看一下从心直面到极坐标的转换,我不知道这一点。