一种FPGA实现可变位宽除法的方法及装置与流程

文档序号:17718853发布日期:2019-05-22 02:00阅读:345来源:国知局
一种FPGA实现可变位宽除法的方法及装置与流程

本公开涉及fpga领域,尤其涉及一种fpga实现可变位宽除法的方法及装置。



背景技术:

现在,随着芯片制程技术的快速发展,fpga芯片的规模越来越大,速度也越来越快,fpga芯片已经作为板卡核心运算部件应用在各种场合,如航天,军工,通信,人工智能等。fpga凭借着灵活,强大的并行运算能力,在板卡应用中承担着大量的运算工作,如何能更快更高效的实现数学运算,成为fpga工程师努力的方向。

在各种复杂的数学运算中,有着大量的加法,减法,乘法,除法。由于fpga中都有内嵌的专门用于运算的dsp单元,因而加法,减法以及乘法,都可以实现很宽位宽的高速运算,但是除法却不能使用dsp单元,只能使用通用的lut单元来实现,而现在各fpga厂商的eda工具提供的现有函数,对于除法运算的支持,最大位宽都只支持到64位。而现实运算中,大于64位宽的运算比比皆是,因此如何能够实现大于64位宽的高速除法运算,是一件亟待解决的问题。

传统实现大于64位宽除法的方法,都是通过部分余数左移加除数补码或0实现,例如8位宽的除法,整体思路是先将八位(本来余数是四位的,但是该处的余数不仅仅充当余数,还作为中间变量,把被除数从最高位一位一位地移到余数里)余数清零,然后把被除数的最高位拼接到余数后面,此时余数与除数比较,若余数大于除数,则把两者的差作为新的余数,且把对应的商值为记1;若余数小于除数,则把对应位的商值记0;进行下一步之前把被除数的第二高位继续拼接到余数后面,如此进行,循环八次即可,最后结果是得到商和余数的形式,其算法流图如图1所示。

由于fpga对于时序要求很严格,当位宽很宽时,不能使用组合逻辑来实现除法,否则运算结果就会出错。如果使用时序逻辑来实现,则根据附图1可知,除数的位宽n决定着最后输出结果会在n个时钟后输出。这意味着每运算一次,都要等n个时钟产生结果后,再进行下一次的运算。因此,该种方法无法实现高效的运算。



技术实现要素:

(一)要解决的技术问题

本公开提供了一种fpga实现可变位宽除法的方法及装置,以至少部分解决以上所提出的技术问题。

(二)技术方案

根据本公开的一个方面,提供了一种fpga实现可变位宽除法的方法,包括:

s1,将除数分解成n段,并调用基础位数除法单元,将分解的第一段除以被除数,得出第一段的第一商数和第一余数,其中n=1,2,3......;

s2,将所述第一余数与第二段除数组合,并且继续除以被除数,得出第二段的第二商数和第二余数;将此第二余数和第三段除数拼接,然后除以被除数,得出第三段的第三商数和第三余数;

s3,重复上述过程,直至得到第n商数和第n余数,所述第n余数即为可变位宽除法所求的余数,第一商数至第n商数的n段商的拼接即为可变位宽除法所求的商数。

在一些实施例中,n的取值由除数位宽、被除数位宽及基础位数除法单元的基础位数确定。

在一些实施例中,分解后n段的位宽与被除数位宽拼接后的位宽小于等于基础位数。

在一些实施例中,所述基础位数为64位,所述基础位数除法单元为64位组合逻辑除法单元。

在一些实施例中,所述基础位数除法单元通过组合逻辑来实现除法运算。

在一些实施例中,在实现除法运算时,每一个时钟输入一个除数,和被除数,在一预定的间隔时间后,顺序输出所求的商数和余数。

在一些实施例中,在实现除法运算时,时钟运用约束方式,设置高频时钟。

根据本公开的另一个方面,提供了一种fpga实现可变位宽除法的装置,采用如上所述的方法,包括:

输入单元,用于输入被除数和除数;

分割单元,连接到所述输入单元,用于将除数分割为n段,其中n=1,2,3......;

基础位数除法单元,连接到所述分割单元,用于执行基础位数宽度的除法;

输出单元,用于获取第n段的商数和余数,所述第n段的余数即为可变位宽除法所求的余数,第一段的商数至第n段的商数的拼接即为可变位宽除法所求的商数。

在一些实施例中,所述基础位数除法单元用于将第i段计算得出的余数与第i+1段除数组合,并且继续除以被除数,得出第i+1段的商数和余数,其中,1≤i≤n-1。

在一些实施例中,所述输入单元在每一个时钟输入一个除数,和被除数,所述输出单元在一预定的间隔时间后,顺序输出所求的商数和余数。

(三)有益效果

从上述技术方案可以看出,本公开fpga实现可变位宽除法的方法及装置至少具有以下有益效果其中之一:

(1)由于调用除法函数后,可以每一个时钟输入一个除数,和被除数,在一定的间隔时间后,顺序输出商和余数,配合程序相当于一个时钟输出一个结果,本公开fpga实现可变位宽除法的方法比传统方法移位除法速度提大幅高,速度提供的倍数达到除数位宽的倍数,例如128位宽,则为128倍;

(2)由于本公开fpga实现可变位宽除法的装置能够实现任意位宽的除法运算,在保持运算速度的同时,弥补了fpga厂商只提供64位除法的局限性。

附图说明

图1为传统实现大于64位宽除法的算法流程图。

图2为本公开实施例一种fpga实现可变位宽除法的方法流程图。

图3为本公开实施例fpga实现可变位宽除法的运算流程图。

具体实施方式

本公开提供了一种fpga实现可变位宽除法的方法,目的在于通过使用一种新的运算方法,来实现比移位除法更快速高效且是任意位宽的fpga除法运算。

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

本公开某些实施例于后方将参照所附附图做更全面性地描述,其中一些但并非全部的实施例将被示出。实际上,本公开的各种实施例可以由许多不同形式实现,而不应被解释为限于此处所阐述的实施例;相对地,提供这些实施例使得本公开满足适用的法律要求。

在本公开的一个示例性实施例中,提供了一种fpga实现可变位宽除法的方法。本公开fpga实现可变位宽除法的方法通过借鉴10进制运算,余数拼接低位除数的办法来实现运算,通过调用一个基本64位宽的除法函数,并进行一些附加运算来实现大于64位宽的除法运算。

本公开的方法采用了调用基本64位宽的除法函数,由于64位宽的除法函数位宽较短,因此在fpga中比较容易使用组合逻辑来实现,且能满足很高的时序要求,从而输入的运算可以立即输出结果,在此基础上再进行一些运算,可以保证在一定的间隔时钟后,流水输出整个宽度除法的结果。

图2为本公开实施例一种fpga实现可变位宽除法的方法流程图。如图2所示,本公开一种fpga实现可变位宽除法的方法包括:

s1,将除数分解成n段,其中n=1,2,3......,并调用64位组合逻辑除法单元,将分解的第一段除以被除数,得出第一段的第一商数和第一余数,其中,分解后n段的位宽与被除数位宽拼接后,小于等于64;

s2,将所述第一余数与第二段除数组合,并且继续除以被除数,得出第二段的第二商数和第二余数,将此第二余数和第三段除数拼接,然后除以被除数,得出第三段的第三商数和第三余数;

s3,重复上述过程,直至得到第n商数和第n余数,所述第n余数即为可变位宽除法所求的余数,第一商数至第n商数的n段商的拼接即为可变位宽除法所求的商数,运算结束。

进一步地,本公开的运算方法调用除法函数后,可以每一个时钟输入一个除数,和被除数,在一定的间隔时间后,顺序输出商和余数,配合程序相当于一个时钟输出一个结果。同时,时钟也可以运用约束方式,得到很高的频率,不用按照传统的方法需要等待除数位宽个时钟才能得到结果,因此大幅提供运算速度。

以下通过具体实施例并结合附图对本公开fpga实现可变位宽除法的方法进行说明。

本发明的技术方案运算流程图如下图所示,此实施例中,除数为128位,被除数为20位,除数用numer表示,被除数用denom表示,商用quotient表示,余数用remain表示。

如图3所示,128位宽除数与20位宽被除数运算,首先将除数分解成3段,分解后各段的位宽与被除数位宽拼接后,均不能大于64。

请在参见如图3,将128位宽的除数,分解成numer[127:88],numer[87:44],numer[43:0],然后将分解的第一段numer[127:88],调用64位组合逻辑除法单元,除以被除数denom[19:0],得出第一段的商quotient1[40:0]和余数remain1[19:0],此时再将该余数与第二段除数numer[87:44]组合,并且继续除以被除数denom[19:0]。得出第二段的商quotient2[64:0]和余数remain2[19:0],将此余数和第三段numer[43:0],既最后一段除数拼接,然后除以被除数denom[19:0],得出第三段的商quotient2[64:0]和余数,此时的余数remain_last[19:0]就为我们所需要的实际余数,而此运算的商为三段商的拼接即quotient_last[127:0]={quotient1[40:0],quotient2[64:0],quotient2[64:0]},至此,运算结束。

在本公开又一个实施例中,提供了一种fpga实现可变位宽除法的装置,包括:

输入单元,用于输入被除数和除数;

分割单元,连接到所述输入单元,用于将除数分割为n段;

基础位数除法单元,连接到所述分割单元,用于执行基础位数宽度的除法;

输出单元,用于获取第n段的商数和余数,所述第n段的余数即为可变位宽除法所求的余数,第一段的商数至第n段的商数的拼接即为可变位宽除法所求的商数。

具体地,所述基础位数除法单元用于将第i段计算得出的余数与第i+1段除数组合,并且继续除以被除数,得出第i+1段的商数和余数,其中,1≤i≤n-1。

该种运算装置调用除法函数后,输入单元可以每一个时钟输入一个除数,和被除数,输出单元在一定的间隔时间后,顺序输出商数和余数,配合程序相当于一个时钟输出一个结果,而时钟也可以运用约束方式,得到很高的频率。不用按照传统的方法需要等待除数位宽个时钟才能得到结果,因此大幅提供运算速度。

至此,已经结合附图对本公开实施例进行了详细描述。需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属技术领域中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件和方法的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换。

此外,除非特别描述或必须依序发生的步骤,上述步骤的顺序并无限制于以上所列,且可根据所需设计而变化或重新安排。并且上述实施例可基于设计及可靠度的考虑,彼此混合搭配使用或与其他实施例混合搭配使用,即不同实施例中的技术特征可以自由组合形成更多的实施例。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本公开也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本公开的内容,并且上面对特定语言所做的描述是为了披露本公开的最佳实施方式。

本公开可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。本公开的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本公开实施例的相关设备中的一些或者全部部件的一些或者全部功能。本公开还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本公开的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。并且,在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。

类似地,应当理解,为了精简本公开并帮助理解各个公开方面中的一个或多个,在上面对本公开的示例性实施例的描述中,本公开的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本公开要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,公开方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本公开的单独实施例。

以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1