16位布斯算法乘法器和ALU
Booth算法16位乘法器西安电子科技大学大三集成电路设计与集成系统专业尹俊镖
一乘法器原理分析
16位有符号乘法器可以分为三个部分:根据输入的被乘数和乘数产生部分积、部分积压缩产生和和进位、将产生的和和进位相加。这三个部分分别对应着编码方式、拓扑结构以及加法器。
被乘数X(16-bit)
符号位扩展
S01?X(17-bit)X(17-比特)0
1?X2?X
MUX
ADD/SUBBooth译码
&ALU(17-bit)
控制逻辑符号位扩展
S乘积(低16-bit)乘数乘积(高16-bit)
保留移出位右移2-bit
1 编码方式:
booth算法乘法例题讲解本设计采用booth2编码。
部分积是负数时S=1,部分积是正数时S=0;
当部分积是+0时,E=1,部分积是-0时,E=0,其余情况E=S取反。
2 拓扑结构:
本设计采用二进制树的拓扑结构。二进制树拓扑结构排列的较为规整,且部分积压缩的速度也非常快。
部分积压缩的目的是为了减小进位传播的延时,采用进位保留加法器,根据当前位信息产生下一位的进位,仅仅产生而没有进位行波传播,这样就可以把当前的多位压缩到较少的位数。经过几次压后,把部分积压缩成和以及进位。
部分积主要是通过counter和compressor进行压缩,通常使用(3:2)counter 和(4:2)compressor。
(3:2)counter其实质就是一个全加器,进位输入为ci,进位输出为c;
(4:2)compressor可以由两个全加器组成,ci为进位输入,Coin为内部进位,输入到下一位的进位输入Ci,Coex为输出进位。
上图为二进制树的拓扑结构图,每4个部分积输入到一个(4:2)compressor 中,产生两个输出,则8个部分积使用3次(4:2)compressor就可以得到和和进位。部分积的压缩方式可以见下图。
如图中所示,加上最后一个部分积的进位,共有9个部分积,本设计把最后的进位位移到第一个部分积上,使用5个全加器,把进位融合到第一个部分积,这样就转变成8个部分积了,再使用两级二进制树压缩,所以总共使用了三级压缩,最终得到部分积的和和进位。为了免去不必要的硬件开销,对于部分积边上的位采用counter压缩。上文提到的符号位扩展的改进方法,其目的也就是减少硬件开销,所以在不影响性能的情况下,单独出来部分积的边缘位是十分有必要的。
3 加法器
本设计采用超前进位加法器。为了使得乘法器的延时最小,最后一级的加法器采用传播延时最小的超前进位加法器。
超前进位加法器的原理及构成,在此不做详述。
二仿真验证
32 对于16位乘法器的仿真验证,若采用穷举法,则有2种情况,验证次数太
多,所以只能采用随机数的验证方法。产生两个随机数,加入到乘法器的两个输入端,如此循环10000次,若没有错误,则可以认为乘法器功能正确。
X,Y是产生的两个随机数,product是两数的乘积,product_check是用于验证结果是否正确。Count用于计数,循环10000次,error记录计算一万次错误的次数,若发生错误,则退出仿真。
三源程序代码
1 Booth
2 模块
module mul_16 (x,y,product); //generate partial product
input [15:0] x;
input [15:0] y;
output [31:0] product;
wire [19:0] pp1; //partial product wire [20:0] pp2;
wire [20:0] pp3;
wire [20:0] pp4;
wire [20:0] pp5;
wire [20:0] pp6;
wire [20:0] pp7;
wire [19:0] pp8;
reg symb8; //ninth partial product reg [16:0] tpp1;
reg [16:0] tpp2;
reg [16:0] tpp3;
reg [16:0] tpp4;
reg [16:0] tpp5;
reg [16:0] tpp6;
reg [16:0] tpp7;
reg [16:0] tpp8;
reg symb1;
reg symb2;
reg symb3;
reg symb4;
reg symb5;
reg symb6;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论