用硬件描述语言设计浮点乘法器(原码一位乘法) 课程设计
- 格式:doc
- 大小:2.53 MB
- 文档页数:20
定点源码一位乘法器的设计内容结论篇一:设计一个定点源码一位乘法器可以帮助我们更好地理解计算机内部如何进行乘法运算。
本文将介绍一个定点源码一位乘法器的设计方案,包括其基本结构和实现方式,结论是这种乘法器在计算机内部可以实现,并且具有高效的性能。
首先来看乘法器的基本原理。
乘法是将两个数相乘得到的结果存储在两个数的对应位上,然后根据乘积的二进制表示将结果进行位运算得到最终的答案。
对于一位乘法器,其基本操作如下:1. 读取两个数,并将它们存储在一个临时变量中。
2. 对两个数进行位运算,将乘积的对应位设置为1,其他位设置为0。
3. 将结果存储回原来的两倍位置。
下面我们来具体实现一个一位乘法器。
首先,我们需要选择一种编程语言来实现乘法器。
由于一位乘法器只涉及两个数的不同位,因此选择C语言作为实现语言。
接下来,我们需要设计一个乘法器的数据结构。
对于一位乘法器,我们只需要将乘积的二进制表示存储在一个数组中,而不需要存储中间结果。
因此,我们可以使用一个二进制数组来实现一位乘法器。
接下来,我们来实现乘法器的代码。
首先,我们初始化两个数组,一个用于存储乘积的二进制表示,另一个用于存储中间结果。
然后,我们使用位运算来实现乘法操作。
具体地,我们按照以下步骤进行操作:1. 读取两个数。
2. 对两个数进行位运算。
3. 将乘积的对应位设置为1,其他位设置为0。
4. 将结果存储回原来的两倍位置。
下面是完整的代码实现:```c#include <stdio.h>#include <stdlib.h>#define MAX_INT 32767// 乘法器数据结构typedef struct {int value;int bit[2];} 乘积;// 初始化乘积void init_积(乘积*积) {积->value = 0;for (int i = 0; i < 2; i++) {积->bit[i] = 0;}}// 读取两个数int read_nums(乘积*积, int num1, int num2) { 乘积 temp;init_积(&temp);int carry = 0;for (int i = 0; i < 8; i++) {int bit = (num2 >> i) & 1;temp.bit[i] = bit;if (bit) {carry++;}}temp.value = carry ? (temp.value + num1) : num1;return temp.value;}// 位运算void bit_Ops(乘积*积, int num1, int num2, int bit) { if (bit) {积->bit[2 * bit - 1] = num2 & 1;}}// 打印结果void print_result(乘积*积, int num1, int num2) {for (int i = 0; i < 2; i++) {printf("%d ",积->bit[i]);}printf("");}int main() {乘积积1,积2;int num1, num2;printf("请输入两个整数:");scanf("%d%d", &num1, &num2);printf("请输入第一个整数:");scanf("%d", &积1.value);printf("请输入第二个整数:");scanf("%d", &积2.value);printf("请输入第一个整数的位数: ");scanf("%d", &积1.bit[0]);printf("请输入第二个整数的位数: ");scanf("%d", &积2.bit[0]);printf("计算结果为:");printf("%d", read_nums(积1, num1, num2));printf("计算结果的位数:");printf("%d ",积1.bit[2 *积1.bit[0] - 1]);printf(" ");printf("计算结果的进位:");printf("%d ",积2.bit[2 *积2.bit[0] - 1]);printf(" ");return 0;}```根据上面的代码,我们可以得到一位乘法器的基本结构。
原码一位乘法器设计实验报告一位乘法器设计实验报告本次实验的目的是设计一个1位乘法器,使用VHDL语言在FPGA平台上进行编程,以模拟数字系统中常用的数字乘法操作。
(1)实验介绍本次实验采用FPGA对1位乘法器进行设计,通过综合语言VHDL对1位乘法器进行编程,实现乘法操作,考核我们所学习到的技能,及其在数字电路中的运用。
(2)原理1位乘法器(One-bit Multiplier)主要包括一个数据输入端A,输入一位A;B输入端,输入一位B;两个控制端,乘法指令和正负指令;产生和端为Cout,乘法结果输出端为Dout。
1位乘法器的功能是:如果A、B都为0时,整个乘法器保持空闲,如果A>0或者 B>0,就会开始乘法运算,Cout为A与B的AND运算结果,Dout=A*B,即当B=1时,Dout=A;当B=0时,Dout=0。
(3)实验流程(1)设计多位乘法器的功能模块,完成模块之间的接口描述;(2)设计1位乘法器的VHDL代码,其中包括输入、输出、控制部分;(3)利用Xilinx ISE 14.6完成编译,查看综合错误情况;(4)绘制电路图,添加模块;(5)进行仿真测试,将模块内各部分功能输入实际值,验证运算正确性;(6)在DE2开发板上运行代码,上传新的程序,查看实际运行情况,确认乘法器可以正确工作;(7)验证结果,完成整个乘法器的设计。
(4)实验结果本次实验通过编写VHDL语言,绘制电路图,仿真测试,烧写程序等步骤,设计出一位乘法器,实现了正确乘法运算功能,实验结果如下图所示:此外,实验中使用的FPGA开发板的硬件设计采用Cyclone ll,有良好的性能和可编程性,在编程和复杂数字电路处理领域有很强的优势。
(5)总结本次实验通过实验,熟悉了1位乘法器的结构及其工作原理,掌握综合语言VHDL和FPGA编程技术,掌握了数字电路设计。
最后,本次实验完成了乘法器的设计,检验结果满足预期,获得有意义的实验教训,实现了实验目标。
计算机科学与工程学院课程设计报告题目全称:用硬件描述语言设计浮点乘法器(原码一位乘法)课程名称:计算机组成原理指导老师:职称:(注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。
序号排位为“1”的学生成绩最高,排位为“10”的学生成绩最低。
)指导老师评语:指导签字:摘要硬件乘法器,其基础就是加法器结构,它已经是现代计算机中必不可少的一部分。
其大致可分为定点乘法器和浮点乘法器。
其中浮点数的格式较定点数格式复杂,硬件实现的成本较高,完成一次浮点四则运算的时间也比定点运算要长。
但浮点数比定点数的表示范围更宽,有效精度更高,因此更适合科学与工程计算的需要。
但要求计算精度较高时,往往采用浮点运算。
浮点乘法器设计(原码一位乘法)模型就是基于“移位和相加”的算法,设浮点数A=2^AE·AM,B=2^BE·BM,则A×B=2^(AE+BE)·(AM×BM),即阶码相加,尾数相乘。
其运算步骤可以简单的归为(1)检测能否简化操作,并置结果数符(2)阶码相加(3)尾数相乘(4)乘积规格化等。
本论文第一章讲述了该课程设计的研究背景及意义及其理论依据和实验基础、课题的难点、重点、核心问题及方向。
第二章重点讲述了原码一位乘法实现浮点乘法器设计的原理、操作流程及课程设计实验数据和结果关键词:浮点乘法器、原码一位乘法、阶码、尾数目录第1章课题背景 (3)1.1研究背景 (3)1.1.1国内外的研究现状 (3)1.1.2理论依据和实验基础 (4)1.2课题的难点、重点、核心问题及方向 (4)1.3研究目的和意义 (5)第2章课题的需求分析 (6)2.1 课题对应软硬件系统的性能 (6)2.2业务流程 (6)2.3其他需求 (7)第3章课题的设计与实现 (8)3.1课程设计的理论基础 (8)3.2开发工具简介 (8)3.2.1硬件部分 (8)3.2.2软件部分 (8)3.3课程设计的框架和流程图 (8)3.4课程设计的实现 (10)3.4.1创建工程 (10)3.4.2设计输入 (10)3.4.3约束(引脚绑定) (12)3.4.4综合 (12)3.4.5实现 (12)3.4.6 下载 (14)3. 4.7开始测试 (14)3.5结论 (16)第4章结束语 (17)第1章课题背景1.1研究背景1.1.1国内外的研究现状今日由于科技的突飞猛进,使得在一个小小的晶片上,能够容纳上百万的电晶体。
实验一、原码一位乘法器一、引言在计算机组成原理知识教学过程中,关于二进制乘法运算是一个较难理解的环节,其中又以“定点原码一位乘法算法”是最基础的,针对这一算法设计实验方案,为学员提供实践环境,对深入理解这一问题、以及进一步的学习其他乘法乃至除法算法都十分重要。
二、定点原码一位乘法算法两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。
例如:[X]原=X0X1X2…Xn,X0为符号[Y]原=Y0Y1Y2…Yn,Y0为符号则[X·Y]原=(X0⊕Y0)|(X1X2…Xn)·(Y1Y2…Yn),符号“|”表示把符号和数值邻接起来。
在计算时,符号位和数值位分别进行计算。
对于数值位,逐次按乘数每一位(从低位到高位)上的值是1还是0,决定一个相加数或者是被乘数或者是0,并向左偏移一位去加上次计算得到的和(它又被称为部分积,其初值为0),如此进行乘数位数次,最终得到乘积。
在此需要注意的是:“相加数向左偏移一位后求和”和“上次计算得到的和向右偏移一位后求和”两种求和的方法是等效的,设计乘法器时采用后一种方法,其目的是寻求部份积与乘数移位方向的一致性。
例如X的值为1101,Y的数值为1011,求X·Y数值的过程如下:三、定点原码一位乘法器的逻辑结构根据以上算法,设计定点原码一位乘法器的逻辑结构如下图所示:其中n位寄存器S1n称为部分积寄存器,初值为0,计算结束时寄存乘积高位;一位寄存器S0用以寄存乘积符号;n+1位寄存器Y0n称为被乘数寄存器;n位寄存器X1n称为乘数寄存器,初值为乘数,计算结束时寄存乘积低位;一位寄存器X0用以寄存乘数符号。
控制信号Scr用于S1n清零,低电平有效;Scp用于S1n的触发,上升沿有效;S0cp用于S 0的触发,上升沿有效,X0cp用于X0的触发,上升沿有效,并且乘法器运行时,要求先产生X 0cp,然后再产生S0cp,所以这两个信号正好应用一个正脉冲的两个边沿;Xcp用于X1n的触发,上升沿有效;Ycp用于Y0n的触发,上升沿有效;Isc用于控制X1n是选择开关组值作输入还是选择移位的部分积作输入。
沈阳航空工业学院课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级:4401102学号:200403011034姓名:蔡丽娇指导教师:刘泽显完成日期:2006年12月31日沈阳航空工业学院课程设计报告目录第1章总体设计方案 (1)1.1 设计原理 (1)1.2 设计思路 (1)1.3 设计环境 (2)第二章详细设计方案 (3)2.1顶层方案图的设计与实现 (3)2.1.1创建顶层图形设计文件 (3)2.1.2器件的选择与引脚锁定 (3)2.2 功能模块的设计与实现 (5)2.2.1 8位移位电路 (5)2.2.2 部分积寄存器 (7)2.2.3 乘数寄存器 (7)2.2.4 二路选择器 (8)2.2.5 计数器 (9)2.2.6 结果输出器 (11)2.3 仿真调试 (13)第3章编程下载与硬件测试 (14)3.1 编程下载 (14)3.2 硬件测试及结果分析 (14)参考文献 (15)附录(电路原理图) (16)第1章总体设计方案1.1 设计原理定点原码一位乘法器的设计主要是基于原码一位乘法的计算过成。
设计内容主要是实现输入被乘数和乘数经电路得出结果。
设计思想是:以乘数的最低位作为乘法判断位,若判断位为1,则在前次部分积(初始部分积为0)上加上被乘数,然后连同乘数一起右移一位;若判断位为0,则在前次部分积上加0,然后连同乘数一起右移一位。
重复此判断过程,直到运算n次为止(n为乘数数值部分的长度)。
1.2 设计思路原码一位乘法器主要包括ALU﹑部分积寄存器﹑乘数移位寄存器﹑被乘数寄存器和移位电路五大部分。
这五大部分就作为底层设计,其中乘数移位寄存器需要保留移出的最低位,它的最高位要接收部分积移出的最低位这两部分采用V erilog语言进行设计,顶层的乘法器采用原理图设计输入方式。
原码一位乘的数值运算中不需要考虑符号位的情况,符号位于数值位分开处理。
原码一位乘法课程设计一、课程目标知识目标:1. 让学生掌握原码一位乘法的概念和原理,理解其在计算机运算中的重要性。
2. 使学生能够运用原码一位乘法算法进行二进制数的乘法运算,并正确表示结果。
3. 帮助学生理解原码乘法与补码乘法的区别与联系,提高学生对计算机中数值表示方法的认识。
技能目标:1. 培养学生运用原码一位乘法进行二进制乘法运算的能力,提高学生的计算速度和准确性。
2. 培养学生分析原码一位乘法运算过程中可能出现的问题,并能提出相应的解决方法。
情感态度价值观目标:1. 培养学生对计算机运算原理的兴趣,激发学生主动探索计算机科学知识的欲望。
2. 培养学生团队合作意识,使学生学会在合作中解决问题,共同提高。
3. 培养学生严谨的学术态度,使学生认识到计算机运算中的精确性和逻辑性。
课程性质:本课程属于计算机科学领域,涉及二进制运算和数值表示方法,具有理论性和实践性。
学生特点:学生已具备一定的二进制基础知识,具有一定的逻辑思维能力和动手操作能力。
教学要求:结合学生特点,注重理论与实践相结合,以实例讲解和动手练习为主,提高学生对原码一位乘法的理解和运用能力。
在教学过程中,关注学生个体差异,给予个性化指导,确保学生能够达到预定的学习目标。
通过课程学习,使学生能够将原码一位乘法应用于实际计算问题,提高学生的计算思维和问题解决能力。
二、教学内容1. 引入原码一位乘法概念,回顾二进制数的表示方法及其运算规则。
2. 讲解原码一位乘法的运算原理,以实例展示原码乘法运算过程。
3. 分析原码一位乘法与补码乘法的区别和联系,探讨各自在计算机运算中的应用场景。
4. 制定原码一位乘法运算步骤,引导学生通过练习掌握运算方法。
- 确定乘数和被乘数的原码表示;- 进行二进制乘法运算;- 判断符号位,确定结果符号;- 转换结果为原码表示。
5. 设计实例和练习题,涵盖不同类型的原码一位乘法运算,提高学生的实际操作能力。
6. 教学内容进度安排:- 第一节课:引入概念,讲解原码一位乘法原理,分析运算规则;- 第二节课:对比原码与补码乘法,通过实例讲解和练习加深理解;- 第三节课:总结原码一位乘法的运算步骤,进行实际操作练习;- 第四节课:巩固所学知识,解决实际问题,拓展学生思维。
计算机组成原理实验实验名称:原码一位乘法实验方式:1.硬件连线,在实验箱上实现。
2.设计乘法指令,采用微程序实现。
实验项目:原码一位乘法实现方法:硬件连线,在实验箱上实现。
实验目的:能在实验箱上实现或是在软件环境中模拟实现原码一位乘法,并理解乘法实现的思想。
实验工具或设备:CP226计算机组成原理实验仪基本思想:原码一位乘法实现原理:由于原码表示与真值极为相似,只差一个符号,而乘积的符号又可通过两数符号的逻辑异或求得,因此,运算结果可以直接用于原码一位乘,只需加上符号位处理即可。
在实际的实验箱中8位被乘数放在R2中,运算开始时8位乘数放在R1中,运算结束时16位乘积的高位放在R0中,低位放在R1中,R0和R1串联移位。
完成这个定点原码一位乘法的运算规则可以用如下图所示的逻辑流程图表示。
在该乘法过程中,每次操作是根据乘数的一位进行操作,对于8位数的乘法,需要循环8次完成一个乘法操作,因此称为一位乘法。
下面用原码的乘法方法进行13(1101)×11(1011)的四位乘法演示。
1、在乘法开始之前,R0和R1中的初始值为0000和1011,R2中的值为1101。
2、在乘法的第一个循环中,判断R1的最低位为1,所以进入步骤1a,将R0的值0000加上R2的值1101,结果1101送人R0。
3、判断R0的末位是否为1。
如果为1,将R0和R1均右移一位,并将R1的右移结果加上1000;如果不为1,R0和R1直接右移一位(目的是将高位寄存器R0中移出的数据存放在低位寄存器R1,以实现R0 和R1的串联使用)。
其结果为(0110,1101)。
第一次循环过程结束。
第二次循环过程中,判断R1的最低位仍为1,进入步骤la,R0的值0110加1101,结果为10011。
判断R0的末位为1,将R0、R1均右移,并让R1的右移结果加上1000。
结果为(1001,1110)。
第三次循环中,因R1的最低位为0,进入步骤lb,R0加上0000为1001,判断R0的末位为1,将R0和R1均右移一位,并将R1的右移结果加上1000。
定点原码一位乘法器的设计定点原码乘法器是一种基本的数字运算电路,用于实现两个定点原码数的乘法运算。
在设计定点原码乘法器时,需要考虑两个关键方面:乘法运算的算法和乘法运算电路的实现。
一、乘法运算的算法设计:1.符号位的处理:定点原码乘法器需要考虑乘法运算的符号位。
根据乘法运算的规则,当两个数的符号位不同时,乘积的符号位为负;当两个数的符号位相同时,乘积的符号位为正。
因此,在乘法运算时,首先需要对两个乘数的符号位进行判断和处理。
2.乘法运算的主体部分:乘法运算的主体部分是通过将两个乘数的每一位进行相乘,并将结果相加得到乘积的每一位。
一般来说,乘法运算可以采用移位和加法的方式来实现。
a.移位操作:在乘法运算中,需要将乘数的每一位与被乘数的每一位相乘,并将结果相加。
因此,首先需要将乘数的每一位与被乘数的每一位相乘,移位操作可以实现该过程。
b.加法操作:乘法运算中,需要将乘数的每一位与被乘数的每一位相乘,得到中间的结果,然后将中间结果相加,得到最终的乘积。
这一步骤可以通过加法器电路来实现。
二、乘法运算电路的实现设计:在设计定点原码乘法器的电路时,需要考虑各个功能模块的实现:1.符号位处理电路:由于定点原码乘法器需要考虑两个乘数的符号位,因此需要设计一个符号位处理电路。
该电路可以根据两个乘数的符号位来判断乘积的符号位,并给出相应的控制信号。
2.移位操作电路:移位操作电路用于实现乘数的每一位与被乘数的每一位相乘。
可以采用多路选择器和移位寄存器来实现。
多路选择器用于选择当前操作的两个数位,移位寄存器用于保存被乘数的每一位。
3.加法器电路:加法器电路用于将乘数的每一位与移位操作电路中移位后的结果相加。
可以采用并行加法器来实现,通过级联多个全加器,实现两个二进制数的加法运算。
4.乘积结果输出电路:乘积结果输出电路用于将最终的乘积输出。
可以通过选择器来选择最后一位的结果,并将结果输出到寄存器中,供后续电路使用。
设计定点原码乘法器的步骤如下:1.分析乘法运算的算法,确定各个功能模块的需求和输入输出信号。
定点原码一位乘法器的设计定点原码一位乘法器的设计是一种用于实现数字信号处理中定点运算的电路。
在数字信号处理中,运算主要使用了整数的定点表示方式,这种表示方式采用了固定的小数点位置。
乘法是数字信号处理中最常用的运算之一,因此乘法器的设计对于整个系统的性能有着重要的影响。
一位乘法器的设计主要包括两个步骤:乘法操作和结果保存。
在乘法操作中,输入的两个操作数进行乘法运算,得到结果。
在结果保存中,利用寄存器等电路将结果保留下来供后续运算使用。
一位乘法器的乘法操作可以通过移位和加法来实现。
乘法操作的基本原理是将两个操作数的每一位进行相乘,并将结果相加。
具体实现中,可以通过移位操作将一个操作数的每一位与另一个操作数的对应位相乘得到部分积,然后将部分积相加得到最终的乘积。
一位乘法器的设计要考虑到运算的精度、速度和电路复杂度等因素。
采用定点原码表示的乘法器设计相对简单,但需要考虑原码的正负号运算和进位的处理。
在一位乘法器的设计中,可以采用串行方式或并行方式来实现乘法操作。
串行方式的优点是电路简单,但速度较慢;并行方式的优点是速度快,但电路复杂。
根据实际需求和设计限制,选择适合的方式。
一位乘法器的结果保存可以通过寄存器等电路来实现。
在结果保存中,还需要考虑正负号的表示,可以采用补码表示方法。
总结来说,定点原码一位乘法器的设计需要考虑乘法操作和结果保存两方面的问题。
乘法操作可以通过移位和加法来实现,结果保存可以通过寄存器等电路来实现。
设计中还需要考虑运算的精度、速度和电路复杂度等因素。
最终的设计方案需要根据具体需求和设计限制来选择合适的方式和方法。
计算机科学与工程学院课程设计报告题目全称:用硬件描述语言设计浮点乘法器(原码一位乘法)课程名称:计算机组成原理指导老师:职称:(注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。
序号排位为“1”的学生成绩最高,排位为“10”的学生成绩最低。
)指导老师评语:指导签字:摘要硬件乘法器,其基础就是加法器结构,它已经是现代计算机中必不可少的一部分。
其大致可分为定点乘法器和浮点乘法器。
其中浮点数的格式较定点数格式复杂,硬件实现的成本较高,完成一次浮点四则运算的时间也比定点运算要长。
但浮点数比定点数的表示范围更宽,有效精度更高,因此更适合科学与工程计算的需要。
但要求计算精度较高时,往往采用浮点运算。
浮点乘法器设计(原码一位乘法)模型就是基于“移位和相加”的算法,设浮点数A=2^AE·AM,B=2^BE·BM,则A×B=2^(AE+BE)·(AM×BM),即阶码相加,尾数相乘。
其运算步骤可以简单的归为(1)检测能否简化操作,并置结果数符(2)阶码相加(3)尾数相乘(4)乘积规格化等。
本论文第一章讲述了该课程设计的研究背景及意义及其理论依据和实验基础、课题的难点、重点、核心问题及方向。
第二章重点讲述了原码一位乘法实现浮点乘法器设计的原理、操作流程及课程设计实验数据和结果关键词:浮点乘法器、原码一位乘法、阶码、尾数目录第1章课题背景 (3)1.1研究背景 (3)1.1.1国内外的研究现状 (3)1.1.2理论依据和实验基础 (4)1.2课题的难点、重点、核心问题及方向 (4)1.3研究目的和意义 (5)第2章课题的需求分析 (6)2.1 课题对应软硬件系统的性能 (6)2.2业务流程 (6)2.3其他需求 (7)第3章课题的设计与实现 (8)3.1课程设计的理论基础 (8)3.2开发工具简介 (8)3.2.1硬件部分 (8)3.2.2软件部分 (8)3.3课程设计的框架和流程图 (8)3.4课程设计的实现 (10)3.4.1创建工程 (10)3.4.2设计输入 (10)3.4.3约束(引脚绑定) (12)3.4.4综合 (12)3.4.5实现 (12)3.4.6 下载 (14)3. 4.7开始测试 (14)3.5结论 (16)第4章结束语 (17)第1章课题背景1.1研究背景1.1.1国内外的研究现状今日由于科技的突飞猛进,使得在一个小小的晶片上,能够容纳上百万的电晶体。
然而市场的需求日新月异,所以在像以前那种用gate-level的时代,已经完全不能使用,所以必须借助电脑及高阶的语言来模拟其行为模式。
于是,在这时有了AHDL语言,没想到AHDL威力强大,从高阶的电脑行为模式到gate-level 的方式都可以使用。
再加上从模拟结束后在烧到FPGA上,这样的设计方式大大缩短了时间,怪不得现今的工业会以AHDL为一种开发的标准。
而在快速乘法的发展过程中,有两个人做出聊重要贡献,1951年,Booth 提出有符号数相乘可以通过将乘数两位一乘,从而将部分积减少到N/2个,Booth 的方法被MacSorley于1961年和1964年进行一步扩展,称为改进的Booth编码,另一个人是Wallae,他于1964年指出使用“华莱士树”的机制,可以将乘数的复杂度变成log(2/3) N。
遵守IEEE754标准的浮点乘法器与定点乘法器相比,不仅要进行阶码运算,而且其尾数部分的运算也有所不同,IEE E单精度浮点乘法的尾数部分运算,是将两个24位的无符号数二进制数相乘,得到一个24位的无符号数,中间需要进行舍入和规格化操作,相对而言,IEEE双精度浮点乘法的尾数部分的计算较为复杂,要将两个53位的无符号二进制数相乘,得到一个53位的乘积。
在此过程中,如果使用最简单的移位加的策略将产生53个部分积,而改进Booth编码只需要很少的逻辑就可以将部分积的数量减少为27,每一个54位宽(53位加上Booth编码后有可能产生的一位扩展位),接下来的工作是对这些部分积进行相加,得到最后的结果。
采用的方法可以分为阵列和树型结构,已有文献研究了两种结构的优劣,得出树型结构在延迟、面积以及布局布线等方面均要优于阵列结构的结论。
目前,浮点乘法器不仅应用在许多数学信号处理器中,而且广泛的应用于通用微处理器中。
浮点乘法的操作主要包括单、双精度操作,它们将若干个部分积累加得到乘积。
与IEEE754标准兼容的浮点乘法操作,还应包括对乘积的正确舍入,对阶码的必要调整,以及产生符合实际情况的例外位。
另外,对于嵌入到现代处理器中的浮点乘法部件,大多数还要求具有流水结构、面积小且速度快。
1.1.2理论依据和实验基础浮点数表示法是一种相似于科学记号的格式,主要分成两个部分,一个称为有效数(matissa’the significand and fraction part);另一个称为指数(exponent’characteristic)。
在此,我们利用二进制数表示法来表示负的有效数和指数,我们用N表示浮点数的值、F表示二进制位的的有效数,而E表示二进制位的指数。
因为是二补数表示,所以小数点前一位为signed bit,用来表示正负号。
正规化(normalization)——利用有效数(mantissa)和指数(exponent)的方法来表示浮点数,会造成同一个数值有多种不同的表示形态。
为了达到最大的准确值,使得浮点数所能表示的范围扩大,因此,我们规定signedbit 为0时,小数点后一位必须为1;当signedbit为1时,小数点后一位必须为0。
算术右移逻辑右移——算术右移:当乘积移位时,符号也跟着向右延伸,相当于该数乘以基数的正或负的整数次方。
对阶操作——即比较两个浮点数的阶码大小,一般是使小阶向大阶对齐。
原码形式的尾数右移时,尾数符号位不参加移位,尾数高位补0。
为减少误差,可用另外的线路,保留右移过程中丢掉的一到几位的高位值,供以后舍入操作使用。
舍入操作——在执行对阶或右规操作是,会使尾数低位上的一位或者若干位的数值被移掉,使数值的精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用。
常用的办法有“0”舍“1”入法,即移掉的最高位为1时则在尾数末尾加1;为0时则舍去移掉的数值。
浮点数乘法概念——一:指数相加;二:有效数相乘;三:正规化乘积结果,判断是否溢位;四:将结果做拾入(rounding);五:乘积符号由两运算元的符号决定。
如果要在实验层面上验证,则首先采用FPGA对该浮点乘法器进行功能验证,在Altera的FPGA上进行实现,主芯片是XILINX公司的SPRTAN XC2S200。
1.2课题的难点、重点、核心问题及方向本课题的难点,同时也是重点,在于算法的设计,算法的实现,代码的输入,工具箱的正确连接。
核心问题是算法的设计和操作环境的正确操作。
方向就是扩大浮点乘法器的应用范围。
1.3研究目的和意义由于浮点数表示区间大、适用范围广、开发简单,从而使得浮点数运算成为数字信号处理中最基本的运算。
但因为现行ED A软件没有提供浮点运算功能,使其在FPGA中的实现却是个棘手问题,因此一般浮点运算只能在FPGA中自行设计实现。
现今的FPGA已完全具备浮点数据运算、信息处理、滤波计算等功能,从而将DSP的专用运算能力与FPGA的高速性整合到一块芯片上,以实现快速的在线开发与硬件系统小型化,同时也使PLD的应用从原来的逻辑控制功能渐渐转向了数据运算功能,为可编程单芯片系统(SOPC)开创了一个新纪元。
第2章课题的需求分析2.1 课题对应软硬件系统的性能功能:正常并正确处理两个浮点数的乘法运算。
设浮点数A=2^AE·AM,B=2^BE·BM,则A×B=2^(AE+BE)·(AM×BM)即阶码相加,尾数相乘。
其运算可按以下步骤进行。
(1)检测能否简化操作,并置结果数符如果操作数中有一个为0,乘积必为0,不需要做其他操作。
如果两数均不为0,才进行乘法运算。
结果数符按同号相乘为正、异号相乘为负的规则确定。
(2)阶码相加阶码用补码表示,则阶码相加就可按常规补码加法进行。
当两个乘数阶码都是正数时,阶码直接按常规原码加法进行。
阶码相加可能产生溢出,同号相加可能上溢(正阶码),也可能产生下溢(负阶码)。
本课题设计采用4位阶码原码相加,输出5位结果,所以避免了以上情况。
(3)尾数相乘(4)乘积规格化尾数相乘后,可能需要左规。
因为尾数是定点小数,相乘后不会出现需要右规的情况。
左规时阶码的减1,有下溢的可能。
(5)正确输出结果,实验室里正确显示灯亮情况。
2.2业务流程2.3其他需求在实验室的硬件上,我们只能实现阶码和尾数都是4位的浮点数的乘法,不能实现更高位的浮点数乘法。
乘积的规格化不是用程序本身来实现,而是用8位扩展自动实现。
第3章课题的设计与实现3.1课程设计的理论基础:本课题选用原码一位乘法算法原理来实现两个浮点数相乘的尾数相乘。
其原理如下:用A寄存器存放部分积累加和,其初始值为0;B寄存器存放被乘数X,C寄存器存放乘数Y。
乘法运算结束时,A寄存器中存放乘积的高位部分,C寄存器存放乘积的低位部分。
图3-1 原码一位乘法流程图3.2开发工具简介3.2.1硬件部分:核心适配板:主芯片是XILINX公司的SPRTAN XC2S200,它具有可编程接口(JTAG),通过并口与计算机相连,可以反复擦写。
输入/输出接口:(1)按键开关:键按下为抵电平,弹起为高电平,板上接口序号是K1~K12。
(2)拨码开关:开关向上为高电平,向下为低电平,板上接口序号是D1~D18。
⑶发光二极管:高电平点亮,低电平熄灭。
板上接口序号是d1~d16。
3.2.2软件部分:本实验系统的开发软件采用Xilinx公司的ISE集成开发环境。
3.3课程设计的框架和流程图图3-2 原码一位浮点数乘法器设计框图3.4课程设计的实现3.4.1创建工程*双击桌面“Xilinx ISE 7.1”;*选择“File” New Project”;填写“工程项目名”和文件存放路径*点击“下一步”;选择芯片类型、封装等信息;选择综合工具(Synthesis Tool)3.4.2设计输入*在以上对话框中,输入文件名“FloatMul”,同时选左框中的“Verilog Module”*输入Verilog HDL的源程序代码如下Module FloatMul(signA,mA,exA,signB,mB,exB,sign_out,m_out,ex_out);//signA表示被乘数的正负,mA表示被乘数的尾数,exA表示被乘数的阶码//sign_out表示乘积的正负,m_out表示乘积的尾数,ex_out乘积的阶码//被乘数、乘数、乘积都表示为:尾数*2^阶码//被乘数、乘数的尾数和阶码都用4位二进制数表示,乘积的尾数用8位二进制数表示parameter SIZE = 4,L_SIZE = 8;input signA,signB;input [SIZE-1:0]mA;input [SIZE-1:0]exA;input [SIZE-1:0]mB;input [SIZE-1:0]exB;output sign_out;output [L_SIZE-1:0]m_out;output [SIZE:0]ex_out;reg sign_out;reg [L_SIZE-1:0]m_out;reg [SIZE:0]ex_out;reg [L_SIZE-1:0]tempA;reg [L_SIZE-1:0]tempB;initialbegintempA=0;tempB=0;endalways @(signA or mA or exA or signB or mB or exB) beginif((mA == 0)||(mB == 0))beginsign_out = 0;m_out = 0;ex_out = 0;endelsebeginsign_out = signA^signB;ex_out = exA + exB;tempA = mA;tempB = mB;m_out = 0;repeat(SIZE)beginif(tempB[0])m_out = m_out + tempA;tempA = tempA << 1;tempB = tempB >> 1;endendendendmodule3.4.3约束(引脚绑定)*在“Process View”框中,点击“User Constraints”前的‘+’,双击“Assign Package Pins”*在“Design Browser”框中,选“I/O Pins”*在“Design Object List…”框中‘Loc’栏添入芯片的引脚序号,如图3-3图3-3芯片的引脚序号分配图3.4.4综合在“Process View”框中,点击“Synthesize-XST”;3.4.5实现在“Process View”框中,点击“Implement Design”,直到编译完全通过,显示如图3-4结果图3-4程序编译通过截图否则,重新调试,并重新执行如前操作。