zoukankan      html  css  js  c++  java
  • 乘法器之六(硬件乘法器)

    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中的嵌入式乘法器得到更高效利用

  • 相关阅读:
    MySQL索引类型
    Spring+Quartz框架实现定时任务(集群,分布式)
    搭建Nginx+Java环境(转)
    windows环境下将csv文件导入mysql
    哈利波特折扣
    第二阶段个人总结06
    第二阶段个人总结05
    第二阶段个人总结04
    第二阶段个人总结03
    学习进度条——第13周
  • 原文地址:https://www.cnblogs.com/zhongguo135/p/2641472.html
Copyright © 2011-2022 走看看