楼凤网站怎么做的/东莞网站推广企业
本发明提出一种对FPGA(现场可编程门阵列)中DSP slice(数字信号处理)乘法器的复用算法,属于FPGA算法应用领域。
背景技术:
在通信与信号处理系统中,乘法器是数字运算的重要单元,高性能乘法器是完成高性能实时数据运算和处理的关键。随着FPGA技术的发展,FPGA以其高度的灵活性正在越来越多的替代ASIC和DSP用于信号处理的运算。乘法器作为必不可少的算术逻辑单元,并且往往处于关键延时路径中,乘法运算需要在一个时钟周期内完成,它完成一次乘法操作的周期基本上决定了微处理器的主频,因此高性能的乘法器是现代微处理器及高速数字信号处理中的重要部件。
FPGA中给用户提供了硬件乘法器DSP slice,可实现快速的乘法操作,比单纯使用查找表和触发器搭建的乘法器具有更好的时序特性,且不浪费逻辑资源,但是FPGA中提供的DSP slice资源有限,但是我们的工程设计中往往需要大量的乘法器,这时如何更有效的利用DSP中的乘法器资源就显得越来越重要。
一个DSP资源可以运算低于指定位宽的乘法,不同的FPGA中提供的DSP乘法器的位宽有所不同,目前人们在一个时钟周期内用一个DSP资源只能运算一次乘法,当这两个乘数的位宽较小时,就有大量的硬件逻辑资源被浪费,不得不使用更为昂贵更为高端的FPGA芯片,这无形中增加了产品的成本。
技术实现要素:
本发明的目的在于提供一种复用DSP slice乘法器的方案,一个时钟周期内使用1个DSP乘法器资源运算多组较小位宽的乘法,提高DSP的利用率,以减少不必要的电路逻辑资源的浪费,提高工程在电路设计中的性能。乘法运算的乘数的位宽相比DSP slice的乘法器的位宽较小时,可以将较小位宽的乘数拼接起来,实现多组乘法的运算。
例计算(A+B)(C+D)的乘积,各乘数的位宽相同,其位宽均为t。那么AC,AD,BC,BD的位宽为2t。在一个时钟周期内使用一个DSP运算4个乘法,要对乘法器的两个乘数进行拼接,将B拼接到DSP乘法器中一个乘数H的[t-1:0]位,把D拼接到DSP乘法器中另一个乘数F的[t-1:0]位,因为BD的位宽为2t,则BD的乘积结果在DSP乘法器的乘积P的[2t-1:0]位上,为了让AD的运算结果出现在DSP乘法器乘积的[4t-1:2t]位置,需要在乘数H的[2t-1:t]位上补0,BD占了2t位,乘数B占了t位,则补2t-t=t个0,然后乘数H的[3t-1:2t]位拼接乘数A,这样AD的乘积就是DSP乘法器乘积的[4t-1:2t]位上的数值。同理,为了让BC的乘积结果出现在DSP乘法器乘积的[6t-1:4t]位上,需要在乘数F的[4t-1:t]位上补0,AD和BD占了4t位,乘数D占了t位,则补4t-t=3t个0,然后乘数F的[5t-1:4t]位拼接乘数C,这样BC的乘积就是DSP乘法器乘积的[6t-1:4t]位上的数值,通过简单的数学运算,就可以知道DSP乘法器乘积的[8t-1:6t]上的数值就是AC的乘积。
总结来说,把乘数A,相同位宽的0,乘数B按从高到底的顺序拼接成DSP乘法器的一个乘数H,再把乘数C,3倍位宽的0,乘数D按从高到底的顺序拼接成DSP乘法器的拎一个乘数F,并且拼接后的乘数位宽不大于乘法器乘数H和F的最大位宽,通过这种方法,AC,BC,AD,DB的运算结果依次出现在DSP乘法器的乘积P上,这样就实现了一个周期用一个DSP资源运算四组乘法。
附图说明
图1为本发明复用DSP乘法器原理图;
图2为本发明DSP slice乘法器简略图;
具体实施方式
利用这种算法进行工程设计,首先要根据设计要求算出相应的位宽。
例(A+B)(C+D)中每个因子有相同的位宽t,如图1所示,DSP乘法器的一个乘数由因子A,t位0,因子B拼接而成,总共3t位,DSP乘法器另一个乘数由因子C,3t位0,因子D拼接而成,总共5t位,乘积8t-1位。则DSP乘法器乘积的[2t-1:0]位是BD的乘积,[4t-1:2t]位是AD的乘积,[6t-1:4t]位是BC的乘积,[8t-1:6t]位是AC的乘积。
又例如(A+B)C中A因子的位宽为a,B因子的位宽为b,C因子的位宽为c,那么DSP乘法器的一个乘数由因子A,c位0,因子B拼接而成,总共a+b+c位,因为BC的位宽为b+c位,所以因子A必须在b+c位之后,所以BC的位宽减去因子B的位宽就是因子A和因子B之间添加的0的个数,DSP的另一个乘数连接因子C,有c位,乘积a+d+2c-1位。则DSP乘法器乘积的[b+c-1:0]位是BC的乘积,[a+b+2c-1:0]是AC的乘积。
再例如计算AD和BC的乘积,因子A,B,C,D的位宽分别为a,b,c,d,那么DSP乘法器的一个乘数由因子A,c位0,因子B拼接而成,总共a+b+c位,原理同上,DSP的另一个乘数连接因子D,a+b+c位0,因子C拼接而成,总共a+b+2c+d位,且因子D的位宽不大于C的位宽,乘积的[b+c-1:0]位是BC的乘积,[2a+2b+2c+2d-1:a+2b+2c+d]位是AD的乘积。
计算出相应的位宽之后,要使用FPGA开发工具调用DSP的IP核,对DSP进行配置,在配置过程中,选择DSP的乘法功能,并且根据我们计算的位宽选择DSP乘法器的位宽以及其它相应的配置,图2是配置的DSP slice乘法器简略图。
配置完成,就需要在设计中例化我们DSP的输入输出端口,根据再上述计算过程中的结果,将拼接成的两个乘数例化到DSP的两个输入端,在输出端口按照各个乘积出现的位置根据设计需要连接到我们的工程当中。