实验二乘法器实验报告_第1页
实验二乘法器实验报告_第2页
实验二乘法器实验报告_第3页
实验二乘法器实验报告_第4页
实验二乘法器实验报告_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机组成原理实验报告姓名学号、班级、实验题目运算器部件实验乘法器一、实验目的掌握乘法器以及booth乘法器的原理二、实验原理乘法计算步骤:〔1〕从右到左用乘数的每一位乘以被乘数,每一次乘得的中间结果比上一次的结果往左移一位。〔2〕积的位数比被乘数和乘数的位数要多的多。事实上,如果我们忽略符号位,n位的被乘数和m位的乘数相乘的结果的位数有〔n+m〕位。因此,乘法必须象加法那样处理溢出问题,如果两个32位的数相乘,积也只有32位的时候,就会出现溢出。在上面的例子中,我们把十进制数的各位限制为0或1。因此,每一步的乘法相当简单:〔1〕如果乘数位是1,那么简单的复制被乘数到适宜的位置〔1×被乘数〕;〔2〕如果乘数位是0,那么在适宜的位置置0因为二进制数的各位是0或1,所以与上面情况类似。一个有效的计算有符号数乘法的是Booth算法,算法的新颖之处在于减法也可以用于计算乘积。假定210×610,或者说00102×01102:0010X0110+0000移位〔乘数位为0〕+0010相加〔乘数位为1〕+0010相加〔乘数位为1〕+0000移位〔乘数位为0〕00001100Booth发现加法和减法可以得到同样的结果。例如,610=-210+810或者01102=-00102+10002因为在当时移位比加法快得多,所以Booth发现了这个算法。Booth算法的关键在于把1分类为开始、中间、结束三种。当然一串0的时候加法减法都不做。因此,总结1的分类情况有4种如表2.4所示:表2.41的分类当前位当前位右边的位分类101的开始111的中间011的结束000的中间Booth算法那么是根据乘数的相邻2位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积存放器右移。算法描述如下:根据当前位和其右边的位,做如下操作:00:0的中间,无任何操作;01:1的结束,将被乘数加到积的左半局部;10:1的开始,积的左半局部减去被乘数;11:1的中间,无任何操作。将积存放器右移1位。需要注意的是,因为Booth乘法器是有符号数的乘法,因此积存放器移位的时候,为了保存符号位,进行算术右移,不像前面的算法逻辑右移就可以了。对于Booth算法,举例如下,210×-310=-610,或者说是00102×11012=111110102。表2.5Booth乘法器举例重复步骤被乘数〔md〕积〔p〕0初始值001000001101011:10→积=积-被乘数00101110110102:积右移1位001011110110121:01→积=积+被乘数00100001011012:积右移1位001000001011031:10→积=积-被乘数00101110101102:积右移1位001011110101141:11→空操作00101111010112:积右移1位0010111110101三、实验步骤1.翻开Quartus->tools->programmer,将booth_multiplier.sof下载到FPGA中。注意进行programmer时,应在program/configure下的方框中打勾,然后下载。2.在实验台上通过模式开关选择FPGA独立调试模式010。3.将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU所需要的时钟使用正单脉冲时钟。四、实验现象本实验实现4位数的Booth乘法〔有符号数乘法〕。输入输出规那么对应如下:1.输入的4位被乘数〔multiplicand〕md3~md0对应开关SD11~SD8。2.输入的4位乘数〔multiplier〕mr3~mr0对应开关SD3~SD0。3.按单脉冲按钮,输入脉冲,也即节拍。4.乘积product〔8位〕p7~p0对应灯A8~A1,辅助位A0。5.当计算结束时,final信号为1,对应灯R7。如表2.5的booth算法举例,一共需要0~8九个小步骤计算出结果。本实验也是通过九个小步骤实现的,通过按单脉冲按钮输入脉冲,观察积存放器的变化,掌握booth乘法器的原理。〔1〕拨动开关SD11~SD8输入4位被乘数〔md3~md0〕0010,SD3~SD0输入4位乘数〔mr3~mr0〕1101。〔2〕按动单脉冲按钮,输入脉冲,对照表2.5观察积存放器即灯A8~A0的变化情况,当灯R7亮时,说明计算结束,灯A8~A1为最后相乘结果。根据以上操作细节,仿照表2.5填写表中各步骤。进行新的乘法运算时,或者说当上一次运算结束即灯R7亮时,输入新的被乘数、乘数〔拨动开关〕,然后按动单脉冲开关即可观察正确的存放器结果。00:0的中间,无任何操作;重复步骤被乘数〔md〕积〔p〕被乘数是(-7)10乘数是(6)100初始值100100000110011:00→空操作10010000011002:积右移1位100100000011021:10→积=积-被乘数10010111001102:积右移1位100100111001131:11→空操作10010011100112:积右移1位100100011100141:01→积=积+被乘数10011010110012:积右移1位100111010110重复步骤被乘数〔md〕积〔p〕被乘数是(-4)10乘数是(-5)100初始值110000001011011:10→积=积-被乘数11000100101102:积右移1位110000100101121:11→空操作11000010010112:积右移1位110000010010131:01→积=积+被乘数11001101001012:积右移1位110011101001041:10→积=积-被乘数11000010100102:积右移1位110000010100思考题试述Booth乘法器的原理,即为什么可以用相邻两位的差来决定加减操作Booth算法的关键在于把1分类为开始、中间、结束三种。当然一串0的时候加法减法都不做。因此,总结1的分类情况有4种如表2.4所示:表2.41的分类当前位当前位右边的位分类101的开始111的中间011的结束000的中间Booth算法那么是根据乘数的相邻2位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积存放器右移。算法描述如下:根据当前位和其右边的位,做如下操作:00:0的中间,无任何操作;01:1的结束,将被乘数加到积的左半局部;10:1的开始,积的左半局部减去被乘数;11:1的中间,无任何操作。将积存放器右移1位。需要注意的是,因为Booth乘法器是有符号数的乘法,因此积存放器移位的时候,为了保存符号位,进行算术右移,不像前面的算法逻辑右移就可以了。附录代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityBoothisport(multiplicand:instd_logic_vector(3downto0);multiplier:instd_logic_vector(3downto0);clk:instd_logic;clr:instd_logic;product:bufferstd_logic_vector(8downto0);final:outstd_logic);endentity;architecturertlofBoothissignalm:std_logic_vector(8downto0):=multiplicand&"00000";signalboothstep:std_logic_vector(2downto0):="000";signalflag:std_logic_vector(1downto0);------后两位局部积signaltemp:std_logic_vector(8downto0);----局部积存放器beginprocess(flag)is----------后两位控制加还是减beginif(flag="01")thentemp<=product+m;elsif(flag="10")thentemp<=product-m;elsetemp<=product;endif;endprocess;flag<=product(1downto0);process(clk,clr)is--------时钟到来移位beginif(clr='0')thenproduct<="0000"&multiplier&'0';--qianhoubu0elsif(clk'eventandclk='1')thenproduct<=temp(8)&temp(8downto1);----存放器中的数据保存到product中endif;endprocess;process(clk)isbeginifclr='0'thenfinal<='0';boothst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论