FPGA Player

好记性不如烂笔头

导航

乘法器之六(硬件乘法器)

16.       DSP块或者逻辑资源实现乘法器

Altera提供3种利用DSP块或者逻辑资源的QuartusII Megafunction来实现不同的乘法(multiply)、

乘累加(multiply-accumulate)和乘加(multiply-add)函数。

  • lpm_mult Megafunction只实现乘法功能。
  • altmult_add Megafunction可以实现乘法或者乘加功能。
  • altmult_accum Megafunction只能实现乘累加功能。
  1. 7.     硬件乘法器

StratixII、Stratix和StratixGX器件中的硬件乘法器由DSP块和逻辑资源联合实现,而CycloneII器

件中的硬件乘法器则由嵌入式乘法器和逻辑资源联合实现。硬件乘法器可以提高StratixII、Stratix、

StratixGX和CycloneII器件中的DSP块和嵌入式乘法器的利用率。StratixII、Stratix和StratixGX

中的DSP块支持36X36、18X18和9X9的乘法器,CycloneII中的嵌入式乘法器支持18X18和9X9操作。

有时候为了实现不同宽度的乘法,DSP块(或者嵌入式乘法器)可能只会被部份利用。例如一个12X9的

乘法,必须用2个9X9的DSP块(或者嵌入式乘法器)来实现,因为12位的输入超出了单个9X9 DSP

块(或者嵌入式乘法器)的最大输入要求。实现12X9乘法的时候,一个9X9 DSP块(或者嵌入式乘法器)

被完全利用,而另一个9X9 DSP块(或者嵌入式乘法器)只是部份利用而已。为了节省DSP块(或者嵌入

式乘法器),可以用器件中剩余的逻辑资源代替只被部份利用的DSP块(或者嵌入式乘法器)。这种方法

在一个需要大量DSP块(或者嵌入式乘法器)且有足够多的剩余逻辑资源的设计中非常有用。

为了实现12X9乘法,将12位输入分开,分解成较小的可以在DSP块(或者嵌入式乘法器)和逻辑资源中实现

的乘数,部份积。为了最大限度地利用DSP块(或者嵌入式乘法器),将12位输入分成两部份:9位 乘法在

DSP块(或者嵌入式乘法器)中实现;3位乘在逻辑资源中实现。如果9位是12位数的最低位的时候,那它就

是一个无符号数值,而高3位就是一个有符号数值。反之亦然。

选择3位块的截取位置,到底从高位截取还是低位截取,此时一定要知道有符号乘法比无符号乘法更适合于

在ALM或者LE中实现。如果9位块输入是无符号数值,这时3位块最好从12位输入的高位(MSB)中截取,这

样ALM或者LE乘法器执行的就是有符号乘法。如果9位块输入是有符号数,则3位块可以是12位输入的高

位(MSB)或者低位(LSB)截取的,因为这时候不管从那里截取在ALM或者LE中执行的都是有符号乘法。

图23显示了12X9硬件乘法器的分解。

 

基于上图所示的分解,可以用3个主要的模块来建立一个硬件乘法器的电路:

  • DSP块(或者嵌入式乘法器- 用lpm_mult或者altmult_addMegafunction建立。
  • 基于ALM或者LE的乘法器- 用lpm_mult或者altmult_addMegafunction建立。
  • End-stage加法器- 用lpm_add_subMegafunction建立。

DSP块(或者嵌入式乘法器)中乘法用9位输入乘以12位输入的低9位块,而基于ALM或者LE的乘法器中用9位

输入乘以12位输入的高3位块。两个乘法器输出的结果就是这个分解的部份积。部份积的结果在end-stage加法

器中被累加之前被加上权位,该权位和加法可以恢复出部份积的位置信息,以确保得到正确的结果。如图23所示,

9X3乘法的部份积通过左移9位来实现加权,12位的end-stage加法器将9X3乘法器的12位结果和9X9乘法器的

高9位的结果累加,并加上符号位。图24显示了12X9硬件乘法器的电路图。

 

图25显示了图24中电路的仿真结果。

 

表34和35分别显示了用StratixII和Stratix来实现图24所示的12X9硬件乘法器电路的结果。

 

图24中的例子适合于单DSP块(或者嵌入式乘法器)的一个输入乘数的位宽超过9位。当两个乘数都

超过9位的时候,如一个12X12的乘法器,乘法必须被分解成3个部份积而不再是2个。12位输入必须

分块,从而在用逻辑资源来实现有符号乘法的时候最大化地利用9X9DSP块(或者嵌入式乘法器)以及

尽可能地提高其利用率。于是,两个输入均被分成一个3位 MSB块和一个9位 LSB块。图26显示

了12X12乘法器的分解。

 

这样现在就可以从上面的分解图中萃取出该硬件乘法器的电路,该电路主要包括5个部份:

  • 一个DSP块乘法器(或者嵌入式乘法器)-用lpm_mult或者altmult_add  Megafunction建立。
  • 两个基于ALM或者LE乘法器-用lpm_mult或者altmult_add Megafunction建立。
  • 两个加法器-用lpm_add_sub Megafunction建立。

在DSP块(嵌入式乘法器)乘法器中使两个12位输入的9位 LSB块相乘;在第一个基于ALM或者LE乘法器

中使一个12位输入的9位 LSB块与另一个12位输入的3位 MSB块相乘;另一个基于ALM或者LE乘法器中

使一个12位输入的3位 MSB块与另一个输入的整个12位相乘。如此分解相乘得到三个部份积。在最终结

果产生之前将这些部份积通过两级加法乘加求和(用到两个加法器)。图27显示了最终的12X12硬件乘

法器中的两级加法树。 

图28显示了图27所示的例子电路的仿真结果。

 

表36和37分别显示了用StratixII和Stratix来实现图27所示的12X12硬件乘法器电路的结果。

 

  1. 8.     结论

StratixII、Stratix和StratixGX的DSP块以及CycloneII器件内的嵌入式乘法器可以用来实现DSP应用。

如果当你的设计需要的乘法器超出DSP块和嵌入式乘法器所能提供的数目的时候,可以利用StratixII、

Stratix和StratixGX中的TriMatrix(M512和M4K RAM块)及CycloneII和Cyclone中的M4K获得更多

的乘法器。例如:当利用软乘法器的时候,可以增加Stratix器件EP1S80中的16X16乘法器个数多达表

14中所显示数量的7倍。另一个例子是,全变量软乘法器是实现较小的变系数乘法器的理想选择。其它

模式的软乘法更适合于系数不频繁更新的场合,其应用效率更高。硬件乘法器可以在使用DSP块或者嵌

入式乘法器与ALM或者基于LE之间平衡,这样可以使StratixII、Stratix和StratixGX中的DSP块以及

CycloneII中的嵌入式乘法器得到更高效利用

posted on 2012-08-16 09:17  中国的孩子  阅读(9384)  评论(0编辑  收藏  举报