实验二乘法器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机组成原理实验报告
姓名学号、班级、
实验题目运算器部件实验乘法器
一、实验目的
掌握乘法器以及booth乘法器的原理
二、实验原理
乘法计算步骤:
(1)从右到左用乘数的每一位乘以被乘数,每一次乘得的中间结果比上一次的结果往左移一位。
(2)积的位数比被乘数和乘数的位数要多的多。事实上,如果我们忽略符号位,n位的被乘数和m位的乘数相乘的结果的位数有(n+m)位。因此,乘法必须象加法那样处理溢出问题,如果两个32位的数相乘,积也只有32位的时候,就会出现溢出。
在上面的例子中,我们把十进制数的各位限制为0或1。因此,每一步的乘法相当简单:
(1)如果乘数位是1,则简单的复制被乘数到合适的位置(1×被乘数);
(2)如果乘数位是0,则在合适的位置置0
因为二进制数的各位是0或1,所以与上面情况类似。
一个有效的计算有符号数乘法的是Booth算法,算法的新颖之处在于减法也可以用于
计算乘积。假定2
10×6
10
,或者说0010
2
×0110
2
:
0 0 1 0
X 0 1 1 0
+ 0 0 0 0 移位(乘数位为0) + 0 0 1 0 相加(乘数位为1) + 0 0 1 0 相加(乘数位为1) + 0 0 0 0 移位(乘数位为0) 0 0 0 0 1 1 0 0
Booth发现加法和减法可以得到同样的结果。例如,
6
10=-2
10
+ 8
10
或者 0110
2=-0010
2
+ 1000
2
因为在当时移位比加法快得多,所以Booth发现了这个算法。Booth算法的关键在于把1分类为开始、中间、结束三种。
当然一串0的时候加法减法都不做。因此,总结1的分类情况有4种如表2.4所示:
表2.4 1的分类
当前位当前位右边
的位
分类
1 0 1的开始
1 1 1的中间
0 1 1的结束
0 0 0的中间
Booth算法则是根据乘数的相邻2位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积寄存器右移。算法描述如下:
(1)根据当前位和其右边的位,做如下操作:
00:0的中间,无任何操作;
01:1的结束,将被乘数加到积的左半部分;
10:1的开始,积的左半部分减去被乘数;
11:1的中间,无任何操作。
(2)将积寄存器右移1位。
需要注意的是,因为Booth乘法器是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移,不像前面的算法逻辑右移就可以了。
对于Booth算法,举例如下,2
10×-3
10
=-6
10
,或者说是0010
2
×1101
2
=1111 1010
2
。
表2.5 Booth乘法器举例
重复步骤被乘数
(md)
积(p)
0 初始值0010 0000 1101 0
1 1:10→积=积-被乘
数
0010 1110 1101 0
2:积右移1位0010 1111 0110 1
2 1:01→积=积+被乘
数
0010 0001 0110 1
2:积右移1位0010 0000 1011 0
3 1:10→积=积-被乘
数
0010 1110 1011 0
2:积右移1位0010 1111 0101 1
4 1:11→空操作0010 1111 0101 1
2:积右移1位0010 1111 1010 1
三、实验步骤
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)
10
0 初始值1001 0000 0110 0
1 1:00→空操作1001 0000 0110 0
2:积右移1位1001 0000 0011 0
2 1:10→积=积-被乘数1001 0111 0011 0
2:积右移1位1001 0011 1001 1
3 1:11→空操作1001 0011 1001 1
2:积右移1位1001 0001 1100 1
4 1:01→积=积+被乘数1001 1010 1100 1
2:积右移1位1001 1101 0110 重复步骤被乘数(md)积(p)
被乘数是(-4)
10乘数是(-5)
10
0 初始值1100 0000 1011 0
1 1:10→积=积-被
乘数1100
0100 1011 0
2:积右移1位1100 0010 0101 1 2 1:11→空操作1100 0010 0101 1
2:积右移1位1100 0001 0010 1