资源描述:
《基于修正Booth算法的实用型移位式二进制乘法器电路.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、算数运算电路扩展实验(基于修正Booth算法的实用型移位式二进制乘法器电路)1、电路功能设计一个16-bit的移位式乘法器电路,要求:(1)采用修正Booth算法产生部分积;(2)采用右移部分积之和的部分积求和累加方式;(3)结果乘积寄存器为32-bit。2、电路设计(1)电路设计方案整体框图将电路分为6个子模块进行独立的设计,最后在采用一个顶层模块将之综合起来,6个子模块分别:①部分积产生电路:设被乘数为x,该电路功能是产生0,x,2x,并且x要进行符号位扩展。②加减法器电路该加减法器为17bit的加减法器,能够由Booth译码产
2、生的控制信号en_add来控制进行加法运算还是减法运算(高电平为加法,低电平为减法),将结果送给乘积寄存器的左半部分。③Booth译码产生电路通过乘数y右移2位,与之前保留的一位,总共三位构成译码电路的输入,最终将译码结果送给MUX8_3选择器,让其选出正确的部分积(0,x,2x)来参与下次的加法运算,同时Booth译码电路还产生一位控制加法器电路的控制信号en_add。④MUX数据选择器该MUX选择电路是通过译码电路产生的译码信号来选择下一步所需的部分积(0,x,2x)。⑤乘数y的右移电路先给y最高位和最低位均补0,然后每个时钟上
3、升沿到来,将之右移2位,在通过内部控制信号,向右移9次。⑥部分积之和右移电路将加法器产生的输出放在其高16位,同时进行右移2位操作,并进行符号位的扩展。然后再将移位后的高16位送给加法器的被加数端,进行下一次的部分积求和,再通过内部控制信号,控制其向右移9次,最终得到正确的乘积。(2)电路设计①部分积的产生电路moduleCreat_part_pro(input[15:0]x,outputreg[16:0]x_0,outputreg[16:0]x_1,outputreg[16:0]x_2);always@(*)beginif(x[1
4、5])beginx_0=17'b0;x_1={1'b1,x};x_2={x<<1};endelsebeginx_0=17'b0;x_1={1'b0,x};x_2={x<<1};endendendmodule电路说明:x:输入的16位被乘数x_0:输出0x_1:输出x,并进行符号位扩展x_2:输出2x②加减法器moduleAdd(inputrst_n,inputen_add,//高为加法,低位减法input[16:0]add1,input[16:0]add2,outputreg[16:0]part_sum//部分积之和,送往移存器);
5、always@(*)beginif(!rst_n)part_sum=17'b0;elseif(en_add)part_sum=add1+add2;elsepart_sum=add2-add1;endendmodule电路说明:add1:被加数add2:加数en_add:加减控制信号(高为加,低为减)part_sum:输出和③数据选择器moduleMux_3_1(input[16:0]x_0,//产生的0,X,2Xinput[16:0]x_1,input[16:0]x_2,input[2:0]en_x,//译码产生的控制信号outpu
6、treg[16:0]addx_i///送往加法器,与部分积之和相加);always@(*)begincase(en_x)3'b000:addx_i=x_0;3'b001:addx_i=x_1;3'b010:addx_i=x_2;default:addx_i=x_0;endcaseendendmodule电路说明:x_i:分别是电路①产生的0,x,2xenx:选择控制信号,由Booth译码电路产生addx_i:输出送往加法器④Booth译码电路moduleBooth_encode(input[2:0]y_n,//乘数y的三位需要译码o
7、utputreg[2:0]en_x,outputregen_add//决定加法器加减,高加低减);always@(*)begincase(y_n)3'b000:en_x=3'b000;3'b001:en_x=3'b001;3'b010:en_x=3'b001;3'b011:en_x=3'b010;3'b100:en_x=3'b010;3'b101:en_x=3'b001;3'b110:en_x=3'b001;3'b111:en_x=3'b000;default:en_x=3'b000;endcaseendalways@(*)begi
8、ncase(y_n)3'b000:en_add=1'b1;3'b001:en_add=1'b1;3'b010:en_add=1'b1;3'b011:en_add=1'b1;3'b100:en_add=1'b0;3'b101:en_ad