用硬件描述语言设计浮点乘法器(原码一位乘法) 课程设计

合集下载

定点源码一位乘法器的设计内容结论

定点源码一位乘法器的设计内容结论

定点源码一位乘法器的设计内容结论篇一:设计一个定点源码一位乘法器可以帮助我们更好地理解计算机内部如何进行乘法运算。

本文将介绍一个定点源码一位乘法器的设计方案,包括其基本结构和实现方式,结论是这种乘法器在计算机内部可以实现,并且具有高效的性能。

首先来看乘法器的基本原理。

乘法是将两个数相乘得到的结果存储在两个数的对应位上,然后根据乘积的二进制表示将结果进行位运算得到最终的答案。

对于一位乘法器,其基本操作如下: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是选择开关组值作输入还是选择移位的部分积作输入。

(最新版)16位定点数原码一位乘法器的设计与实现课程设计报告

(最新版)16位定点数原码一位乘法器的设计与实现课程设计报告
k9[11],k9[10],k9[9],k9[8],k9[7],k9[6],k9[5],k9[4],k9[3],k9[2],k9[1],k9[0],k8[0],k7[0],
k6[0],k5[0],k4[0],k3[0],k2[0],k1[0],p0[0]};//分别求得的和的每一位赋给reg_z
end
pp pp12(reg_x,reg_y[12],p12);
pp pp13(reg_x,reg_y[13],p13);
pp pp14(reg_x,reg_y[14],p14);
pp pp15(reg_x,reg_y[15],p15);
//调用全加器与半加器,通过实例化求得和的每一位与每位的进位信号
halfadder ha1(p0[1],p1[0],k1[0],j1[0]);
计算机科学与工程学院
课程设计报告
题目全称:16位定点数原码一位乘法器的设计与实现
课程名称:计算机组成原理
指导老师:谭浩职称:
序号
学生姓名
学号
班号
成绩
1
刘晓窗
6
2
李育桥
5
3
郭建准
4
李浩
5
李志飞
6
7
8
9
10
(注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。序号排位为“1”的学生成绩最高,排位为“10”的学生成绩最低。)
指导老师评语:
签字:
摘 要
Verilog HDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。本实验用Verilog HDL语言设计了全加器实现的组合乘法器,通过功能仿真,验证了结果。

定点原码一位乘法器的设计 (3)

定点原码一位乘法器的设计 (3)

沈阳航空工业学院课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级: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章总体设计方案1.1 设计原理原码一位乘乘法器中用三个寄存器X,Y和BFJ分别存放被乘数,乘数和部分积。

乘法运算开始时,BFJ寄存器被清零,作为初始部分积。

被乘数放在X 寄存器中,乘数放在Y寄存器中。

实现部分积和被乘数相加是通过X送加法器和Y送加法器,在加法器中完成的。

加法器的输出经过移位电路向右移一位送入BFJ寄存器中。

Y寄存器是用移位寄存器实现的,其最低位用作Y送加法器的控制命令。

因为原码一位乘是通过乘数的最低位是1还是0来确定加数的,当乘数的最后一位为1的时候,部分积加上被乘数,当乘数的最后一位为0的时候,部分积加上0。

加法器最低一位的值,在右移的过程中将被移入Y寄存器的最高数值位,这样就使积的低位部分被保存在Y寄存器中,最开始的乘数在逐位右移的过程中不断丢失,直到移位结束。

乘法运算完成以后BFJ寄存器中保存的数值是乘积的高位部分,Y寄存器即乘数寄存器中保存乘积的低位部分。

1.2设计思路实现原码一位乘乘法的逻辑框图如图1.2所示,BFJ存放部分积,X存放被乘数,Y存放乘数。

一个实现一位原码乘法运算的运算器可以由一个被乘数寄存器,一个乘数寄存器,一个部分积寄存器,一个加法器,一个计数器,二选一选择电路以及移位电路七个模块构成。

顶层的乘法器模块采用原理图设计输入方式。

被乘数寄存器模块中X为被乘数输入端,LOAD为数据打入电平,CLK为输入脉冲,XOUT为数据输出端口。

乘数寄存器模块中Y为乘数输入端,LOAD为数据打入电平,CLK位输入脉冲,INPUT为部分积最低位输入端,YOUT为数据输出端口,LOWBIT为数乘数最低位输出端。

部分积寄存器中IN为部分积右移一位以后的数据输入端,CLR为清零电平,CLK为输入脉冲,HIGH为加法器的进位输入端,OUT为部分积右移一位后数据输出端。

图1.2实现原码一位乘法的逻辑电路框图计数器模块中CLR为清零端,CLKI为输入脉冲,CLKO为脉冲输出。

二选一选择电路中IN为被乘数输入端口,CTR为控制信号输入。

补码一位乘法浮点运算器--课程设计报告

补码一位乘法浮点运算器--课程设计报告

目录
第一章引言 .................................................................. 4 1.1 课题背景............................................................................................................................ 4 1.1.1 应用领域................................................................................................................ 4 1.1.2 国内外研究现状 .................................................................................................... 4 1.2 课题意义及价值................................................................................................................ 5 1.3 理论依据........................................................................................................................... 5 1.3.1 浮点运算原理 ...........................................................................

计算机组成原理原码以为乘法器课程设计

计算机组成原理原码以为乘法器课程设计

计算机组成原理原码以为乘法器课程设计简介本文档将介绍一个基于计算机组成原理的原码以为乘法器的课程设计。

乘法器是计算机中非常重要的一部分,其作用是实现数字乘法运算,是各种计算任务中必不可少的核心组件之一。

本课程设计旨在通过设计一个原码以为乘法器的电路,深入理解计算机组成原理的相关知识,并实践其中的原理和技术。

设计目标本课程设计的主要目标是实现一个8位原码以为乘法器电路,并能正确计算输入数字的乘积。

具体的设计目标包括以下几点:1.实现一个基于原码的乘法器电路。

2.支持8位输入数字的乘法运算。

3.保证电路的稳定性和正确性。

4.使用仿真软件验证电路设计的正确性。

设计原理选择使用原码作为乘法器的运算方式,是因为原码运算相对简单,并且易于理解。

原码运算直接对数字进行操作,不需进行补码转换,简化了计算过程。

乘法器的原理是将两个二进制数进行部分积的计算,然后将部分积相加得到最终的乘积。

在原码乘法器中,需要注意以下几点:1.正负数的处理:对于原码乘法器,正负数的处理是不同的。

正数的原码与补码一致,而负数的原码与补码相反。

因此,在乘法器的设计中,需要对输入的数字进行符号位判断,然后分别处理正数和负数。

2.部分积的计算:乘法器将两个数字的每一位进行相乘,然后将部分积相加得到最终的乘积。

在计算部分积时,需要进行位移操作和进位判断,以确保计算的正确性。

电路设计本课程设计的电路采用逻辑门的组合方式进行实现。

以下是电路设计的主要步骤:输入端口设计一个8位的并行输入端口,用于输入两个8位的原码数字。

每个输入都包含一个符号位和7个数据位。

符号位处理根据输入的符号位进行判断,如果两个输入的符号位相同,则输出结果的符号位为正,否则为负。

使用逻辑门进行判断,并将结果存储在一个标志位中。

部分积计算按位遍历两个输入数字的数据位,将每一位进行相乘,并根据位移规则将乘积结果相加得到部分积。

使用逻辑门和触发器进行位移和加法计算。

部分积相加将所有部分积相加得到最终的乘积结果。

原码一位乘法器的设计

原码一位乘法器的设计

原码一位乘法器的设计原码乘法器是一种电路或设备,用于执行原码二进制数相乘的操作。

它可以将两个原码二进制数作为输入,并输出它们的乘积。

原码乘法器的设计需要考虑以下几个方面:1.乘法器的输入:原码乘法器需要接收两个原码二进制数作为输入。

这两个输入数应该以合适的方式被接入电路中,以确保正确的操作和结果。

2.内部处理单元:原码乘法器的内部处理单元是核心部分,负责执行乘法操作。

可以使用加法器和移位器来实现乘法操作。

乘法器首先将两个输入数的绝对值进行乘法运算,然后根据输入数的符号位决定结果的符号位。

3.符号位处理:原码乘法器需要考虑输入数的符号位,并根据符号位的不同来调整结果的符号位。

如果输入数的符号位相同,则结果的符号位为正,否则为负。

4.结果输出:原码乘法器需要输出乘法结果。

输出应该以适当的方式进行编码,以便于后续的使用或处理。

下面是一个基本的原码乘法器的设计示例:```module signed_multiplierinput [7:0] A,input [7:0] B,output [15:0] Resultwire [15:0] abs_result;wire sign_result;wire sign_A;wire sign_B;assign abs_result = A * B;assign sign_A = A[7];assign sign_B = B[7];assign sign_result = sign_A ^ sign_B;assign Result[15:8] = sign_result ? ~abs_result[15:8] + 1 : abs_result[15:8];assign Result[7:0] = sign_result ? ~abs_result[7:0] + 1 : abs_result[7:0];endmodule```在上述代码中,`signed_multiplier`模块接收两个8位的原码二进制数作为输入,并输出一个16位的结果。

乘法器vhdl课程设计

乘法器vhdl课程设计

乘法器vhdl课程设计一、课程目标知识目标:1. 理解乘法器的原理及其在数字信号处理中的应用。

2. 掌握VHDL语言的基本语法和结构,能够使用VHDL进行简单的程序编写。

3. 学习并掌握利用VHDL设计乘法器的方法,理解其位运算和结构设计。

技能目标:1. 能够运用所学知识,独立设计并实现一个简单的乘法器VHDL程序。

2. 培养学生利用电子设计自动化(EDA)工具进行代码编写、仿真和测试的能力。

3. 提高学生的问题分析能力,学会使用VHDL解决实际的数字电路设计问题。

情感态度价值观目标:1. 培养学生对于电子信息和数字电路设计的兴趣,激发学生创新精神和探索欲望。

2. 增强团队合作意识,通过小组讨论和协作,提高学生之间的沟通能力和协作解决问题的能力。

3. 强化学生的工程伦理观念,了解所学技术在国家经济发展和国防建设中的重要性,树立正确的价值观。

本课程针对高年级电子信息工程及相关专业学生设计,结合学生已具备的基础知识和课程性质,以实践性和应用性为导向,旨在通过具体的乘法器VHDL课程设计,将理论知识与实践技能相结合,提升学生解决实际工程问题的能力。

通过本课程的学习,学生应能够展示出上述具体的学习成果。

二、教学内容1. 乘法器原理回顾:包括乘法器的基本工作原理,不同类型的乘法器结构对比,以及乘法器在数字信号处理中的应用。

- 相关教材章节:第三章“数字电路基础”,第5节“算术逻辑单元”。

2. VHDL语言基础:VHDL的基本语法,数据类型,信号与变量,运算符,顺序与并行语句,进程,实体和架构等。

- 相关教材章节:第五章“硬件描述语言VHDL”,第1-3节。

3. 乘法器的VHDL设计方法:- 位运算乘法器设计原理与实现。

- 流水线乘法器设计原理与实现。

- 相关教材章节:第五章“硬件描述语言VHDL”,第4节“VHDL设计实例”;第六章“数字信号处理器的硬件实现”,第2节“乘法器的硬件实现”。

4. EDA工具的应用:利用EDA工具进行VHDL代码的编写、编译、仿真和测试。

组成原理课程设计定点原码一位乘

组成原理课程设计定点原码一位乘

沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级:84010103学号:2008040101061姓名:李雪城指导教师:周大海完成日期:2011年01月14日沈阳航空航天大学课程设计报告目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3设计环境 (1)第2章详细设计方案 (3)2.1总体方案的设计与实现 (3)2.1.1总体方案的逻辑图 (4)2.1.2算法流程图 (5)2.2功能模块的设计与实现 (6)2.2.1 数据输入模块的设计与实现 (6)2.2.2 乘数末位判断模块的设计与实现 (6)2.2.3 移位模块的设计与实现 (7)2.2.4 乘积结果显示的设计与实现 (8)第3章程序调试与结果测试 (9)3.1程序调试 (9)3.2结果测试 (9)参考文献 (11)附录 (12)第1章总体设计方案1.1 设计原理原码一位乘,即两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。

在计算时,用乘数寄存器的最低位来控制部分积是否与被乘数相加,然后右移部分积和乘数,同时乘数寄存器接收部分积右移出来的一位,完成运算后,部分积寄存器保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。

1.2 设计思路被乘数与乘数都是4位,所以相乘的结果是8位。

每个寄存器的范围是8位,所以乘积的结果用一个寄存器来存储表示。

实验开始时将实验数据从实验箱的开关输入到R0、R1、R2三个寄存器中,部分积存放在R0,4位被乘数放在R1,4位乘数放在R2。

运算过程采用原码一位乘。

在计算时,首先判断乘数末位上的值是1还是0,决定部分积是否与被乘数相加,然后判断部分积的末位,因为右移时部分积的末位会溢出,乘数右移时要接收由部分积溢出来的数,所以根据判断来决定乘数右移后的高位是1还是0。

【doc】用VHDL语言实现定点原码一位乘法器的实验

【doc】用VHDL语言实现定点原码一位乘法器的实验

用VHDL语言实现定点原码一位乘法器的实验中国高教论丛vo1.24No.22002用VHDL语言实现定点原码一位乘法器的实验李莉,沈春璞,耿肇英(河北师范大学数学与信息科学学院,河北省石家庄050016)摘要:介绍了硬件描述语言VHDL的结构及设计方法,用VHDL语言设计了定点原码一位乘法器并通过CPLD器件实现了定点原码一位乘法器的实验过程.关键词:超高速集成电路硬件描述语言可编程逻辑器件电子设计自动化Theexperimentationofpoint-originalmuilipficationthroughVHDLLili,Shenchun_pu,Gengzhao_ying(HebeiNormalUniversity,Shijiazhuang0500I6)Abstract:ThispaperintroducethestructureanddesignofVHDL,thendevises thepoint?originalmultiplicationthroughVHDL.Atlastprovidestheexperimentation ofmultiplicationthroughCPLD.KeywordsVHDL:ver),HighSpeedIntegratedCircuitHardwareDescriptionLanguage PLD:ProgrammableLogicDeviceEDA:ElectronicsDesignAutomation定点运算.I是每台计算机都必须具备的运算器,定点原码一位乘法器是通过循环迭代的办法实现的,它是按一定的时间顺序重复地使用最少量的硬件——寄存器,加法器,移位和传送门等,把整个乘法过程变成为数据经过门雨I加法器实现相加,移位和寄存器接收的时序控制过程.通过组成原理实验来实现定点原码一位乘法器可加深学生对整程的记忆和认识.传统的组成原理实验需从电路板拆装多组芯片且实验连线复杂,仅连线,查错就浪费大部分时间.现在我们用目前十分流行的VHDLTM语言米编写源程序,用相应的软件编译后适配到PLD芯片中,实现所需控制过程.PLD器件是削户在:f==作现场进行编译的逻辑器件,它体积小,,功耗低,易于实现数字系统设计.采用PLD技术避免了使用过多的集成芯片和复杂的连线,能在一个芯片内实现多种功能.PLD技术实现硬连线路的软化,突破了传统硬连线设计的局限,大大提高实验效率.在此,我们介绍一种用VHDL 语言及相应的EDA软件平台和PLD器件来实现定点原码一位乘法运算器的过程.1VHDL介绍1.1VHDL的发展过程及结构特点.VHDL的英文全名为V eryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,79诞生于1982年,是随着可编程逻辑器件(PLD)的发展而发展起来的一种超高速集成电路硬件描述语言.1987年底,VHDL语言被IEEE和美国国防部确认为标准硬件描述语言.VHDL语言除了含有许多具有硬件特征的语句外,其描述风格,语言形式十分类似于一般的计算机高级语言.VHDL语言主要用于描述数字系统的结构,行为,功能及接口.VHDL的结构特点是将一个设计实体如:一个元件,一个电路模块或一个系统分为外部和内部(实体的内部功能和算法部分):实体(Entity),结构体(Architecture),配置(Configuration),程序包(Package),库(Library)是VHDL结构模型的五个组成部分,前四种可分别编译,编译后放入库中,被上层模块调用.1.2应用VHI)L进行数字电路系统设计的优点.VHDL采用自顶向下的层次化的设计方法,即从系统级开始将整个系统分为子模块,然后对这些子模块再进行进一步的划分,一直做下去,直到可以直接用库中的元件来实现为止.这种自顶向下的设计方法使一个大型的设计分解为若干个可操作的模块易于分工协作并可对这些模块分别进行模拟仿真.由于设计的主要模拟仿真是在高层上实现的,所以能及早地发现系统中的错误并改正错误,提高设计效率.VHDL具有很强的行为描述能力.强大的行为描述能力能有效避开具体的器件结构,是从逻辑行为上描述和设计大规模电子系统的重要保证.VHDL的仿真语句和库函数使得在任何大型系统的没计早期就能检查系统功能的可行性,随时进行仿真模拟.用VHDL完成的一个确定的设计可以用EDA—L具进行逻辑综合I优化并自动地把VHDL描述转变成门级表格.这种方式突破了门级设计的瓶颈,极大的减少了电路设计时间和可能发生的错误,降低开发成本.VHDL对设计的描述具有相对独立性,即硬件描述与具体的:[艺技术和硬件结构无关,VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各种系列的可编程逻辑正是由于上述优点VHDL在大规模的数字电路系统设计中发挥着愈来愈重要的作用,成为EDA领域的重要组成部分.2定点原码一位乘法器的设计2.1定点原码一位乘法器的实现方法及逻辑电路图.用原码实现乘法运算是十分方便的.原码表示的两个数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积.假定【B】=BBlB2…B【C瞰】=CsClC2…C则【BC】=【B原】【C】豇=(B.CI)口(BIB2…B)(CIC2…C)符号口表示把符号和数值邻接起来.'为了引出在计算机中实现定点原码一位乘法的具体方案,先看手工乘法的实际执行方法设B=0.1101?C=0.1011则8OO.X0.11Ol1O1ll101即B*C=O.10001l11,符号为正11O10000llO1U.1OOOllll在手工计算时,一是依乘数每一位上的取值为1还是为0,决定相加数取被乘数的值还是取零值:二是各相加数是从乘数的最低位求起,逐位变高,相加时逐个左移一位,最后一并求和:三是符号位按正乘正,负乘负结果的符号位为正,正乘负,负乘正结果的符号位为负的方案求出乘积的符号.RIJS图1实现原码一位乘法的逻辑电路框图在计算机内实现原码乘法时,要做以下方面的改进工作.由于在运算器内通常只能完成对两数的求乖¨操作,则可以每求得一个相加数,就同时完成与上一次部分积相加的操作.其次是在手工计算时,各加数逐位左移,最终相加数为相乘二位数的两倍,而在计算机中,加法器的位数一般与乘法器的位数相同,而不是寄存器位数的两倍.这实际上也可以用另外的办法解决.手[:计算时,各加数是逐位左移,但很容易发现,在求本次部分积之和时,前一部分积的最低一位是不再与任何数值相加的.这就意味着,若采用每求得一次部分积之后使其右移一位,则可以只用N位的加法器就能实现两个N位的数相乘j!显而易见,若81前一次部分积已经右移一位,就可以用其高位部分加上被乘数或加零的方法求得本次部分积.最后一点是,手工计算时,乘数每一位的值是0还是1都直接看得见,而在计算机内,采用放乘数的寄存器的每一位直接决定本次相加数是被乘数还是零是很不方便的,若均采用该寄存器的最低一位来执行这种判别就简便了.为此,只要每求一次部分积就使放乘数的寄存器执行一次右移操作即可以了.若移位时,使其最高数值位接收加法器最低位的输出,则完成乘法运算后,该寄存器中保存的是乘积的低位部分.计算机内求乘积的符号,很容易用求相乘二数符号的半加和(异或值)实现.根据上述说明,我们就可以得到如图1所示的实现原码一位乘法的逻辑电路框图.2.2用VI-IDL语言实现原码一位乘法器源程序:ymywcvd.vhdlibraryieee;useieee.std—logic—IJ64.all;useieee.std—logic_unsigned.all;entityymywcvdisport(b,c:instd—logic—vector(4downto0):/*b,C为被乘数,乘数/rSt,clk:instd—logic;/rst为复位信号clk为步运算脉冲/a:bufferstd_logic—vector(5downto0):a,d为高位部分积和低何部分积/d:bufferstd—logic—vector(3downtoO):sign,en:outstd—logic);/sign为符号位,en为表示是否结束/end:architecturebehavofymywcvdis sharedvariablecd:integerrange0to5:5:signalbi:std—logic—vector(5downto0);sharedvariableai:std—logic—vector(5downtoO);beginbi&lt;:0&amp;'0&amp;b(3downto0);sign&lt;b(4)xorc(4):'process(clk,rst,c)/根据clk脉冲进行步运算的进程/ beginifrst='l'thencd:=5:en&lt;='0.:elsifrisingedge(clk)thenifcd=5thenai:=(others=&gt;0);d&lt;=c(3downto0);cd:=cd-1;en&lt;=.0':elsifcd/=0then82/?cd为乘数及被乘数的的位数,此值决定循环次数?/ /en初始化为O,en为I时表示乘法完成//?初始化部分积为0"/ifd(0)1'thenai:=ai+bi;/.部分积相;01:l*/endif;.d&lt;=ai(0)&amp;d(3downto1);/*d右移一位/ai:=ai(5)&amp;ai(5downto1);/*a右移一位/cd:=cd-l;elseen&lt;='i':endif;endif;a&lt;=ai:endprocess;endbehav;2.3用EDA软件平台及CPLD器件实现乘法器现在有许多EDA软件及相应的PLD器件,都可以提供数字电子的开发设计环境.以下以Lattice公司的ispEXPERTSYSTEM7.0软件及Lattice公司的一种6000门的复杂在系统可编程器件(CPLD)ispLSI1032为例来完成乘法器的设计过程.首先把VHDL源程序输入并调试正确后J{j软件系统提供的综合编译器进行编译综合,生成EDIF格式的网表文件再经适配产生可下载的JEDEC文件.最终通过电缆线把JEDEC文件下载剑ispLSl1032芯片中,然后使用与该芯片相连的电源,单脉冲,拨码开关输入,显示灯输出,就可实现乘法器的单步仿真.3结束语采用VHDL硬件描述语言进行电路设计,其特点是以软件工具为核心,通过这些软件完成程序设计,电路分析,纠错,验证,自动布局步线等各种测试【:作,最后通过综合器和适配器生成目标器件,从而实现电子设计的自动化设计,这种设计方法为组成原理实验的设计,实现带来新的生机.参考文献[1]王爱英《计算机组成与结构》[M]第二版北京:清华大学出版社,1995[2]陈雪松CVHDL入门与应用》[M]北京:人民邮电出版社,2000作者简介:李莉,女,1972年l1月出生,1994年毕业于吉林大学计算机系.83。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与工程学院课程设计报告题目全称:用硬件描述语言设计浮点乘法器(原码一位乘法)课程名称:计算机组成原理指导老师:职称:(注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。

序号排位为“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程序编译通过截图否则,重新调试,并重新执行如前操作。

相关文档
最新文档