乘法器,也不过如此!
乘法器要点:
逐位进位并行乘法器:常规乘法计算一样
进位节省乘法器:含有超前进位加法器电路
基本时序乘法器:循环复用,左移,加法利用状态机
查找表乘法器:面积换速度典型
Wallace树:3:2压缩
Booth2乘法器:减少连1情况,每位可以是-1,0,1,减少加法次数
Booth4乘法器:三连位变一位,该位可以是±2,±1,0,减少乘法次数
写在前面:
在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件。乘法器完成一次操作的周期基本上决定了微处理器的主频。乘法器的速度和面积优化对于整个CPU的性能来说是非常重要的。为了加快乘法器的执行速度,减少乘法器的面积,有必要对乘法器的算法、结构及电路的具体实现做深入的研究。
逐位进位并行乘法器:
设两个 n 位二进制正数 X 和 Y:
X : X n-1···X1 X0
Y : Y n-1··· Y1Y0
则 X和 Y的乘积 Z有 2n位: 并且 式中YiX称为部分积,记为Pi,显然,两个一位二进制数相乘遵循如下规则:
0×0=0; 0×1=0; 1×0=0; 1×1=1
因此YiXj可用一个与门实现,记Pi.j = Yi Xj
例:两个四位二进制数X和Y相乘。
快速乘法器常采用网格形式的迭带阵列结构,图 5.3示出两个四位二进制数相乘的结构图,图 中每一个乘法单元 MU的逻辑图如图 5.4 所示,即每一个 MU由一个与门和一个全加器构成。 事实上,图 5.3中第一行的每个 MU可用一个与门实现,每一行最右边一个 MU中的全加器可 用半加器实现。图 5.3实现乘法的最长延时为 1个与门的传输延时加上八个全加器的传输延 时。假设每个全加器产生和与产生进位的传输延时相同,并且均相当 4个与门的传输延时(解释:粗略认为半加器延时为一个与门的延迟;全加器可由两个半加器和一个或门组成,全加器延时为三个与门的延迟;乘法器单元MU在全加器的基础上增加了一个与门,故一个乘法器单元的延时为四个与门的延迟,若理解不了这句话回头看夏文宇书第144页笔记),则 图 5.3逐位进位并行乘法器的最长延时为 1+8×4=33个门的传输延时。
进位节省乘法器
为了提高乘法运算速度可以改为图 5.5 所示的进位节省乘法器(Carry-Save Multiplier)。图中 用了一个三位的超前进位加法器,九个图 5.4所示的乘法单元,七个与门。显然,图 5.5中第二 行的乘法单元中全加器可改为半加器。图 5.5 执行一次乘法运算的最长延时为 1 个与门的传输 延时加上 3个全加器的传输延时,再加上三位超前进位加法器的传输延时。设三位超前进位加 法器的传输延时为 5个门的传输延时,则最长延时为 1+3×4+1×5=18的传输延时。少于前面的逐位进位并行乘法器的33个门传输延迟,节省乘法 运算时间的关键在于每个乘法单元的进位输出向下斜送到下一行,故有进位节省乘法器之称。
根据加法器类似的道理,八位的二进制超前进位乘法电路可用两个四位二进制超前进位乘法电 路再加上超前进位形成逻辑来构成。同理,依次类推可以设计出 16位、32位和 64位的乘法电路。
基本时序乘法器
若要使消耗资源最少,最自然的想法是,不再将组合电路内的每个部分积都分配全加器,而是不断复用唯一的一行,将下一行的部分积移位后累加即可。这样将空间复杂度从O(N^2)降到了O(N),但时间复杂度从O(1)增加到了O(N)。
按照常规乘法规则,每次判断乘数的一位,若为1则将被乘数加到积上,否则跳过。将积左移一位,相当于跳到下一行。重复该操作直到判断完乘数的所有位。由于加法和移位在两个状态中,所以效率不高,8位数要16个周期。
61个LUT,2个FF
module Multiplier#(parameter L_word = 8)(
output reg [2*L_word-1:0] product,
output reg Ready,
input [L_word-1:0] word1,word2,
input Start,CLK,RST
);
reg [2*L_word-1:0] multiplicand,P;
reg [1:0] state,next_state;
integer Pointer;
parameter Idle = 0, Load = 1, Add = 2, Shift = 3;
always@(posedge CLK or posedge RST)
if (RST) state <= Idle;
else state <= next_state;
always@(state or Start)
case (state)
Idle: if (Start) begin
Ready = 0;</