《基于FPGA的数字信号处理》(第2版)试读章节——基于不恢复余数算法的开方运算

在讨论Non-Restoring 算法之前,我们先介绍一下传统的手工计算平方根的方法。为便于说明,以十进制数61458 为例,其平方根为247,余数为449,即。求解过程如图3.53 所示。这里以D 表示被开方数,Q 表示平方根, R 表示余数。

图3.53  手工计算平方根的过程

由图3.53 不难看出,求解过程可分为如下几步。

图3.55  Restoring算法求解平方根的过程

被开方数为8bit,故平方根为4bit,需要4 次迭代。定义


Restoring 算法很直观,但存在的问题是:若当前部分余数为负时,需要额外的加法操作使其恢复到前一次迭代时产生的部分余数。这不仅需要额外的资源,还增加了Latency。是否可以不恢复余数呢?这需要对算法进行一定的修改。

由式(3.62)可知,式(3.63)可重写为


图3.56  Non-Restoring算法求解平方根的过程

k= n-1时,式(3.66)为两个 2bit 数相减,结合式(3.67)可得表 3.11 所示的真值表。

表3.11 式(3.66)和式(3.67)对应的真值表

由表3.11 不难得出

从而,可将电路优化为图 3.57 所示结构。由于c只用于获取Q(n-1) ,后续迭代中不会再使用,故可将其抛弃掉。

图3.57  求取Q(n-1)时的优化电路


图3.58 式(3.74)对应的电路

对图3.58 所示电路还可进一步优化,结合8bit 被开方数,开方运算电路结构如图3.59所示。虚线框即为一个基本处理单元。需要注意的是此电路并不能保证获得正确的余数。根据此电路结构不难扩展到任意位宽的开方电路。

图3.59  被开方数为8bit的开方运算电路结构

《基于FPGA的数字信号处理》(第2版)本书围绕Xilinx新一代28nm工艺芯片7系列FPGA,结合Xilinx新一代开发工具Vivado以及针对算法开发的Vivado HLS和System Generator,讲解了数字信号处理中的经典算法在FPGA上的实现方法。第2版保持了第1版的主题――如何将理论算法转化为工程实现,新增了算法的Matlab代码描述;增加了部分算法的System Generator模型。 讲解了FPGA实现时的一些细节问题如复位、跨时钟域设计等。
本书购买地址:
京东: http://item.jd.com/11727638.html
当当: http://product.dangdang.com/23733281.html
亚马逊: http://www.amazon.cn/
互动出版网: http://product.china-pub.com/4715650