基于修正Booth算法的实用型移位式二进制乘法器电路(共16页).docx

上传人:飞****2 文档编号:13893029 上传时间:2022-05-01 格式:DOCX 页数:16 大小:580.45KB
返回 下载 相关 举报
基于修正Booth算法的实用型移位式二进制乘法器电路(共16页).docx_第1页
第1页 / 共16页
基于修正Booth算法的实用型移位式二进制乘法器电路(共16页).docx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《基于修正Booth算法的实用型移位式二进制乘法器电路(共16页).docx》由会员分享,可在线阅读,更多相关《基于修正Booth算法的实用型移位式二进制乘法器电路(共16页).docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上算数运算电路扩展实验(基于修正Booth算法的实用型移位式二进制乘法器电路)1、电路功能设计一个16-bit的移位式乘法器电路,要求:(1)采用修正Booth算法产生部分积;(2)采用右移部分积之和的部分积求和累加方式;(3)结果乘积寄存器为32-bit。2、电路设计(1)电路设计方案整体框图将电路分为6个子模块进行独立的设计,最后在采用一个顶层模块将之综合起来,6个子模块分别: 部分积产生电路:设被乘数为x,该电路功能是产生0,x,2x,并且x要进行符号位扩展。加减法器电路该加减法器为17bit的加减法器,能够由Booth译码产生的控制信号en_add来控制进行加法

2、运算还是减法运算(高电平为加法,低电平为减法),将结果送给乘积寄存器的左半部分。Booth译码产生电路通过乘数y右移2位,与之前保留的一位,总共三位构成译码电路的输入,最终将译码结果送给MUX8_3选择器,让其选出正确的部分积(0,x,2x)来参与下次的加法运算,同时Booth译码电路还产生一位控制加法器电路的控制信号en_add。MUX数据选择器该MUX选择电路是通过译码电路产生的译码信号来选择下一步所需的部分积(0,x,2x)。乘数y的右移电路先给y最高位和最低位均补0,然后每个时钟上升沿到来,将之右移2位,在通过内部控制信号,向右移9次。部分积之和右移电路将加法器产生的输出放在其高16位

3、,同时进行右移2位操作,并进行符号位的扩展。然后再将移位后的高16位送给加法器的被加数端,进行下一次的部分积求和,再通过内部控制信号,控制其向右移9次,最终得到正确的乘积。(2)电路设计部分积的产生电路module Creat_part_pro(input 15:0 x,output reg 16:0 x_0,output reg 16:0 x_1,output reg 16:0 x_2);always(*)beginif (x15)beginx_0 = 17b0;x_1 = 1b1,x;x_2 = x1;endelsebeginx_0 = 17b0;x_1 = 1b0,x;x_2 = x1;

4、endendendmodule电路说明:x:输入的16位被乘数x_0: 输出0x_1:输出x,并进行符号位扩展x_2:输出2x加减法器module Add(input rst_n,input en_add,/高为加法,低位减法input 16:0 add1,input 16:0 add2,output reg 16:0 part_sum/部分积之和,送往移存器);always (*)beginif (!rst_n)part_sum = 17b0;elseif(en_add)part_sum = add1 + add2;elsepart_sum = add2 - add1;endendmodul

5、e电路说明:add1:被加数add2:加数en_add:加减控制信号(高为加,低为减)part_sum:输出和数据选择器module Mux_3_1(input 16:0 x_0,/产生的0,X,2Xinput 16:0 x_1,input 16:0 x_2,input 2:0 en_x,/译码产生的控制信号output reg 16:0 addx_i /送往加法器,与部分积之和相加);always (*)begincase (en_x)3b000 : addx_i = x_0;3b001 : addx_i = x_1;3b010 : addx_i = x_2;default : addx_i

6、 = x_0;endcaseendendmodule电路说明:x_i :分别是电路产生的0,x,2xenx:选择控制信号,由Booth译码电路产生addx_i:输出送往加法器Booth译码电路module Booth_encode(input 2:0 y_n,/乘数y的三位需要译码output reg 2:0 en_x,output reg en_add /决定加法器加减,高加低减);always(*)begincase (y_n)3b000 : en_x = 3b000;3b001 : en_x = 3b001;3b010 : en_x = 3b001;3b011 : en_x = 3b01

7、0;3b100 : en_x = 3b010;3b101 : en_x = 3b001;3b110 : en_x = 3b001;3b111 : en_x = 3b000;default : en_x = 3b000;endcaseendalways(*)begincase(y_n)3b000 : en_add = 1b1;3b001 : en_add = 1b1;3b010 : en_add = 1b1;3b011 : en_add = 1b1;3b100 : en_add = 1b0;3b101 : en_add = 1b0;3b110 : en_add = 1b0;3b111 : en_

8、add = 1b1;default : en_add = 1b1;endcaseendendmodule电路说明:y_n:由y产生的三位译码输入en_x:译码电路的输出,送往数据选择器en_add:送往加法器,决定加减 乘数y右移电路module Shift_y_right_2bit(input clk,input rst_n,input 15:0 y,output reg 2:0 encode_in );reg 3:0 shift_cnt;wire en_shift;always(posedge clk or negedge rst_n)beginif (!rst_n)beginshift_

9、cnt = 4b0000;endelse if (shift_cnt = 4b1001)shift_cnt = 4b0000;elseshift_cnt = shift_cnt + 1b1;endassign en_shift = (shift_cnt = 4b1001) ? 1b0 : 1b1;reg 17:0 y_r;always(posedge clk or negedge rst_n)beginif (!rst_n)beginy_r = 18b0;encode_in = 3b000;endelseif(en_shift)beginencode_in = y_r2:0;y_r 2;end

10、elsebeginy_r = 1b0,y,1b0;endendendmodule电路说明:clk:系统时钟rst_n:系统复位信号y:乘数encode_in:产生的译码,送往Booth译码器shift_cnt:移位计数器en_shift:允许移位标志求积电路module Creat_product( input clk,input rst_n,input 16:0 part_pro,output reg 32:0 product );reg 3:0 shift_cnt;wire en_shift;always(posedge clk or negedge rst_n)beginif (!rst

11、_n)beginshift_cnt = 4b0000;endelse if (shift_cnt = 4b1001) beginshift_cnt = 4b0000;endelse beginshift_cnt = shift_cnt + 1b1;endendassign en_shift = (shift_cnt = 4b1001) ? 1b0 : 1b1;always(posedge clk or negedge rst_n) begin if (!rst_n) begin product = 33b0; product32:16 = 17b0; end else if(!en_shift

12、) begin product = 33b0; product15:0 = 16b0; end else begin product = product32,product32,product32:2; product32:16 = part_pro; end endwire 32:0 product_test;assign product_test = product32,product32,product32:2;endmodule电路说明:clk:系统时钟rst_n:复位信号part_pro:部分积之和,由上述的加法器电路产生product:输出积(此处由于时序问题,并不是正确的乘积)s

13、hift_cnt:移位计数器en_shift:允许移位标志product_test:经过仿真,这个才是正确的乘积顶层模块module Booth_16bit_TOP(input clk,input rst_n,input 15:0 x,input 15:0 y,output 32:0 product);wire 16:0 x_0;wire 16:0 x_1;wire 16:0 x_2;Creat_part_pro U_Creat_part_pro /部分积产生模块(.x(x),.x_0(x_0),.x_1(x_1),.x_2(x_2);wire 2:0 encode_in;wire 2:0 e

14、n_x;wire en_add;Booth_encode U_Booth_encode /Booth译码电路产生模块(.y_n(encode_in),.en_x(en_x),.en_add(en_add);Shift_y_right_2bit U_Shift_y_right_2bit /右移y产生译码信号(.clk(clk),.rst_n(rst_n),.y(y),.encode_in(encode_in) );wire 16:0 addx_i;Mux_3_1U_Mux_3_1 /选择加x,还是2x(.x_0(x_0),.x_1(x_1),.x_2(x_2),.en_x (en_x), .ad

15、dx_i (addx_i);wire16:0 part_sum; /部分积产生模块AddU_Add(.rst_n (rst_n),.en_add (en_add),.add1 (addx_i),.add2(product32,product32,product32:18),.part_sum (part_sum);Creat_productU_Creat_product /积的产生(.clk (clk),.rst_n(rst_n),.part_pro(part_sum),.product (product) );endmodule电路说明:将之前的六个模块联系起来,形成一个完整的乘法器电路。(3)电路的整体结构图(4)电路仿真经过多个测试数据检验,证明了电路的正确性。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁