乘法器之三(半并行乘法器)
2) 半并行乘法器(Semi-parallel multiplication)
半并行乘法器将输入乘数的部份位乘上被乘数或者系数,然后将每次得到的部份积移位累加后得到乘法结果。
举个例子,一个16位输入总线可以被分成四组四位,四组数据被依次送到RAM块的地址端口,每个时钟送入
一组,低四位先送。在每个时钟周期,RAM块依次输出每一组数据和系数相乘的结果。图10显示了是如何分
解一个16位输入、14位系数来实现半并行乘法操作的。
图11显示了用一个M512RAM LUT实现图10所示的半并行乘法器。实现方法是在每个时钟周期加载四位输
入到RAM块,根据权位通过移位累加每个时钟周里RAM块输出的部份积,在六个时钟周期(四个时钟用于
加载输入值到RAM块,两个时钟用于流水延迟)后完成一个乘法操作。每次部份积移位相加后输出会增加4
位,在第四次部份积累加完成后,乘法器产生一个30位的输出。
图11显示的是用一个M512实现16位输入被分成4组4位的例子。在本例中,对于同一个存储器块的使用,
输入总线的位宽将决定乘法器输出的位宽以及延迟。增大分组的位宽(比如在本例实现一个大于4位位宽的分组)
可以减小乘法器的延时。但这样也许会需要更多的M512块或者使用大的RAM块M4K。
也可以用QuartusII 的Megafunction altmemmult来实现半并行定系数乘法器。设计者可以通过MegaWizard
Plug-in Manage窗口在自己的设计中订制生成半并行、定系数软乘法器。同样,乘法器的输入和系数的位宽以
及RAM块的类型决定了altmemmult Megafunction实现的是半并行还是并行软乘法器;然而,不管实现的那
一种乘法器,Megafunction都非常高效的。图12显示了实现图11所示的16位输入、14位系数的半并行乘法器
所需的参数设置。本例中的系数是常数值2。
sload_data信号和MegaWizard窗口右下方显示的信息指示altmemmult Megafunction实现的是半并行或者并行模式软乘法
器。半并行软乘法器有sload_data信号且要多个时钟周期才能接受一次新的输入。图11中的半并行乘法器是将16位输入分成
4组4位s小块。因为必须花费4个时钟周期才能将一个完整的16位输入加载到RAM块中,所以在加载新的输入之前当前的输入
必须稳定地保持4个时钟周期的时间。sload_data信号上出现一个时钟周期的高电平表示可以开始加载新输入数据块。
图13显示了图11中例子的仿真结果。例中,输入是一个十进制的数10,系数是一个常数2。
表20和表21分别给出了在StratixII和Stratix器件中实现半并行定系数乘法器的结果。
表22和表23分别显示了在StratixII和Stratix器件中实现半并行可变系数乘法时的结果。