计算机科学与工程学院
课程设计报告
题目全称: 用硬件描述语言设计浮点乘法器(原码一位乘法)
课程名称: 计算机组成原理 任课教师:
指导老师:
序号 学生姓名
学号
班号
任课教师
成绩
1
2
3
4
5
6
(注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名
依次递减。序号排位为“1”的学生成绩最高,排位为“6”的学生成绩最低。)
指导老师评语:
工作态度
(10%)
课程设计的
成果(70%)
文档写作
(20%)
小组得分
(100%)
签字:
1
小组成员的分工及任务完成情况
序号 学生姓名
任务分工
完成情况
学生签名
1
2
3
4
5
6
2
目录
第一章 序章 ...............................................................4
1.1 乘法器概述 ........................................................ 4
1.2 课题概述 .......................................................... 5
第二章 课程设计的需求分析 .................................................6
2.1 环境需求 .......................................................... 6
2.2 功能需求 .......................................................... 6
2.3 性能需求 .......................................................... 6
第三章总体设计 ............................................................7
3.1 原理分析 .......................................................... 7
3.2 功能模块 ......................................................... 10
第四章乘法器的实现 .......................................................13
4.1 开发环境介绍 ..................................................... 13
4.2 主要功能模块的实现 ............................................... 13
4.3 本章小结 ......................................................... 12
第五章 测试及成果展示 ....................................................21
5.1 测试环境 ......................................................... 21
5.2 测试用例和结果 ................................................... 21
5.3 成果展示 ......................................................... 23
第六章 总结与展望 ........................................................26
参考文献 .................................................................27
III
第一章 序章
1.1 乘法器概述
作用
乘法器不仅作为乘法、除法、乘方和开方等模拟运算的主要基本单元,而且还广泛用于电子通信系
统作为调制、解调、混频、鉴相和自动增益控制;另外还可用于滤波、波形形成和频率控制等场合,
因此是一种用途广泛的功能电路。
一个理想的通用乘法器,不应当对任何一个输入信号的极性加以限制,也就是说,应当具有能完成
四个象限的运算功能的电路。
类型
模拟乘法器
模拟乘法器是对两个模拟信号(电压或电流)实现相乘功能的的有源非线性器件。主要功能是实现
两个互不相关信号相乘,即输出信号与两输入信号相乘积成正比。它有两个输入端口,即 X 和 Y 输
入端口。
乘法器两个输入信号的极性不同,其输出信号的极性也不同。如果用 XY 坐标平面表示,则乘法器
有四个可能的工作区,即四个工作象限,如图。
若信号均限定为某一极性的电压时才能正常工作,该乘法器称为单象限乘法器;若信号中一个能适
应正、负两种极性电压,而另一个只能适应单极性电压,则为二象限乘法器;若两个输入信号能适
应四种极性组合,称为四象限乘法器。
集成模拟乘法器的常见产品有 BG314、F1595、F1596、MC1495、MC1496、LM1595、LM1596 等。
硬件乘法器
硬件乘法器,其基础就是加法器结构,它已经是现代计算机中必不可少的一部分。乘法器的模型就
是基于“移位和相加”的算法。在该算法中,乘法器中每一个比特位都会产生一个局部乘积。第一
个局部乘积由乘法器的 LSB 产生,第二个乘积由乘法器的第二位产生,以此类推。如果相应的乘数
比特位是 1,那么局部乘积就是被乘数的值,如果相应的乘数比特位是 0,那么局部乘积全为 0。每
次局部乘积都向左移动一位。
乘法器可以用更普遍的方式来表示。每个输入,局部乘积数,以及结果都被赋予了一个逻辑名称(如
A1、A2、B1、B2),而这些名称在电路原理图中就作为了信号名称。在原理图的乘法例子中比较信
号名称,就可以找到乘法电路的行为特性。
在乘法器电路中,乘数中的每一位都要和被乘数的每一位相与,并产生其相应的乘积位。这些局部
乘积要馈入到全加器的阵列中(合适的时候也可以用半加器),同时加法器向左移位并表示出乘法结
果。最后得到的乘积项在 CLA 电路中相加。注意,某些全加器电路会将信号带入到进位输入端(用
于替代邻近位的进位)。这就是一种全加器电路的应用;全加器将其输入端的任何三个比特相加。
随着乘数和被乘数位数的增加,乘法器电路中的加法器位树也要相应的增加。通过研究 CLA 电路的
特性,也可以在乘法器中开发出更快的加法阵列。
4
1.2 课题概述
本课题的目的是掌握原码一位乘法的计算原理和分步乘法的过程,以及各个实现的模块
的工作原理及方式。同时通过实现乘法器的也为更复杂的乘法器打好理论和实践的基
础,以便于理解和实现原码两位乘法器和更多位的乘法器。同时更加深了模块化的设计
思想,由简到繁,逐步细化每个功能模块。此外,还为了更好地学会使用Verilog语言,
熟悉了语法、设计过程、调试方法,以及软硬件工作的配合。
5
第二章 课程设计的需求分析
2.1 环境需求
操作系统:Windows 7 虚拟机
仿真软件:Xilinx ise
2.2 功能需求
使用硬件描述语言(Verilog)设计一个乘法器(原码一位乘),并且用仿真软件模拟运行
2.3 性能需求
迅速高效地完成运算
6
第三章 总体设计
3.1 原理分析
(1)原码一位乘
在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得
到,而乘积的数值部分则是两个正数相乘之积。设 n 位被乘数和乘数用定点小数表示(定点整数也同
样适用)
被乘数 [x]原 = xf .x0 x1 x2 … xn
乘数 [y]原 = yf .y0 y1 y2 … yn
则
乘积 [ z ]原 = ( xf⊕yf ) . (0. x0 x1 x2 …xn)(0 . y1 y2 …yn)
式中,xf 为被乘数符号,yf 为乘数符号。
乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数和符号组合只有四种情
况(xf yf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。
数值部分的运算方法与普通的十进制小数乘法相类似,不过对于用二进制表达的数来说,其乘法规
则更为简单一些:从乘法 y 的最低位开始,若这一位为“1”,则将被乘数 x 写下;若这一位为“0”,
则写下全 0。然后再对乘数 y 的高一位进行的乘法运算,其规则同上,不过这一位乘数的权与最低
位乘数的权不一样,因此被乘数 x 要左移一位。依次类推,直到乘数各位乘完为止,最后将它们统
统加起来,便得到最后乘积 z 。
设 x = 0.1011,y = 0.1101,让我们先用习惯方法求其乘积,其过程如下:
×
+
1
0
0
0
0
1
0
1
0
0.
1
0.
0.
1
1
1
1
0
1
1
(x)
(y)
1
1
1
0
1
0
1
1
0
1
0
0
1
1
1
(z)
如果被乘数和乘数用定点整数表示,我们也会得到同样的结果。但是,但是人们习惯的算法对机器
并不完全适用。原因之一,机器通常只有 n 位长,两个 n 位数相乘,乘积可能为 2n 位。原因之二,
只有两个操作数相加的加法器,难以胜任将 n 个位积一次相加起来的运算。为了简化结构,机器通
常只有 n 位长,并且只有两个操作数相加的加法器。为此,必须修改上述乘法的实现方法,将 x • y
改写成适于如下定点机的形式:
一般而言,设被乘数 x 、乘数 y 都是小于 1 的 n 位定点正数:
x = 0 . x1 x2 … xn ; y = 0 . y1 y2 … yn
7
其乘积为
x • y = x • ( 0.y1y2 … yn )
= x • ( y1 2 -1 + y2 2 -2 + … + yn 2 -n)
= 2 -1( y1x + 2-1( y2 x + 2-1 (… + 2-1 ( yn-1 x + )…))
令 zi 表示第 i 次部分积,则上式可写成如下递推公式:
z0 = 0
z1 = 2-1( ynx + z0)
…
zi=2-1(yn-i+1x+zi-1)
…
zn = x•y = 2-1( y1x + zn-1)
显然,欲求 x•y,则需设置一个保存部分积的累加器。乘法开始时,令部分积的初值 z0 = 0,然后
求加上 ynx,右移 1 位得第 1 个部分积,又将加上 yn - 1x,再右移 1 位得第 2 个部分积。依此类推,
直到求得 y1x 加上 zn-1 并右移 1 位得最后部分积,即得 x•y。显然,两个 n 位数相乘,需重复进行
n 次“加”及“右移”操作,才能得到最后乘积。这就是实现原码一位乘法的规则。
【例 】 x = 0.1101, y = 0.1011,用原码一位乘法计算 x • y = ?
[解:]
求解过程如下:
+
+
+
+
yf
yf
乘数
1
部分积
00.0000
00.1101
00.1101
→ 00.0110
00.1101
01.0011
→ 00.1001
00.0000
00.1001
→ 00.0100
00.1101
01.0001
→ 00.1000
所以 x • y = 0.10001111
1
1
1
1
1
1
1
说明
1
1
0
1
yf
1
0
1
z0 = 0
y4 = 1,+ x
右移,得 z1
Y3 = 1,+ x
右移,得 z2
Y2 = 0,+0
右移,得 z3
Y1 = 1,+ x
1
yf
右移,得 z3 = x y
0
1
yf
1
1
(2)浮点数乘法
浮点运算使用三种不同的数据:整数,又分为字,短整数和长整数;实数,分为单精度和双精度压
缩的二十进制数(BCD) 。
设有两个浮点数 x 和 y,分别为: X= 2mMx , Y= 2nMy
(1)对阶:
两浮点数进行加、减时,首先要看两数的阶码是否相同,若两数的阶码不等,表示小数点位置没有
对齐,则必须使两数的阶码相等,这个过程叫做对阶.对阶的方法:
首先求出两数的阶码 m 和 n 之差:
8