【问题标题】:Hardware implementation of square root?平方根的硬件实现?
【发布时间】:2012-02-10 21:27:47
【问题描述】:

我正在尝试为最有可能在 FPGA 上实现的高效平方根算法找到更多信息。已经找到了很多算法,但哪一种是来自英特尔或 AMD 的? 高效是指它们要么非常快,要么不需要太多内存。

编辑:我可能应该提到这个问题通常是一个浮点数,因为大多数硬件都实现了 IEEE 754 标准,其中数字表示为:1 个符号位、8 位偏置指数和 23 位尾数。

谢谢!

【问题讨论】:

  • 为什么不实现this?你只做移位和加法,像查找表这样的事情不需要额外的内存。看起来很适合 FPGA。
  • 感谢@Alex 的评论。我会尝试找到更多资源,因为我仍然不知道如何在 VHDL 中实现它。还有一个问题,那不是只找到 sqrt 的整数部分吗?
  • 您是想尽快求解一个平方根,还是尽快求解一个连续的平方根流?
  • @DimitarPetrov:对,那段特定的代码计算整数的整数平方根。但是您也可以将它重用于浮点值,因为 sqrt(mantissa*2^exponent)=sqrt(mantissa)*2^(exponent/2) 并且您始终可以将您的数字表示为整数尾数乘以 2 的偶数幂. 您应该在问题中包含有关浮点平方根和 VHDL 的详细信息。实际上,VHDL 可能值得一个单独的问题。

标签: math hardware sqrt


【解决方案1】:

不是一个完整的解决方案,而是几个指针。

我假设您正在使用浮点数,所以第 1 点是记住浮点数存储为尾数和指数。由于对数,平方根的指数大约是原始数字的指数的一半。

然后可以使用查找表来近似尾数,然后您可以使用几个牛顿拉夫森循环来为 LUT 的结果提供一定的准确性。

我已经有大约 8 年没有实施过这样的事情了,但我认为我就是这样做的,并且能够在 3 或 4 个周期内得到结果。

【讨论】:

  • 谢谢保罗!你能指出我特定的算法吗?是的,我正在使用浮点数并刚刚编辑了我的问题......或者你能否扩展你的解释,因为我不太了解所有内容:)
  • 很遗憾,时间太长了,我不记得确切的细节了,而且是给以前的雇主的,所以我也查不出来。如果您有具体问题,我会尽力回答。
  • 谢谢@Paul。我已将您的问题标记为最佳答案,因为这给了我一些想法并(希望)为我指明了正确的方向。谢谢
【解决方案2】:

这是一个很好的快速反平方根。
看看here。请注意,这几乎与最初的猜测有关,相当惊人的文档:)

【讨论】:

  • 非常感谢!我已经看过了,看起来很令人印象深刻,但是“神奇数字”一开始让我有点害怕。我再看看:)
  • 我觉得这个答案与问题无关。该算法仅计算平方根倒数的粗略近似值,在 FPGA 上实现的绝对不是
  • 谢谢斯文。 FPGA 上的大多数实现是否仅使用 Newton-Raphson 方法的一些变体?像一些倒置以摆脱除法,这本身就是一项昂贵的操作?
  • @DimitarPetrov 幻数只需要平方根的倒数。平方根可以使用右移和几轮 Newton-Raphson 来实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多