一种基于硬件加速的运算电路系统及芯片转让专利

申请号 : CN202110719972.6

文献号 : CN113407235B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 詹植铜何再生肖刚军

申请人 : 珠海一微半导体股份有限公司

摘要 :

本发明公开一种基于硬件加速的运算电路系统及芯片,该运算电路系统包括开平方迭代模块和倒数迭代模块;开平方迭代模块,用于倒数迭代运算的结束标志有效且开平方迭代运算的结束标志无效时,控制预先设置的待开方数和倒数迭代模块输出的符合预设收敛条件的倒数结果相乘以进行预定精度的开平方迭代运算;倒数迭代模块,用于在倒数迭代运算的使能标志有效时,在当前一级倒数迭代运算中,控制倒数迭代模块在上一级倒数迭代运算中输出的倒数结果和开平方迭代模块在上一级开平方迭代运算中输出的平方根结果,获得倒数迭代模块输出的符合预设收敛条件的倒数结果。完成对倒数迭代运算公式和开平方迭代运算的硬件化处理,并避免使用除法器。

权利要求 :

1.一种基于硬件加速的运算电路系统,其特征在于,该运算电路系统包括开平方迭代模块和倒数迭代模块;

开平方迭代模块,用于倒数迭代运算的结束标志有效且开平方迭代运算的结束标志无效时,控制预先设置的待开方数和倒数迭代模块输出的符合预设收敛条件的倒数结果相乘以进行预定精度的开平方迭代运算;

倒数迭代模块,用于在倒数迭代运算的使能标志有效时,在当前一级倒数迭代运算中,控制倒数迭代模块在上一级倒数迭代运算中输出的倒数结果和开平方迭代模块在上一级开平方迭代运算中输出的平方根结果,获得倒数迭代模块输出的符合预设收敛条件的倒数结果;

其中,倒数迭代运算的结束标志是倒数迭代模块向开平方迭代模块置出的一种迭代结束控制信号;开平方迭代运算的结束标志是开平方迭代模块置出的一种迭代结束控制信号;倒数迭代运算的使能标志是开平方迭代模块向倒数迭代模块置出的一种迭代开始控制信号;

其中,开平方迭代运算是属于利用牛顿迭代法公式求取待开方数的平方根的迭代运算,在开平方迭代模块内连接有与开平方迭代运算的迭代逻辑关系对应的第一电路单元架构;倒数迭代运算是属于利用牛顿迭代法公式求取待开方数的倒数的迭代运算,在倒数迭代模块内连接有与倒数迭代运算的迭代逻辑关系对应的第二电路单元架构;

所述倒数迭代模块包括第二乘法器、第二右移位寄存器、第二左移位寄存器、第二减法器、第三乘法器、第三右移位寄存器、第二选择器、第三数据寄存器、第四数据寄存器、第三减法器和第二比较器,用于连接形成所述第二电路单元架构,以执行倒数迭代运算;

第二乘法器的第一输入端与所述开平方迭代模块内置的第二数据寄存器的第一输出端连接,第二乘法器的第一输入端用于接收所述第二数据寄存器输出的数据;第二乘法器的第二输入端与第四数据寄存器的第一输出端连接,第二乘法器的第二输入端用于接收第四数据寄存器输出的数据;

第二乘法器的输出端与第二右移位寄存器的输入端连接,第二右移位寄存器用于将第二乘法器输出的乘积结果作右移处理;其中,所述平方根结果和所述倒数结果都存在所述预定精度下对应的小数位数;

第二左移位寄存器的输入端用于接收第一预设二进制数,并对第一预设二进制数移位形成预留完整小数位的二进制数;第一预设二进制数是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量;

第二右移位寄存器的输出端与第二减法器的第一输入端连接,左移位寄存器的输出端与第二减法器的第二输入端连接,第二减法器的输出端与第三乘法器的第一输入端连接,第二减法器用于在倒数迭代运算的使能标志有效时,将第二右移位寄存器输出的移位结果减去左移位寄存器输出的移位结果,再将相减得到的差值送至第三乘法器;

第三乘法器的第二输入端与第四数据寄存器的第一输出端连接,第三乘法器的第二输入端用于接收第四数据寄存器输出的数据,以使得所述第三乘法器在当前一级倒数迭代运算中处理所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果、或所述第四数据寄存器输出的预置操作数;

第三乘法器的输出端与第三右移位寄存器的输入端连接,第三乘法器用于在倒数迭代运算的使能标志有效时,控制第二减法器输出的差值与第四数据寄存器输出的数据相乘;

第三右移位寄存器用于将第三乘法器输出的乘积作右移位处理,以使得第三乘法器输出的乘积结果在经过移位处理后,无损失地以二进制数的形式表示对应的十进制下的小数位数;

第三右移位寄存器的输出端与第二选择器的第一输入端连接,第二选择器的第二输入端用于接收所述预置操作数,第二选择器的选择端用于接收所述倒数迭代运算的使能标志,第二选择器的输出端与第三数据寄存器的输入端连接;第二选择器,用于在所述倒数迭代运算的使能标志有效时,选择将第三右移位寄存器输出的数据送往第三数据寄存器;第二选择器,用于在所述倒数迭代运算的使能标志无效时,选择将第二选择器的第二输入端接收的预置操作数送往第三数据寄存器;

第三数据寄存器的第一输出端与第三减法器的第一输入端连接,第三数据寄存器的第二输出端与第四数据寄存器的输入端连接,第四数据寄存器的第二输出端与第三减法器的第二输入端连接,以使得当前一级倒数迭代运算输出的倒数结果缓存在第三数据寄存器,上一级倒数迭代运算中输出的倒数结果缓存在第四数据寄存器;其中,第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值是由第三减法器处理输出的;

第三减法器的输出端与第二比较器的输入端连接,第二比较器的输出端,用于在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值小于倒数迭代收敛差值时,向所述开平方迭代模块置出有效的倒数迭代运算的结束标志,确定满足倒数迭代终止条件,且第四数据寄存器的第一输出端向所述开平方迭代模块输出的数据是符合预设收敛条件的倒数结果;在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于倒数迭代收敛差值时,向所述开平方迭代模块置出无效的倒数迭代运算的结束标志,再配置第四数据寄存器最新缓存的数据作为下一级倒数迭代运算的输入操作数;

其中,第二左移位寄存器、第二右移位寄存器和第三右移位寄存器所支持的移位的比特位数是由预定精度决定的;

所述开平方迭代模块包括第一乘法器、与门、第一加法器、第一右移位寄存器、第一选择器、第一数据寄存器、第二数据寄存器、第一减法器和第一比较器,用于连接形成所述第一电路单元架构,以执行平方迭代运算;

第一乘法器的第一输入端用于接收所述待开方数;第一乘法器的第二输入端与第四数据寄存器的第一输出端连接,用于接收第四数据寄存器输出的数据;

第一乘法器的使能端与与门的输出端连接,与门的第一输入端用于接收所述倒数迭代运算的结束标志,与门的第二输入端用于接收开平方迭代运算的结束标志,第一乘法器的输出端与第一加法器的第一输入端连接;第一乘法器,用于在所述倒数迭代运算的结束标志有效、且所述开平方迭代运算的结束标志无效时,将所述待开方数和所述第四数据寄存器输出的数据相乘,再将乘积结果送往第一加法器;

与门的输出端与第一加法器的使能端连接,第一加法器的第一输入端与第一乘法器的输出端连接,第一加法器的第二输入端与第二数据寄存器的第一输出端连接,第一加法器,用于在所述倒数迭代运算的结束标志有效、且所述开平方迭代运算的结束标志无效时,将所述第二数据寄存器输出的数据和第一乘法器输出的乘积结果相加;

第一加法器的输出端与第一右移位寄存器的输入端连接,第一右移位寄存器的输出端与第一选择器的第二输入端连接,第一右移位寄存器,用于接收第一加法器输出的和值,再将和值作右移处理;

第一右移位寄存器的输出端与第一选择器的第一输入端连接,第一选择器的第二输入端用于接收初始操作数,第一选择器的选择端用于接收可操作标志,第一选择器的输出端与第一数据寄存器的输入端连接;第一选择器,用于在所述可操作标志无效时,选择将第一右移位寄存器输出的数据送往第一数据寄存器,以在第一数据寄存器缓存当前一级开平方迭代运算中输出的平方根结果;第一选择器,用于在所述可操作标志有效时,选择将第一选择器的第二输入端接收的所述初始操作数送往第一数据寄存器;

第一数据寄存器的第一输出端与第一减法器的第一输入端连接,第一数据寄存器的第二输出端与第二数据寄存器的输入端连接,第二数据寄存器的第二输出端与第一减法器的第二输入端连接,以使得当前一级开平方迭代运算输出的倒数结果缓存在第三数据寄存器,上一级开平方迭代运算中输出的倒数结果缓存在第四数据寄存器;其中,第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值是由第一减法器处理输出;

第一减法器的输出端与第一比较器的输入端连接,第一比较器的输出端用于输出所述开平方迭代运算的结束标志对应的信号,所述开平方迭代模块,用于在第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值的绝对值小于开平方迭代收敛差值时,将输出的所述开平方迭代运算的结束标志置为有效,确定满足开方迭代终止条件,第二数据寄存器的第三输出端向外部输出的数据是所述运算电路系统最终计算获得的平方根结果;所述开平方迭代模块,还用于在第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于开平方迭代收敛差值时,将所述倒数迭代运算的使能标志置为有效并输出给所述倒数迭代模块,再配置第二数据寄存器最新缓存的数据作为所述倒数迭代运算的输入操作数。

2.根据权利要求1所述运算电路系统,其特征在于,在开平方迭代模块进行预定精度的开平方迭代运算的过程中,当上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值满足开方迭代终止条件时,确定结束开平方迭代运算,将当前一级开平方迭代运算中输出的平方根结果作为平方迭代运算最终获取的平方根结果,并将开平方迭代运算的结束标志置为有效;当上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值不满足开方迭代终止条件时,将当前一级开平方迭代运算输出的平方根结果输出至倒数迭代模块,同时向倒数迭代模块置出有效的倒数迭代运算的使能标志;

在倒数迭代模块进行预定精度的倒数迭代运算的过程中,当上一级倒数迭代运算中输出的倒数结果与当前一级倒数迭代运算输出的倒数结果的差值满足倒数迭代终止条件时,向开平方迭代模块置出有效的倒数迭代运算的结束标志,确定倒数迭代模块在上一级倒数迭代运算中输出的倒数结果是符合预设收敛条件的倒数结果,并将符合预设收敛条件的倒数结果传输至开平方迭代模块;当上一级倒数迭代运算中输出的倒数结果与当前一级倒数迭代运算输出的倒数结果的差值不满足倒数迭代终止条件时,将当前一级倒数迭代运算中输出的倒数结果更新为下一级倒数迭代运算的输入操作数,并维持倒数迭代运算的使能标志有效。

3.根据权利要求1或2所述运算电路系统,其特征在于,所述运算电路系统还包括预处理模块;开平方迭代模块包括第一数据寄存器和第二数据寄存器;

预处理模块,用于将预先输入的待开方数送至内置的移位寄存器,再将经过移位寄存器移位处理后的待开方数设置为预定精度的用于开平方迭代运算的初始操作数,且向开平方迭代模块置出可操作标志;

开平方迭代模块,用于在可操作标志有效时,接收并缓存所述初始操作数至第一数据寄存器中,再在外部的驱动时钟控制下将所述初始操作数由第一数据寄存器缓存到第二数据寄存器中,使所述初始操作数更新为倒数迭代运算的输入操作数;

开平方迭代模块,用于在可操作标志无效的前提下,若第一数据寄存器缓存当前一级开平方迭代运算输出的平方根结果,且第二数据寄存器缓存上一级开平方迭代运算输出的平方根结果,则在上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值不满足开方迭代终止条件时,将当前一级开平方迭代运算输出的平方根结果由第一数据寄存器缓存到第二数据寄存器中,以使得当前一级开平方迭代运算输出的平方根结果覆盖第二数据寄存器缓存的数据。

4.根据权利要求3所述运算电路系统,其特征在于,所述初始操作数存在的小数对应的比特位的数目比预处理模块内置的移位寄存器配置的移位位数大一个比特位,使得所述初始操作数是待开方数的一半。

5.根据权利要求3所述运算电路系统,其特征在于,所述倒数迭代模块,包括第三数据寄存器和第四数据寄存器,用于在第三数据寄存器缓存当前一级倒数迭代运算输出的倒数结果,且第四数据寄存器缓存上一级倒数迭代运算输出的倒数结果的前提下,若上一级倒数迭代运算中输出的倒数结果与当前一级倒数迭代运算输出的倒数结果的差值不满足倒数迭代终止条件,则将当前一级倒数迭代运算输出的倒数结果由第三数据寄存器缓存到第四数据寄存器中,以使得当前一级倒数迭代运算输出的倒数结果覆盖第四数据寄存器缓存的数据;

其中,第四数据寄存器,用于在倒数迭代运算的使能标志无效时,缓存用于倒数迭代运算的预置操作数。

6.根据权利要求3所述运算电路系统,其特征在于,所述预处理模块包括预置数据寄存器和第一左移位寄存器,预置数据寄存器用于缓存所述待开方数;预置数据寄存器的输出端与第一左移位寄存器的输入端连接,第一左移位寄存器用于将所述待开方数左移处理为所述初始操作数,使得所述初始操作数是待开方数的一半,其中,所述待开方数存在所述预定精度下对应的小数位数;

第一左移位寄存器的输出端与所述第一选择器的第二输入端连接,第一左移位寄存器用于将所述初始操作数传输给所述第一选择器;

预置数据寄存器的输出端与所述第一乘法器的第一输入端连接,预置数据寄存器的输出端用于将所述待开方数传输给所述第一乘法器。

7.根据权利要求1所述运算电路系统,其特征在于,所述倒数迭代收敛差值大于所述开平方迭代收敛差值;

其中,所述倒数迭代收敛差值越小,对应的倒数迭代运算的精度越高,对应的倒数迭代运算的时间越长;所述开平方迭代收敛差值越小,对应的开平方迭代运算的精度越高,对应的开平方迭代运算的时间越长。

8.根据权利要求7所述运算电路系统,其特征在于,所述预定精度具体形式是对应的二进制数的小数设置为16位,使得16位宽的小数支持所述倒数迭代模块计算0至65565范围的十进制数的倒数;其中,所述待开方数是低16位配置为小数的二进制数;

其中,第二左移位寄存器配置的移位位数是15,第一右移位寄存器配置的移位位数是

1;

其中,第二右移位寄存器配置的移位位数、第二左移位寄存器配置的移位位数和第二右移位寄存器配置的移位位数都是16。

9.一种芯片,其特征在于,该芯片内设权利要求1至8任一项所述的基于硬件加速的运算电路系统。

说明书 :

一种基于硬件加速的运算电路系统及芯片

技术领域

[0001] 本发明涉及集成电路的技术领域,尤其涉及一种基于硬件加速的运算电路系统及芯片。

背景技术

[0002] 开平方运算被大量运用在数字电路中,现有技术中进行开平方运算时一般采用的方法包括实函数近似法、牛顿迭代法等计算方法,其中,实函数近似法精度较低,牛顿迭代法涉及到除法的计算,两者的计算过程实现需要大量的硬件资源。特别是目前常用的浮点除法运算,较为复杂,通常的做法是使用多次减法迭代完成,其硬件资源开销较大,完成的时钟周期较长,不适合成本敏感、对计算延时要求较高的传感器批量处理数据的应用场景,制约开平方运算的应用范围。

发明内容

[0003] 针对牛顿迭代法求平方根的缺点,本发明在牛顿迭代法求平方根的基础上,提出一种基于硬件加速的运算电路系统及芯片,避免了原牛顿迭代法求平方根需要用到除法器的弊端,极大节省了硬件资源。具体的技术方案如下:
[0004] 一种基于硬件加速的运算电路系统,该运算电路系统包括开平方迭代模块和倒数迭代模块;开平方迭代模块,用于倒数迭代运算的结束标志有效且开平方迭代运算的结束标志无效时,控制预先设置的待开方数和倒数迭代模块输出的符合预设收敛条件的倒数结果相乘以进行预定精度的开平方迭代运算;倒数迭代模块,用于在倒数迭代运算的使能标志有效时,在当前一级倒数迭代运算中,控制倒数迭代模块在上一级倒数迭代运算中输出的倒数结果和开平方迭代模块在上一级开平方迭代运算中输出的平方根结果,获得倒数迭代模块输出的符合预设收敛条件的倒数结果;其中,倒数迭代运算的结束标志是倒数迭代模块向开平方迭代模块置出的一种迭代结束控制信号;开平方迭代运算的结束标志是开平方迭代模块置出的一种迭代结束控制信号;倒数迭代运算的使能标志是开平方迭代模块向倒数迭代模块置出的一种迭代开始控制信号;其中,开平方迭代运算是属于利用牛顿迭代法公式求取待开方数的平方根的迭代运算,在开平方迭代模块内连接有与开平方迭代运算的迭代逻辑关系对应的第一电路单元架构;倒数迭代运算是属于利用牛顿迭代法公式求取待开方数的倒数的迭代运算,在倒数迭代模块内连接有与倒数迭代运算的迭代逻辑关系对应的第二电路单元架构。
[0005] 与现有技术相比,所述运算电路系统在求取待开方数的平方根之前,需预先通过倒数迭代模块迭代计算出符合预设收敛条件的倒数,再被开平方迭代模块用于迭代计算出待开方数的平方根,避免在运算电路系统使用除法器资源计算求取平方根所需的倒数,且开平方迭代模块和倒数迭代模块都处于同一精度下进行迭代计算,提高计算速度,节省硬件资源。
[0006] 进一步地,在开平方迭代模块进行预定精度的开平方迭代运算的过程中,当上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值满足开方迭代终止条件时,确定结束开平方迭代运算,将当前一级开平方迭代运算中输出的平方根结果作为平方迭代运算最终获取的平方根结果,并将开平方迭代运算的结束标志置为有效;当上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值不满足开方迭代终止条件时,将当前一级开平方迭代运算输出的平方根结果输出至倒数迭代模块,同时向倒数迭代模块置出有效的倒数迭代运算的使能标志;从而本技术方案在当前一级开平方迭代运算的平方根不满足开方迭代终止条件的前提下,启动倒数迭代模块以获取更合适的倒数结果,便于下一级开平方迭代运算中获取更加接近所述开方迭代终止条件的平方根。
[0007] 在倒数迭代模块进行预定精度的倒数迭代运算的过程中,当上一级倒数迭代运算中输出的倒数结果与当前一级倒数迭代运算输出的倒数结果的差值满足倒数迭代终止条件时,向开平方迭代模块置出有效的倒数迭代运算的结束标志,确定倒数迭代模块在上一级倒数迭代运算中输出的倒数结果是符合预设收敛条件的倒数结果,并将符合预设收敛条件的倒数结果传输至开平方迭代模块;当上一级倒数迭代运算中输出的倒数结果与当前一级倒数迭代运算输出的倒数结果的差值不满足倒数迭代终止条件时,将当前一级倒数迭代运算中输出的倒数结果更新为下一级倒数迭代运算的输入操作数,并维持倒数迭代运算的使能标志有效。本技术方案通过对倒数迭代模块设置倒数迭代终止条件和计算精度,避免倒数迭代模块迭代的计算过长,加快获取符合预设收敛条件的倒数结果并及时停止倒数迭代运算,辅助所述开平方迭代模块在新的一级开平方迭代运算中计算出符合开方迭代终止条件的平方根,保证计算精度。
[0008] 进一步地,所述运算电路系统还包括预处理模块;开平方迭代模块包括第一数据寄存器和第二数据寄存器;预处理模块,用于将预先输入的待开方数送至内置的移位寄存器,再将经过移位寄存器移位处理后的待开方数设置为预定精度的用于开平方迭代运算的初始操作数,且向开平方迭代模块置出可操作标志;开平方迭代模块,用于在可操作标志有效时,接收并缓存所述初始操作数至第一数据寄存器中,再在外部的驱动时钟控制下将所述初始操作数由第一数据寄存器缓存到第二数据寄存器中,使所述初始操作数更新为倒数迭代运算的输入操作数;开平方迭代模块,用于在可操作标志无效的前提下,若第一数据寄存器缓存当前一级开平方迭代运算输出的平方根结果,且第二数据寄存器缓存上一级开平方迭代运算输出的平方根结果,则在上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值不满足开方迭代终止条件时,将当前一级开平方迭代运算输出的平方根结果由第一数据寄存器缓存到第二数据寄存器中,以使得当前一级开平方迭代运算输出的平方根结果覆盖第二数据寄存器缓存的数据。该技术方案通过预处理模块启动倒数迭代模块执行倒数迭代运算,也启动开平方迭代模块将所述初始操作数缓存起来,并将所述初始操作数更新为当前一级开平方迭代运算的输入操作数,即牛顿迭代初值,以备新的一级开平方迭代运算输入使用。
[0009] 进一步地,所述初始操作数存在的小数对应的比特位的数目比预处理模块内置的移位寄存器配置的移位位数大一个比特位,使得所述初始操作数是待开方数的一半。从而拉近所述初始操作数与平方根结果的距离,加快迭代运算的速度。
[0010] 进一步地,所述倒数迭代模块,包括第三数据寄存器和第四数据寄存器,用于在第三数据寄存器缓存当前一级倒数迭代运算输出的倒数结果,且第四数据寄存器缓存上一级倒数迭代运算输出的倒数结果的前提下,若上一级倒数迭代运算中输出的倒数结果与当前一级倒数迭代运算输出的倒数结果的差值不满足倒数迭代终止条件,则将当前一级倒数迭代运算输出的倒数结果由第三数据寄存器缓存到第四数据寄存器中,以使得当前一级倒数迭代运算输出的倒数结果覆盖第四数据寄存器缓存的数据;其中,第四数据寄存器,用于在倒数迭代运算的使能标志无效时,缓存用于倒数迭代运算的预置操作数。该技术方案在倒数迭代运算过程中,同一时间缓存前后两次求出的倒数结果,以便于通过计算这两次的倒数结果的差值来确定求倒数迭代终止的条件,降低了计算复杂度和硬件代价。
[0011] 进一步地,所述倒数迭代模块包括第二乘法器、第二右移位寄存器、第二左移位寄存器、第二减法器、第三乘法器、第三右移位寄存器、第二选择器、第三数据寄存器、第四数据寄存器、第三减法器和第二比较器,用于连接形成所述第二电路单元架构,以执行倒数迭代运算;第二乘法器的第一输入端与所述开平方迭代模块内置的第二数据寄存器的第一输出端连接,第二乘法器的第一输入端用于接收所述第二数据寄存器输出的数据;第二乘法器的第二输入端与第四数据寄存器的第一输出端连接,第二乘法器的第二输入端用于接收第四数据寄存器输出的数据;第二乘法器的输出端与第二右移位寄存器的输入端连接,第二右移位寄存器用于将第二乘法器输出的乘积结果作右移处理;其中,所述平方根结果和所述倒数结果都存在所述预定精度下对应的小数位数;第二左移位寄存器的输入端用于接收第一预设二进制数,并对第一预设二进制数移位形成预留完整小数位的二进制数;第一预设二进制数是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量;第二右移位寄存器的输出端与第二减法器的第一输入端连接,左移位寄存器的输出端与第二减法器的第二输入端连接,第二减法器的输出端与第三乘法器的第一输入端连接,第二减法器用于在倒数迭代运算的使能标志有效时,将第二右移位寄存器输出的移位结果减去左移位寄存器输出的移位结果,再将相减得到的差值送至第三乘法器;第三乘法器的第二输入端与第四数据寄存器的第一输出端连接,第三乘法器的第二输入端用于接收第四数据寄存器输出的数据,以使得所述第三乘法器在当前一级倒数迭代运算中处理所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果、或所述第四数据寄存器输出的所述预置操作数;第三乘法器的输出端与第三右移位寄存器的输入端连接,第三乘法器用于在倒数迭代运算的使能标志有效时,控制第二减法器输出的差值与第四数据寄存器输出的数据相乘;第三右移位寄存器用于将第三乘法器输出的乘积作右移位处理,以使得第三乘法器输出的乘积结果在经过移位处理后,无损失地以二进制数的形式表示对应的十进制下的小数位数;第三右移位寄存器的输出端与第二选择器的第一输入端连接,第二选择器的第二输入端用于接收所述预置操作数,第二选择器的选择端用于接收所述倒数迭代运算的使能标志,第二选择器的输出端与第三数据寄存器的输入端连接;第二选择器,用于在所述倒数迭代运算的使能标志有效时,选择将第三右移位寄存器输出的数据送往第三数据寄存器;第二选择器,用于在所述倒数迭代运算的使能标志无效时,选择将第二选择器的第二输入端接收的预置操作数送往第三数据寄存器;第三数据寄存器的第一输出端与第三减法器的第一输入端连接,第三数据寄存器的第二输出端与第四数据寄存器的输入端连接,第四数据寄存器的第二输出端与第三减法器的第二输入端连接,以使得当前一级倒数迭代运算输出的倒数结果缓存在第三数据寄存器,上一级倒数迭代运算中输出的倒数结果缓存在第四数据寄存器;其中,第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值是由第三减法器处理输出的;第三减法器的输出端与第二比较器的输入端连接,第二比较器的输出端,用于在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值小于倒数迭代收敛差值时,向所述开平方迭代模块置出有效的倒数迭代运算的结束标志,确定满足所述倒数迭代终止条件,且第四数据寄存器的第一输出端向所述开平方迭代模块输出的数据是符合预设收敛条件的倒数结果;在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于倒数迭代收敛差值时,向所述开平方迭代模块置出无效的倒数迭代运算的结束标志,再配置第四数据寄存器最新缓存的数据作为下一级倒数迭代运算的输入操作数;其中,第二左移位寄存器、第二右移位寄存器和第三右移位寄存器所支持的移位的比特位数是由预定精度决定的。
[0012] 该技术方案以乘法器和右移位寄存器为基本的计算单元,先后搭配减法器和选择器完成由牛顿迭代法公式推导出的倒数迭代运算公式Yi+1=((2<>m))*Yi)>>m的硬件架构布局设计,其中,Yi+1是第(i+1)级倒数迭代运算输出的具备m位小数的精度的倒数,2是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量;b是所述开平方迭代模块内置的第二数据寄存器输出的数据,即所述开平方迭代模块在上一级开平方迭代运算中输出的平方根结果;Yi是第i级倒数迭代运算输出的具备m位小数的精度的倒数,m和i都是整数。从而不用除法器的硬件资源进行求倒数迭代运算。
[0013] 进一步地,所述开平方迭代模块包括第一乘法器、与门、第一加法器、第一右移位寄存器、第一选择器、第一数据寄存器、第二数据寄存器、第一减法器和第一比较器,用于连接形成所述第一电路单元架构,以执行平方迭代运算;第一乘法器的第一输入端用于接收所述待开方数;第一乘法器的第二输入端与第四数据寄存器的第一输出端连接,用于接收第四数据寄存器输出的数据;第一乘法器的使能端与与门的输出端连接,与门的第一输入端用于接收所述倒数迭代运算的结束标志,与门的第二输入端用于接收开平方迭代运算的结束标志,第一乘法器的输出端与第一加法器的第一输入端连接;第一乘法器,用于在所述倒数迭代运算的结束标志有效、且所述开平方迭代运算的结束标志无效时,将所述待开方数和所述第四数据寄存器输出的数据相乘,再将乘积结果送往第一加法器;与门的输出端与第一加法器的使能端连接,第一加法器的第一输入端与第一乘法器的输出端连接,第一加法器的第二输入端与第二数据寄存器的第一输出端连接,第一加法器,用于在所述倒数迭代运算的结束标志有效、且所述开平方迭代运算的结束标志无效时,将所述第二数据寄存器输出的数据和第一乘法器输出的乘积结果相加;第一加法器的输出端与第一右移位寄存器的输入端连接,第一右移位寄存器的输出端与第一选择器的第二输入端连接,第一右移位寄存器,用于接收第一加法器输出的和值,再将和值作右移处理;第一右移位寄存器的输出端与第一选择器的第一输入端连接,第一选择器的第二输入端用于接收所述初始操作数,第一选择器的选择端用于接收所述可操作标志,第一选择器的输出端与第一数据寄存器的输入端连接;第一选择器,用于在所述可操作标志无效时,选择将第一右移位寄存器输出的数据送往第一数据寄存器,以在第一数据寄存器缓存当前一级开平方迭代运算中输出的平方根结果;第一选择器,用于在所述可操作标志有效时,选择将第一选择器的第二输入端接收的所述初始操作数送往第一数据寄存器;第一数据寄存器的第一输出端与第一减法器的第一输入端连接,第一数据寄存器的第二输出端与第二数据寄存器的输入端连接,第二数据寄存器的第二输出端与第一减法器的第二输入端连接,以使得当前一级开平方迭代运算输出的倒数结果缓存在第三数据寄存器,上一级开平方迭代运算中输出的倒数结果缓存在第四数据寄存器;其中,第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值是由第一减法器处理输出;第一减法器的输出端与第一比较器的输入端连接,第一比较器的输出端用于输出所述开平方迭代运算的结束标志对应的信号,所述开平方迭代模块,用于在第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值的绝对值小于开平方迭代收敛差值时,将输出的所述开平方迭代运算的结束标志置为有效,确定满足所述开方迭代终止条件,第二数据寄存器的第三输出端向外部输出的数据是所述运算电路系统最终计算获得的平方根结果;所述开平方迭代模块,还用于在第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于开平方迭代收敛差值时,将所述倒数迭代运算的使能标志置为有效并输出给所述倒数迭代模块,再配置第二数据寄存器最新缓存的数据作为所述倒数迭代运算的输入操作数。
[0014] 该技术方案以乘法器和右移位寄存器为基本的计算单元,先后搭配加法器和选择器完成由牛顿迭代法公式推导出的开平方迭代运算公式Xn+1=(Xn+a*(1/Xn))>>1的硬件架构布局设计,其中,Xn+1是第(n+1)级开平方迭代运算输出的具备预定精度的平方根,a是原始的待开方数;Xn是第n级开平方迭代运算输出的具备预定精度的平方根,n是整数。不用除法器的硬件资源进行开平方迭代运算。
[0015] 前述的开平方迭代模块和倒数迭代模块硬件化的技术方案都在达到预先设定的收敛差值时,迭代退出对应的迭代运算,以获得合适的结果数据。从而在不降低估计精度的同时能够减少冗余迭代计算量。
[0016] 进一步地,所述预处理模块包括预置数据寄存器和第一左移位寄存器,预置数据寄存器用于缓存所述待开方数;预置数据寄存器的输出端与第一左移位寄存器的输入端连接,第一左移位寄存器用于将所述待开方数左移处理为所述初始操作数,使得所述初始操作数是待开方数的一半,其中,所述待开方数存在所述预定精度下对应的小数位数;第一左移位寄存器的输出端与所述第一选择器的第二输入端连接,第一左移位寄存器用于将所述初始操作数传输给所述第一选择器;预置数据寄存器的输出端与所述第一乘法器的第一输入端连接,预置数据寄存器的输出端用于将所述待开方数传输给所述第一乘法器。该技术方案通过左移位寄存器将输入的作为牛顿迭代初值的初始操作数处理为待开方数的一半。
[0017] 进一步地,所述倒数迭代收敛差值大于所述开平方迭代收敛差值;其中,所述倒数迭代收敛差值越小,对应的倒数迭代运算的精度越高,对应的倒数迭代运算的时间越长;所述开平方迭代收敛差值越小,对应的开平方迭代运算的精度越高,对应的开平方迭代运算的时间越长。适合对计算延时要求较高,并且成本敏感的应用场景。
[0018] 进一步地,所述预定精度具体形式是对应的二进制数的小数设置为16位,使得16位宽的小数支持所述倒数迭代模块计算0至65565范围的十进制数的倒数;其中,所述待开方数是低16位配置为小数的二进制数。满足批量的二进制数的计算需求。
[0019] 一种芯片,该芯片内设所述的基于硬件加速的运算电路系统。避免了现有技术中的牛顿迭代法求平方根需要用到除法器的弊端,极大节省了硬件资源。

附图说明

[0020] 图1为本发明一实施例公开一种运算电路系统的示意图。

具体实施方式

[0021] 下面结合附图对本发明的具体实施方式作进一步说明。以下实施方式中所涉及到的各单元模块均为逻辑电路,一个逻辑电路可以是一个物理单元、也可以是由多个逻辑器件按照一定的读写时序和信号逻辑变化组合而成的状态机,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本发明实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本发明实施方式中不存在其它的单元。
[0022] 由相关联领域的技术人员可知,牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x)=0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中,但现有技术需通过复用除法器进行运算,计算更为精确的待开方数据算术根的近似值,增大硬件资源的开销。
[0023] 具体地,本领域技术人员由https://blog.csdn.net/qq_43227036/article/2
details/104439102的博文可知,为了获取待开方数的平方根,将f(Xn)=Xn ‑a代入牛顿迭代法公式Xn+1=Xn‑f(Xn)/f'(Xn)(n=0,1,2……)得到开平方迭代运算公式Xn+1=1/2(Xn+a/Xn)。通过前述博文的推导可知,Xn+1总是向f(Xn)=0的X点趋近,这样只要选定X0作为牛顿迭代初值后,不断地迭代求Xn+1,Xn+1总是能够到达f(Xn)=0的点,此时的Xn+1便是a的平方根的值,即a的开平方结果。此时,在开平方迭代运算公式中存在(1/Xn),则在每一次迭代运算过程中都需要对Xn取倒数,其中,n是迭代次数,也理解为迭代级数。因此按照现有技术的条件需通过复用除法器进行运算,增大硬件资源的开销。
[0024] 针对牛顿迭代法求平方根的缺点,本发明实施例在牛顿迭代法求平方根的基础上,提出一种基于二次牛顿迭代法的运算电路系统及芯片,避免了原牛顿迭代法求平方根需要用到除法器的弊端,极大节省了硬件资源。特别地,本实施例涉及到的获取倒数的运算电路硬件架构设计中,基于https://blog.csdn.net/qq_43227036/article/details/104439102的博文的推导思路可知,为了获取操作数b的倒数(在本实施例中b是前述的Xn,以便于预先求出Xn的倒数),将f(Yi)=1/Yi‑b代入牛顿迭代法公式Yi+1=Yi‑f(Yi)/f'(Yi)(i=0,1,2……)得到倒数迭代运算公式Yi+1=Yi(2‑b*Yi)。其中,Yi+1总是向f(Yi)=0的坐标点趋近,这样只要选定Y0作为牛顿迭代初值后,不断地迭代求Yi+1,Yi+1在某个预先设定的收敛条件下视为到达f(Yi)=0的点,此时的Yi+1便是b的倒数。其中,i是迭代次数,在硬件化处理后也理解为迭代级数。
[0025] 需要说明的是,首先硬件实现没有小数的存在,其次整数在CPU及其相关联的数字逻辑电路中是以二进制形式进行存储的,所以,为了表示预定精度下对应的小数,本实施例通过移位寄存器将外部输入的操作数(包括待开方数)、和/或、迭代运算结果、和/或运算的中间数据强制转化为存在预定精度下对应的小数位的长整型数据,具体是通过移动寄存器对相关数的定点位置进行左移调整或右移调整,使得转化结果的比特位宽包括整数部分的比特宽度和小数部分的比特宽度。
[0026] 在一些实施场景中,为了计算更大范围整数的倒数,则需要加大小数部分的比特位宽,以保证开平方结果的精度,需要根据运算相关中间数的定点位置情况对计算结果进行调整以维护运算结果的精度与参与运算的操作数一致,这样的操作对于任何熟悉本领域的技术人员来说都是明确的。
[0027] 如图1所示,本发明实施例公开一种基于硬件加速的运算电路系统,该运算电路系统包括开平方迭代模块和倒数迭代模块,这里只是基本包括核心运算单元,还包括但不限于预处理单元。在本实施例中,开平方迭代模块,用于倒数迭代运算的结束标志flag3有效且开平方迭代运算的结束标志flag4无效(~flag4)时,可以是在当前一级开平方迭代运算的实施方式中,控制预先设置的待开方数和倒数迭代模块输出的符合预设收敛条件的倒数结果相乘以进行预定精度的开平方迭代运算,实际上是待开方数进入开平方迭代模块后,按照开平方迭代运算公式Xn+1=1/2(Xn+a/Xn)或Xn+1=(Xn+a/Xn)>>1进行预定精度下的牛顿迭代法的开平方运算,且存在迭代的初始值X0,当前一级开平方迭代运算的结果会作为下一级开平方迭代运算的输入操作数,在不满足开平方的迭代终止条件时,开平方迭代模块中断开平方迭代运算,不进入下一级开平方迭代运算,而是把Xn+1(等于图示的b,即待求取倒数的操作数)送到倒数迭代模块,以获得符合预设收敛条件的倒数结果1/Xn+1(1/b),再继续进行下一级开平方迭代运算;如此迭代,直到收到开平方迭代运算的结束标志flag4有效(置为1)时才表示开平方迭代运算结束;其中,倒数迭代运算的结束标志flag3是倒数迭代模块向开平方迭代模块输出(或置出)的一种迭代结束控制信号;开平方迭代运算的结束标志flag4是开平方迭代模块输出(或置出)的一种迭代结束控制信号。
[0028] 倒数迭代模块,用于在倒数迭代运算的使能标志flag2有效时,在当前一级倒数迭代运算中,控制开平方迭代模块在上一级开平方迭代运算中输出的平方根结果和倒数迭代模块在上一级倒数迭代运算中输出的倒数结果相乘以进行预定精度的倒数迭代运算,获得倒数迭代模块输出的符合预设收敛条件的倒数结果;在一些实施场景中,控制倒数迭代模块输出的预置操作数和开平方迭代模块输出的初始操作数相乘以进行预定精度的倒数迭代运算,获得倒数迭代模块输出的符合预设收敛条件的倒数结果,当然在实际硬件运算过程中,由于存在各种传输延时、电平不稳定因素,很难实现所述倒数迭代模块一次迭代就获得符合预设收敛条件的倒数结果。其中,开平方迭代模块缓存的初始操作数是外部输入且经过预定精度的移位处理的待开方数;预置操作数是倒数迭代模块在执行倒数迭代运算时预先缓存的牛顿迭代初值。
[0029] 倒数迭代模块在倒数迭代运算的使能标志flag2有效时,接收到的来自开平方迭代模块的数据b(在开平方迭代模块执行的开平方迭代运算不满足迭代终止条件时,向倒数迭代模块输出的有效的需求取倒数的操作数,可以理解为开平方迭代模块在最新执行的一级开平方迭代运算获得的平方根结果),按照Yi+1=(Yi*(2<<16‑((b*Yi)>>16)))>>16在预定精度下不断迭代,直到倒数迭代模块输出符合预设收敛条件的倒数结果,再将这个倒数结果传输给开平方迭代模块,以继续执行开平方迭代运算(新的一级开平方迭代运算,包括下一级或清零处理后的全新的一级),并将倒数迭代运算的结束标志flag3置为有效(即置1),也表示倒数迭代模块当前输出的是有效的倒数结果;其中,倒数迭代运算的使能标志flag2是开平方迭代模块向倒数迭代模块置出的一种迭代开始控制信号,表示启动倒数迭代运算。其中,Yi+1和Yi都要求将低16位配置为表示其小数,使得预定精度要求覆盖到低16位的小数。
[0030] 基于前述实施例,开平方迭代运算是属于利用牛顿迭代法公式求取待开方数的平方根的迭代运算,在开平方迭代模块内连接有与开平方迭代运算的迭代逻辑关系对应的第一电路单元架构;倒数迭代运算是属于利用牛顿迭代法公式求取待开方数的倒数的迭代运算,在倒数迭代模块内连接有与倒数迭代运算的迭代逻辑关系对应的第二电路单元架构。与现有技术相比,所述运算电路系统在求取待开方数的平方根之前,需预先通过倒数迭代模块迭代计算出符合预设收敛条件的倒数,再被开平方迭代模块用于迭代计算出待开方数的平方根,避免在运算电路系统使用除法器资源计算求取平方根所需的倒数,且开平方迭代模块和倒数迭代模块都处于同一精度下进行迭代计算,提高计算速度,节省硬件资源。
[0031] 作为一种实施例,结合图1可知,在开平方迭代模块进行预定精度的开平方迭代运算的过程中,当上一级开平方迭代运算中输出的平方根结果(Xn,缓存在图示的第二数据寄存器的时候)与当前一级开平方迭代运算中输出的平方根结果(Xn+1,缓存在图示的第一数据寄存器的时候)的差值的绝对值满足开方迭代终止条件时,结束开平方迭代运算,将当前一级开平方迭代运算中输出的平方根结果作为平方迭代运算最终获取的平方根结果(通过时钟打拍的方式更新第二数据寄存器,再由第二数据寄存器的S端输出),作为符合开方迭代终止条件的平方根,并将开平方迭代运算的结束标志flag4置为有效;当上一级开平方迭代运算中输出的平方根结果(Xn)与当前一级开平方迭代运算中输出的平方根结果(Xn+1)的差值的绝对值不满足开方迭代终止条件时,将当前一级开平方迭代运算输出的平方根结果输出至倒数迭代模块,即通过打拍的方式将图示的第一数据寄存器内缓存的Xn+1送至图示的第二数据寄存器,以覆盖更新Xn,最后由第二数据寄存器输出Xn+1至倒数迭代模块以作为输入新的一级倒数迭代运算的操作数,并向倒数迭代模块置出有效的倒数迭代运算的使能标志(flag2=1),同时确定完成当前一级开平方迭代运算。从而本实施例在当前一级开平方迭代运算的平方根不满足开方迭代终止条件的前提下,启动倒数迭代模块以获取更合适的倒数结果,便于下一级开平方迭代运算中获取更加接近所述开方迭代终止条件的平方根。
[0032] 需要说明的是,如图1所示,开平方迭代模块,用于在可操作标志flag1有效(flag1置为高电平)时,接收并缓存所述初始操作数至内置的第一数据寄存器中,优选地,flag1置为高电平的时间只是维持一个脉冲周期,小于执行一级开平方迭代运算或一级倒数迭代运算所耗费的周期,再在外部的驱动时钟控制下将所述初始操作数X0由第一数据寄存器缓存到开平方迭代模块内置的第二数据寄存器中,使所述初始操作数更新为下一级倒数迭代运算的输入操作数。开平方迭代模块,用于在可操作标志flag1无效(flag1=0)时,缓存当前一级开平方迭代运算输出的平方根结果至第一数据寄存器中,第二数据寄存器缓存有上一级开平方迭代运算输出的平方根结果;再当上一级开平方迭代运算中输出的平方根结果与当前一级开平方迭代运算中输出的平方根结果的差值的绝对值不满足开方迭代终止条件时,在外部的驱动时钟控制下将当前一级开平方迭代运算输出的平方根结果由第一数据寄存器缓存到开平方迭代模块内置的第二数据寄存器中,以使得第二数据寄存器缓存的数据被第一数据寄存器缓存的当前一级开平方迭代运算输出的平方根结果覆盖,此时,当前一级开平方迭代运算结束,转而开始执行新的一级倒数迭代运算,此时,当前一级开平方迭代运算输出的平方根结果更新为上一级开平方迭代运算输出的平方根结果,开始执行的下一级开平方迭代运算则更新为成为当前一级开平方迭代运算,下一级开平方迭代运算输出的平方根结果更新为当前一级开平方迭代运算输出的平方根结果。需要说明的是,在开平方迭代运算的结束标志flag4变为有效之前,若第二数据寄存器缓存上一级开平方迭代运算输出的平方根结果,则第一数据寄存器用于缓存当前一级开平方迭代运算输出的平方根结果,这里的平方根结果在开平方迭代运算的结束标志变为有效之前都理解为中间结果。
[0033] 本实施例通过预处理模块启动倒数迭代模块执行倒数迭代运算,也启动开平方迭代模块将所述初始操作数缓存起来,并将所述初始操作数更新为当前一级开平方迭代运算的输入操作数,即牛顿迭代初值,以备新的一级开平方迭代运算输入使用。
[0034] 作为一种实施例,结合图1可知,在倒数迭代模块进行预定精度的倒数迭代运算的过程中,当上一级倒数迭代运算中输出的倒数结果(Yi,是缓存在图示的第四数据寄存器的时候)与当前一级倒数迭代运算输出的倒数结果(Yi+1,是缓存在图示的第三数据寄存器的时候)的差值的绝对值满足倒数迭代终止条件时,确定结束倒数迭代运算,即完成当前一级倒数迭代运算,并向开平方迭代模块置出有效的倒数迭代运算的结束标志(flag3=1),并确定倒数迭代模块在上一级倒数迭代运算(第四数据寄存器内缓存的数据)中输出的倒数结果是符合预设收敛条件的倒数结果(即图示的待求取倒数的操作数b在预定精度下且符合预设收敛条件的倒数值Yi),同时将符合预设收敛条件的倒数结果传输至开平方迭代模块,让符合预设收敛条件的倒数结果成为开平方迭代运算公式中的1/Xn;当上一级倒数迭代运算中输出的倒数结果(Yi)与当前一级倒数迭代运算输出的倒数结果(Yi+1)的差值的绝对值不满足倒数迭代终止条件时,将当前一级倒数迭代运算中输出的倒数结果更新为下一级倒数迭代运算的输入操作数,即通过打拍的方式将图示的第三数据寄存器内缓存的Yi+1送至图示的第二数据寄存器,以覆盖更新Yi,并维持倒数迭代运算的使能标志flag2有效,同时将倒数迭代运算的结束标志flag3置为无效。所述倒数迭代模块的实施例通过对倒数迭代模块设置倒数迭代终止条件和计算精度,避免倒数迭代模块迭代的计算过长,加快获取符合预设收敛条件的倒数结果并及时停止倒数迭代运算,辅助所述开平方迭代模块在新的一级开平方迭代运算中计算出符合开方迭代终止条件的平方根,保证计算精度。
[0035] 具体地,如图1所示,所述倒数迭代模块,包括第三数据寄存器和第四数据寄存器,用于在倒数迭代运算的使能标志(flag2)有效时,而且,在第三数据寄存器缓存当前一级倒数迭代运算输出的倒数结果、且第四数据寄存器缓存上一级倒数迭代运算输出的倒数结果的状态下,第四数据寄存器缓存的数据与第三数据寄存器缓存的数据的差值的绝对值不满足倒数迭代终止条件时,在外部的驱动时钟控制下将当前一级倒数迭代运算输出的倒数结果由第三数据寄存器缓存到所述倒数迭代模块内置的第四数据寄存器中,以覆盖掉第四数据寄存器原先缓存的上一级倒数迭代运算输出的倒数结果,也使得第四数据寄存器用于缓存下一级倒数迭代运算的输入操作数,此时,当前一级倒数迭代运算结束,转而开始执行新的一级倒数迭代运算,此时,当前一级倒数迭代运算输出的倒数结果更新为上一级倒数迭代运算输出的倒数结果,开始执行的下一级倒数迭代运算则更新为成为当前一级倒数迭代运算,下一级倒数迭代运算输出的倒数结果更新为当前一级倒数迭代运算输出的倒数结果。若当前一级倒数迭代运算输出的倒数结果配置为下一级倒数迭代运算的输入操作数,并由第四数据寄存器输出以进行下一级倒数迭代运算,则下一级倒数迭代运算输出的倒数结果缓存至第三数据寄存器。需要说明的是,在倒数迭代运算的结束标志flag3变为有效之前,若第四数据寄存器缓存上一级倒数迭代运算输出的倒数结果,则第三数据寄存器用于缓存当前一级倒数迭代运算输出的倒数结果,这里的倒数结果在倒数迭代运算的结束标志flag3变为有效之前都理解为中间结果。其中,第四数据寄存器,用于在倒数迭代运算的使能标志flag2无效(flag2=0)时,缓存用于倒数迭代运算的预置操作数,优选地设置为4’b1001,作为倒数迭代运算的初始操作数,等效于求取倒数时的牛顿迭代初值。本实施例在倒数迭代运算过程中,同一时间缓存前后两次求出的倒数结果,以便于通过计算这两次的倒数结果的差值来确定求倒数迭代终止的条件,降低了计算复杂度和硬件代价。
[0036] 需要说明的是,在前述实施例提及的数据寄存器用于存放操作数、运算结果和运算的中间结果,以减少访问存储器的次数。
[0037] 作为一种实施例,结合图1可知,所述运算电路系统还包括预处理模块;预处理模块,用于将预先输入的待开方数送至内置的移位寄存器,再将经过移位寄存器移位处理后的待开方数设置为预定精度的用于开平方迭代运算的初始操作数X0,且向开平方迭代模块置出可操作标志,以实现在可操作标志有效时,将初始操作数X0配置为输入开平方迭代模块的初始操作数,再交由开平方迭代模块的第一数据寄存器缓存起来。具体地,所述预处理模块包括预置数据寄存器和第一左移位寄存器,预置数据寄存器用于缓存所述待开方数a;预置数据寄存器的输出端与第一左移位寄存器的输入端连接,第一左移位寄存器用于将所述待开方数a左移处理为用于开平方迭代运算的初始操作数,使得所述初始操作数X0是待开方数a的一半,其中,所述待开方数a存在所述预定精度下对应的小数位数。因此,所述初始操作数存在的小数对应的比特位的数目比预处理模块内置的移位寄存器配置的移位位数大一个比特位,使得所述初始操作数X0是待开方数a的一半。从而拉近所述初始操作数与平方根结果的距离,加快迭代运算的速度。如图1所示,当所述待开方数的低16位是小数时,所述预定精度对应为16比特位的小数精度,第一左移位寄存器(图示标记“<<15”的矩形框)是配置为支持输入的数据在移位脉冲作用下按照逐位左移的方式左移15比特位。
[0038] 作为一种实施例,如图1所示,所述倒数迭代模块包括第二乘法器、第二右移位寄存器、第二左移位寄存器、第二减法器、第三乘法器、第三右移位寄存器、第二选择器、第三数据寄存器、第四数据寄存器、第三减法器和第二比较器,用于连接形成所述第二电路单元架构,以执行倒数迭代运算;第二乘法器的第一输入端与所述开平方迭代模块内置的第二数据寄存器的第一输出端连接,第二乘法器的第一输入端用于接收所述第二数据寄存器输出的数据,以实现所述倒数迭代模块开始处理所述开平方迭代模块在上一级开平方迭代运算中输出的平方根结果,具体是第二数据寄存器缓存的数据与第一数据寄存器缓存的数据的差值的绝对值不满足开方迭代终止条件时,所述倒数迭代模块开始处理所述开平方迭代模块在最新执行完的一级开平方迭代运算中输出的平方根结果(具体是由更新缓存数据后第二数据寄存器输出);或者,实现所述倒数迭代模块每次启动执行倒数迭代运算时,(包括倒数迭代运算的使能标志flag2置为有效(等于1)且所述倒数迭代模块在先未进行过倒数迭代运算的情况),所述初始操作数X0配置为倒数迭代运算的输入操作数,此时,所述第二乘法器开始在当前一级倒数迭代运算中处理所述第二数据寄存器输出的所述初始操作数。
[0039] 第二乘法器的第二输入端与第四数据寄存器的第一输出端连接,第二乘法器的第二输入端用于接收第四数据寄存器输出的数据,以使得所述第二乘法器开始在当前一级倒数迭代运算中处理所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果,具体是第三数据寄存器缓存的数据与第四数据寄存器缓存的数据的差值的绝对值不满足倒数迭代终止条件时,所述第二乘法器开始处理第四数据寄存器输出的所述倒数迭代模块在最新执行完的一级倒数迭代运算中输出的倒数结果;或者,所述倒数迭代模块每次启动执行倒数迭代运算(包括所述倒数迭代模块预先未进行过任何一级倒数迭代运算且倒数迭代运算的使能标志flag2置为有效(等于1)的情况)时,所述预置操作数配置为倒数迭代运算的另一个输入操作数,所述第二乘法器开始在当前一级倒数迭代运算中处理所述第四数据寄存器输出的所述预置操作数。
[0040] 第二乘法器的输出端与第二右移位寄存器的输入端连接,第二右移位寄存器用于将第二乘法器输出的乘积结果作右移处理,以使得第二乘法器输出的乘积结果在移位处理之后,无损失地以二进制数的形式表示对应的十进制下的小数位数;其中,所述平方根结果和所述倒数结果都存在所述预定精度下对应的小数位数;在图1所示的实施例中,第二右移位寄存器(标记“>>16”的矩形框)是支持对输入的数据右移16个比特位,以覆盖16比特位宽的小数部分,也可以表示为覆盖所述平方根结果和所述倒数结果的低16位的小数的近似值。
[0041] 第二左移位寄存器的输入端用于接收第一预设二进制数2’b10(等于十进制的2),并对第一预设二进制数移位形成预留完整小数位的二进制数,当预定精度是要求覆盖到低16位的小数时,第二左移位寄存器(标记“<<16”的矩形框)对第一预设二进制数2’b10左移
16个比特位;第一预设二进制数是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量,即前述实施例的倒数迭代运算公式的常量2。
[0042] 第二右移位寄存器的输出端与第二减法器的第一输入端连接,左移位寄存器的输出端与第二减法器的第二输入端连接,第二减法器的输出端与第三乘法器的第一输入端连接,第二减法器用于在倒数迭代运算的使能标志flag2有效时,将第二右移位寄存器输出的移位结果减去左移位寄存器输出的移位结果,再将相减得到的差值送至第三乘法器;第三乘法器的第二输入端与第四数据寄存器的第一输出端连接,第三乘法器的第二输入端用于接收第四数据寄存器输出的数据,以使得第三数据寄存器缓存的数据与第四数据寄存器缓存的数据的差值的绝对值不满足倒数迭代终止条件时,所述第三乘法器在当前一级倒数迭代运算中处理所述倒数迭代模块在上一级倒数迭代运算(最新执行完的一级倒数迭代运算)中输出的倒数结果,以将第二减法器输出的差值结果和所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果作相乘处理;或倒数迭代运算的使能标志flag2置为有效(等于1)时(包括所述倒数迭代模块预先未进行过倒数迭代运算的情况),所述第三乘法器在开始执行倒数迭代运算时处理所述第四数据寄存器输出的所述预置操作数,即将所述预置操作数与第二减法器输出的差值结果作相乘处理。
[0043] 第三乘法器的输出端与第三右移位寄存器的输入端连接,第三乘法器用于在倒数迭代运算的使能标志flag2有效时,控制第二减法器输出的差值与第四数据寄存器输出的数据相乘;第三右移位寄存器用于将第三乘法器输出的乘积作右移位处理,以使得第三乘法器输出的乘积结果在经过移位处理后,无损失地以二进制数的形式表示对应的十进制下的小数位数。当预定精度是要求覆盖到低16位的小数时,第三右移位寄存器是图1标记“>>16”的矩形框,即对先后经过第二乘法器和第三乘法器的相乘处理的中间结果作右移16个比特位的处理,使得最终获得的倒数结果的精度覆盖到低16位的小数。在本实施例中,第三右移位寄存器输出的结果已径输出倒数迭代运算公式中的一轮(一级)迭代运算的倒数结果(中间结果),即通过硬件电路还原出倒数迭代运算公式中的一轮(一级)迭代运算操作的步骤,对应为一个特定迭代次数i的条件的Yi+1=(Yi*(2<<16‑((b*Yi)>>16)))>>16。
[0044] 第三右移位寄存器的输出端与第二选择器的第一输入端连接,第二选择器的第二输入端用于接收所述用于倒数迭代运算的预置操作数,对应于图1所示的4’b1001。第二选择器的选择端用于接收所述倒数迭代运算的使能标志flag2,第二选择器的输出端与第三数据寄存器的输入端连接;第二选择器,用于在所述倒数迭代运算的使能标志flag2有效(flag2=1)时,选择将第三右移位寄存器输出的数据送往第三数据寄存器,以在第三数据寄存器缓存当前一级倒数迭代运算中输出的倒数结果;第二选择器,用于在所述倒数迭代运算的使能标志flag2无效(flag2=0)时,选择将第二选择器的第二输入端接收的预置操作数送往第三数据寄存器,可以存储为每启动执行倒数迭代运算所需的牛顿迭代初值。
[0045] 第三数据寄存器的第一输出端与第三减法器的第一输入端连接,第三数据寄存器的第二输出端与第四数据寄存器的输入端连接以形成级联的两个数据寄存器,第四数据寄存器的第二输出端与第三减法器的第二输入端连接,以实现当前一级倒数迭代运算输出的倒数结果缓存在第三数据寄存器,上一级倒数迭代运算中输出的倒数结果缓存在第四数据寄存器,其中,第四数据寄存器缓存的数据支持被第三数据寄存器传输的数据覆盖更新。
[0046] 第三减法器的输出端与第二比较器的输入端连接,第二比较器的输出端用于在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值小于倒数迭代收敛差值时,确定满足所述倒数迭代终止条件,确认结束倒数迭代运算,当然,所述倒数迭代运算的使能标志flag2被置为无效(flag2=0),并向所述开平方迭代模块置出有效的倒数迭代运算的结束标志flag3,则第四数据寄存器的第一输出端向所述开平方迭代模块输出的数据是符合预设收敛条件的倒数结果。
[0047] 在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于倒数迭代收敛差值时,向所述开平方迭代模块置出无效的倒数迭代运算的结束标志flag3,并控制第三数据寄存器缓存的数据传输至第四数据寄存器以覆盖掉第四数据寄存器原来缓存的数据,再配置第四数据寄存器最新缓存的数据作为下一级倒数迭代运算的输入操作数,从而控制所述第二电路单元架构执行下一级倒数迭代运算;当前一级倒数迭代运算输出的倒数结果配置为下一级倒数迭代运算的输入操作数后,由第四数据寄存器输出至第二乘法器的第二输入端以进行下一级倒数迭代运算,然后下一级倒数迭代运算输出的倒数结果缓存至第三数据寄存器。其中,第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值是由第三减法器处理输出的;其中,第二左移位寄存器、第二右移位寄存器和第三右移位寄存器所支持的移位的比特位数是由预定精度决定的。
[0048] 所述倒数迭代模块对应的实施例以乘法器和右移位寄存器为基本的计算单元,先后搭配减法器和选择器完成由牛顿迭代法公式推导出的倒数迭代运算公式Yi+1=((2<>m))*Yi)>>m的硬件架构布局设计,其中,Yi+1是第(i+1)级倒数迭代运算输出的具备m位小数的精度的倒数,m优选为16,2是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量;b是所述开平方迭代模块内置的第二数据寄存器输出的数据,即所述开平方迭代模块在上一级开平方迭代运算中输出的平方根结果;Yi是第i级倒数迭代运算输出的具备m位小数的精度的倒数,m和i都是整数。不用除法器的硬件资源进行求倒数迭代运算。
[0049] 作为一种实施例,如图1所示,作为一种实施例,所述倒数迭代模块包括第二乘法器、第二右移位寄存器、第二左移位寄存器、第二减法器、第三乘法器、第三右移位寄存器、第二选择器、第三数据寄存器、第四数据寄存器、第三减法器和第二比较器,用于连接形成所述第二电路单元架构,以执行倒数迭代运算;第二乘法器的第一输入端与所述开平方迭代模块内置的第二数据寄存器的第一输出端连接,第二乘法器的第一输入端用于接收所述第二数据寄存器输出的数据,以实现所述倒数迭代模块开始处理所述开平方迭代模块在上一级开平方迭代运算中输出的平方根结果,具体是第二数据寄存器缓存的数据与第一数据寄存器缓存的数据的差值的绝对值不满足开方迭代终止条件时,所述倒数迭代模块开始处理所述开平方迭代模块在上一级开平方迭代运算中输出的平方根结果(具体是由第二数据寄存器输出);或者,所述倒数迭代模块每次启动执行倒数迭代运时,(包括倒数迭代运算的使能标志flag2置为有效(等于1)且所述倒数迭代模块在先未进行过倒数迭代运算的情况),所述初始操作数X0配置为倒数迭代运算的输入操作数,此时,所述第二乘法器开始在当前一级倒数迭代运算中处理所述第二数据寄存器输出的所述初始操作数。
[0050] 第二乘法器的第二输入端与第四数据寄存器的第一输出端连接,第二乘法器的第二输入端用于接收第四数据寄存器输出的数据,以使得所述第二乘法器开始在当前一级倒数迭代运算中处理所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果,具体是第三数据寄存器缓存的数据与第四数据寄存器缓存的数据的差值的绝对值不满足倒数迭代终止条件时,所述第二乘法器开始处理第四数据寄存器输出的所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果Yi;其中,所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果是Yi+1;或者,所述倒数迭代模块每次启动执行倒数迭代运算(包括所述倒数迭代模块预先未进行过任何一级倒数迭代运算且倒数迭代运算的使能标志flag2置为有效(等于1)的情况)时,所述预置操作数配置为倒数迭代运算的另一个输入操作数,所述第二乘法器开始在当前一级倒数迭代运算中处理所述第四数据寄存器输出的所述预置操作数。
[0051] 第二乘法器的输出端与第二右移位寄存器的输入端连接,第二右移位寄存器用于将第二乘法器输出的乘积结果作右移处理,以使得第二乘法器输出的乘积结果在移位处理之后,无损失地以二进制数的形式表示对应的十进制下的小数位数;其中,所述平方根结果和所述倒数结果都存在所述预定精度下对应的小数位数;在图1所示的实施例中,第二右移位寄存器(标记“>>16”的矩形框)是支持对输入的数据右移16个比特位,以覆盖16比特位宽的小数部分,也可以表示为覆盖所述平方根结果和所述倒数结果的低16位的小数的近似值。
[0052] 第二左移位寄存器的输入端用于接收第一预设二进制数2’b10(等于十进制的2),并对第一预设二进制数移位形成预留完整小数位的二进制数,当预定精度是要求覆盖到低16位的小数时,第二左移位寄存器(标记“<<16”的矩形框)对第一预设二进制数2’b10左移
16个比特位;第一预设二进制数是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量,即前述实施例的倒数迭代运算公式的常量2。
[0053] 第二右移位寄存器的输出端与第二减法器的第一输入端连接,左移位寄存器的输出端与第二减法器的第二输入端连接,第二减法器的输出端与第三乘法器的第一输入端连接,第二减法器用于在倒数迭代运算的使能标志flag2有效时,将第二右移位寄存器输出的移位结果减去左移位寄存器输出的移位结果,再将相减得到的差值送至第三乘法器;第三乘法器的第二输入端与第四数据寄存器的第一输出端连接,第三乘法器的第二输入端用于接收第四数据寄存器输出的数据,以使得第三数据寄存器缓存的数据与第四数据寄存器缓存的数据的差值的绝对值不满足倒数迭代终止条件时,所述第三乘法器在当前一级倒数迭代运算中处理所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果,以将第二减法器输出的差值结果和所述倒数迭代模块在上一级倒数迭代运算中输出的倒数结果作相乘处理;或倒数迭代运算的使能标志flag2置为有效(等于1)时(包括所述倒数迭代模块预先未进行过倒数迭代运算的情况),所述第三乘法器在开始执行倒数迭代运算时处理所述第四数据寄存器输出的所述预置操作数,即将所述预置操作数与第二减法器输出的差值结果作相乘处理。
[0054] 第三乘法器的输出端与第三右移位寄存器的输入端连接,第三乘法器用于在倒数迭代运算的使能标志flag2有效时,控制第二减法器输出的差值与第四数据寄存器输出的数据相乘;第三右移位寄存器用于将第三乘法器输出的乘积作右移位处理,以使得第三乘法器输出的乘积结果在经过移位处理后,无损失地以二进制数的形式表示对应的十进制下的小数位数。当预定精度是要求覆盖到低16位的小数时,第三右移位寄存器是图1标记“>>16”的矩形框,即对先后经过第二乘法器和第三乘法器的相乘处理的中间结果作右移16个比特位的处理,使得最终获得的倒数结果的精度覆盖到低16位的小数。此时,第三右移位寄存器输出的结果已径输出倒数迭代运算公式中的一轮(一级)迭代运算的倒数结果(中间结果),即通过硬件电路还原出倒数迭代运算公式中的一轮(一级)迭代运算操作的步骤,对应为一个特定迭代次数i的条件的Yi+1=(Yi*(2<<16‑((b*Yi)>>16)))>>16;
[0055] 其中,第二左移位寄存器、第二右移位寄存器和第三右移位寄存器所支持的移位的比特位数是由预定精度决定的。
[0056] 第三右移位寄存器的输出端与第二选择器的第一输入端连接,第二选择器的第二输入端用于接收所述用于倒数迭代运算的预置操作数,对应于图1所示的4’b1001。第二选择器的选择端用于接收所述倒数迭代运算的使能标志flag2,第二选择器的输出端与第三数据寄存器的输入端连接;第二选择器,用于在所述倒数迭代运算的使能标志flag2有效(flag2=1)时,选择将第三右移位寄存器输出的数据送往第三数据寄存器,以在第三数据寄存器缓存当前一级倒数迭代运算中输出的倒数结果;第二选择器,用于在所述倒数迭代运算的使能标志flag2无效(flag2=0)时,选择将第二选择器的第二输入端接收的预置操作数送往第三数据寄存器,可以存储为每启动执行倒数迭代运算所需的牛顿迭代初值。
[0057] 第三数据寄存器的第一输出端与第三减法器的第一输入端连接,第三数据寄存器的第二输出端与第四数据寄存器的输入端连接以形成级联的两个数据寄存器,第四数据寄存器的第二输出端与第三减法器的第二输入端连接,以使得当前一级倒数迭代运算输出的倒数结果缓存在第三数据寄存器,上一级倒数迭代运算中输出的倒数结果缓存在第四数据寄存器,其中,第四数据寄存器缓存的数据支持被第三数据寄存器传输的数据覆盖更新。
[0058] 第三减法器的输出端与第二比较器的输入端连接,第二比较器的输出端,用于在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值小于倒数迭代收敛差值时,向所述开平方迭代模块置出有效的倒数迭代运算的结束标志flag3,确定满足所述倒数迭代终止条件,停止继续执行倒数迭代运算,相关的迭代次数被清零,第四数据寄存器的第一输出端向所述开平方迭代模块输出的数据是符合预设收敛条件的倒数结果,对应于上一级倒数迭代运算中输出的倒数结果。其中,倒数迭代收敛差值优选地设置为4。在第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于倒数迭代收敛差值时,向所述开平方迭代模块置出无效的倒数迭代运算的结束标志flag3,并控制第三数据寄存器缓存的数据传输至第四数据寄存器以覆盖掉第四数据寄存器原来缓存的数据,再配置第四数据寄存器最新缓存的数据作为下一级倒数迭代运算的输入操作数,从而控制所述第二电路单元架构执行下一级倒数迭代运算;当前一级倒数迭代运算输出的倒数结果配置为下一级倒数迭代运算的输入操作数后,由第四数据寄存器输出至第二乘法器的第二输入端以进行下一级倒数迭代运算,然后下一级倒数迭代运算输出的倒数结果缓存至第三数据寄存器。其中,第三数据寄存器的第一输出端输出的数据与第四数据寄存器的第二输出端输出的数据的差值是由第三减法器处理输出的。
[0059] 所述倒数迭代模块对应的实施例以乘法器和右移位寄存器为基本的计算单元,先后搭配减法器和选择器完成由牛顿迭代法公式推导出的倒数迭代运算公式Yi+1=((2<>m))*Yi)>>m的硬件架构布局设计,其中,Yi+1是第(i+1)级倒数迭代运算输出的具备m位小数的精度的倒数,m优选为16,2是利用牛顿迭代法公式求取待开方数的平方根过程中变形出的常数量;b是所述开平方迭代模块内置的第二数据寄存器输出的数据,即所述开平方迭代模块在上一级开平方迭代运算中输出的平方根结果;Yi是第i级倒数迭代运算输出的具备m位小数的精度的倒数,m和i都是整数。不用除法器的硬件资源进行求倒数迭代运算。
[0060] 作为一种实施例,如图1所示,所述开平方迭代模块包括第一乘法器、与门、第一加法器、第一右移位寄存器、第一选择器、第一数据寄存器、第二数据寄存器、第一减法器和第一比较器,用于连接形成所述第一电路单元架构,以执行平方迭代运算;第一乘法器的第一输入端用于接收所述待开方数a;第一乘法器的第二输入端与第四数据寄存器的第一输出端连接,用于接收第四数据寄存器输出的数据,优选地,所述符合预设收敛条件的倒数结果包括所述预置操作数,具体是:第三数据寄存器缓存的数据与第四数据寄存器缓存的数据的差值的绝对值满足倒数迭代终止条件时,所述倒数迭代模块只是执行一次倒数迭代运算,则由第四数据寄存器输出给第一乘法器的第二输入端的数据是所述预置操作数,使得所述预置操作数成为符合预设收敛条件的倒数结果。
[0061] 如图1所示,第一乘法器的使能端与与门的输出端连接,与门的第一输入端用于接收所述倒数迭代运算的结束标志flag3对应的信号,与门的第二输入端用于接收开平方迭代运算的结束标志flag4对应的取反信号~flag4,第一乘法器的输出端与第一加法器的第一输入端连接;第一乘法器,用于在所述倒数迭代运算的结束标志flag3有效(flag3=1)、且所述开平方迭代运算的结束标志flag4无效(~flag4=1)时,将所述待开方数和所述第四数据寄存器输出的数据相乘,再将乘积结果送往第一加法器。与门的输出端与第一加法器的使能端连接,第一加法器的第一输入端与第一乘法器的输出端连接,第一加法器的第二输入端与第二数据寄存器的第一输出端连接;第一加法器的第二输入端用于接收所述第二数据寄存器输出的数据,以实现所述开平方迭代模块在当前一级开平方迭代运算中开始处理其在上一级开平方迭代运算中输出的平方根结果Xn,等效于所述开平方迭代模块在当前一级开平方迭代运算中开始处理所述倒数迭代模块在刚结束的一级倒数迭代运算中输出的倒数结果;第一加法器,用于在所述倒数迭代运算的结束标志flag3有效、且所述开平方迭代运算的结束标志flag4无效时,将所述第二数据寄存器输出的数据和第一乘法器输出的乘积结果相加。
[0062] 第一加法器的输出端与第一右移位寄存器的输入端连接,第一右移位寄存器的输出端与第一选择器的第二输入端连接,第一右移位寄存器用于接收第一加法器执行的加法运算得到的和值,再将和值作右移处理;第一右移位寄存器对应图1所示的标记“>>1”的矩形框,支持对输入的数据右移1个比特位,等效于控制第一加法器输出的和值结果除以2,实现使用第一右移位寄存器完成开平方迭代运算公式中涉及到与2作比值的运算。
[0063] 第一右移位寄存器的输出端与第一选择器的第一输入端连接,第一选择器的第二输入端用于接收所述初始操作数,第一选择器的选择端用于接收所述可操作标志flag1,第一选择器的输出端与第一数据寄存器的输入端连接;第一选择器,用于在所述可操作标志flag1无效时,选择将第一右移位寄存器输出的数据送往第一数据寄存器,以在第一数据寄存器缓存当前一级开平方迭代运算中输出的平方根结果;第一选择器,还用于在所述可操作标志flag1有效时,选择将第一选择器的第二输入端接收的所述初始操作数X0送往第一数据寄存器,可以存储为每启动执行开平方迭代运算所需的牛顿迭代初值。第三右移位寄存器输出的结果已径输出开平方迭代运算公式中的一级迭代运算的倒数结果(中间结果),即通过硬件电路还原出开平方迭代运算公式中的一级迭代运算操作的步骤,对应为一个特定迭代次数n的条件的Xn+1=(Xn+a/Xn)>>1。
[0064] 第一数据寄存器的第一输出端与第一减法器的第一输入端连接,第一数据寄存器的第二输出端与第二数据寄存器的输入端连接,第二数据寄存器的第二输出端与第一减法器的第二输入端连接,以使得当前一级开平方迭代运算输出的倒数结果缓存在第一数据寄存器,上一级开平方迭代运算中输出的倒数结果缓存在第四数据寄存器,其中,第二数据寄存器缓存的数据支持被第一数据寄存器传输的数据覆盖更新。
[0065] 第一减法器的输出端与第一比较器的输入端连接,第一比较器的输出端用于输出所述开平方迭代运算的结束标志flag4;所述开平方迭代模块,用于在第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值的绝对值小于开平方迭代收敛差值时,确定满足所述开方迭代终止条件,并将输出的所述开平方迭代运算的结束标志flag4置为有效,本实施例在外部时钟的打拍驱动下,控制第一数据寄存器缓存的数据(当前一级开平方迭代运算输出的平方根结果)传输至第二数据寄存器以覆盖掉第二数据寄存器原来缓存的数据,让第二数据寄存器的第三输出端S向最新输出的数据是所述运算电路系统最终计算获得的平方根结果,作为符合开方迭代终止条件的平方根,等同于待开方数一种近似值的平方根结果,从而控制前述第二电路单元架构停止执行倒数迭代运算和前述第一电路单元架构停止执行开平方迭代运算。其中,开平方迭代收敛差值优选地设置为2。所述开平方迭代模块,还用于在第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值的绝对值大于或等于开平方迭代收敛差值时,将所述倒数迭代运算的使能标志flag2置为有效并输出给所述倒数迭代模块以起到对倒数迭代运算迭代控制作用,并在外部时钟的控制下将第一数据寄存器缓存的数据传输至第二数据寄存器以覆盖掉第二数据寄存器原来缓存的数据,再配置第二数据寄存器最新缓存的数据作为所述倒数迭代运算的输入操作数,以重新开始执行倒数迭代运算或启动执行倒数迭代运算(对于未执行过的情形而言),当然,第一比较器置出的所述开平方迭代运算的结束标志flag4是无效;其中,第一数据寄存器的第一输出端输出的数据与第二数据寄存器的第二输出端输出的数据的差值是由第一减法器处理输出的。
[0066] 本实施例以乘法器和右移位寄存器为基本的计算单元,先后搭配加法器和选择器完成由牛顿迭代法公式推导出的开平方迭代运算公式Xn+1=(Xn+a*(1/Xn))>>1的硬件架构布局设计,其中,Xn+1是第(n+1)级开平方迭代运算输出的具备预定精度的平方根,a是原始的待开方数;Xn是第n级开平方迭代运算输出的具备预定精度的平方根,n是整数。不用除法器的硬件资源进行开平方迭代运算。
[0067] 前述的开平方迭代模块和倒数迭代模块交叉互用各自的迭代控制信号,比如所述倒数迭代模块置出的倒数迭代运算的结束标志flag3在所述开平方迭代模块中起到迭代控制作用,所述开平方迭代模块可以将所述倒数迭代运算的使能标志flag2置为有效并输出给所述倒数迭代模块以起到对倒数迭代运算迭代控制作用,然后前述的开平方迭代模块和倒数迭代模块都在达到预先设定的收敛差值时,迭代退出对应的迭代运算,以获得合适的结果数据。从而在不降低估计精度的同时能够减少冗余迭代计算量。
[0068] 在前述实施例的基础上,所述倒数迭代收敛差值大于所述开平方迭代收敛差值;其中,所述倒数迭代收敛差值越小,对应的倒数迭代运算的精度越高,对应的倒数迭代运算的时间越长;所述开平方迭代收敛差值越小,对应的开平方迭代运算的精度越高,对应的开平方迭代运算的时间越长。适合于对计算延时要求较高,并且成本敏感的应用场景。
[0069] 在前述实施例的基础上,所述预定精度具体形式是对应的二进制数的小数设置为16位,使得16位宽的小数支持所述倒数迭代模块计算0至65565范围的十进制数的倒数;其中,所述待开方数是低16位配置为小数的二进制数。满足批量的二进制数的计算需求。
[0070] 一种芯片,该芯片内设所述的基于硬件加速的运算电路系统。避免了现有技术中的牛顿迭代法求平方根需要用到除法器的弊端,极大节省了硬件资源。大大降低了系统软件层面计算复杂度和硬件代价,且迭代计算配合迭代控制标志位信号(前述实施例的flag1至flag4)可以得到特定收敛结果下的准确度;提供了丰富的灵活度,不花费额外的硬件代价。其兼容性好。
[0071] 需要说明的是,上述是实施例中所述开平方迭代模块和所述倒数迭代模块中的各个乘法器、加法器、减法器、移位寄存器、数据寄存器、选择器、比较器都可以是由设计者使用硬件描述语言Verilog HDL进行编译形成的一种数字电路模块,或者是由设计者在具备电路绘制或编译功能的软件上进行电路绘制或编译形成的数字电路模块。此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。