收藏 分销(赏)

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

上传人:丰**** 文档编号:5309122 上传时间:2024-10-30 格式:DOC 页数:20 大小:2.53MB 下载积分:10 金币
下载 相关 举报
用硬件描述语言设计浮点乘法器(原码一位乘法)-课程设计.doc_第1页
第1页 / 共20页
用硬件描述语言设计浮点乘法器(原码一位乘法)-课程设计.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
计算机科学与工程学院 课程设计报告 题目全称: 用硬件描述语言设计浮点乘法器(原码一位乘法) 课程名称: 计算机组成原理 指导老师: 职称: 序号 学生姓名 学号 班号 成绩 1 2 3 4 5 6 7 8 9 10 (注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。序号排位为“1”的学生成绩最高,排位为“10”的学生成绩最低。) 指导老师评语: 封面不加页码 指导签字: 19 摘 要 硬件乘法器,其基础就是加法器结构,它已经是现代计算机中必不可少的一部分。其大致可分为定点乘法器和浮点乘法器。其中浮点数的格式较定点数格式复杂,硬件实现的成本较高,完成一次浮点四则运算的时间也比定点运算要长。但浮点数比定点数的表示范围更宽,有效精度更高,因此更适合科学与工程计算的需要。但要求计算精度较高时,往往采用浮点运算。浮点乘法器设计(原码一位乘法)模型就是基于“移位和相加”的算法,设浮点数A=2^AE·AM,B=2^BE·BM,则A×B=2^(AE+BE)·(AM×BM),即阶码相加,尾数相乘。其运算步骤可以简单的归为(1)检测能否简化操作,并置结果数符(2)阶码相加(3)尾数相乘(4)乘积规格化等。 本论文第一章讲述了该课程设计的研究背景及意义及其理论依据和实验基础、课题的难点、重点、核心问题及方向。第二章重点讲述了原码一位乘法实现浮点乘法器设计的原理、操作流程及课程设计实验数据和结果 关键词:浮点乘法器、原码一位乘法、阶码、尾数 以上的换行目的是想让“目录”与第1章、摘要分离开,但是一般做法不建议如此,建议采用插入“分页符”的方式实现:分页符(组合键Ctrl + Entern)。插入分页符后,以后论文排版时内容删减、增加都不会改变分页的格式。(章节与章节之间都需要分页排版,均参照此法加入分页符实现分页排版) 目录 第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标准的浮点乘法器与定点乘法器相比,不仅要进行阶码运算,而且其尾数部分的运算也有所不同,IEEE单精度浮点乘法的尾数部分运算,是将两个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研究目的和意义 由于浮点数表示区间大、适用范围广、开发简单,从而使得浮点数运算成为数字信号处理中最基本的运算。但因为现行EDA软件没有提供浮点运算功能,使其在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 业务流程 这些空行不需要。 开始 分别输入两个乘数 是否有乘数等于0? Yes No 符号位异或处理 阶码相加 乘积为0 尾数相乘 乘积规格化 在LED灯显示结果 结束 关于此流程图问题较多。1.正文缺少文字描述,一般技术文档不放一个干图给读者的,可读性不好,最好在正文中将流程用通顺移动的语言描述一遍;2.没有图号、图题(如图2-1 *****流程图);3图要居中排版(包括图号、图题)。 2.3其他需求 在实验室的硬件上,我们只能实现阶码和尾数都是4位的浮点数的乘法,不能实现更高位的浮点数乘法。 乘积的规格化不是用程序本身来实现,而是用8位扩展自动实现。 用分页符替换空行。 第3章 课题的设计与实现 3.1课程设计的理论基础: 本课题选用原码一位乘法算法原理来实现两个浮点数相乘的尾数相乘。其原理如下:用A寄存器存放部分积累加和,其初始值为0;B寄存器存放被乘数X,C寄存器存放乘数Y。乘法运算结束时,A寄存器中存放乘积的高位部分,C寄存器存放乘积的低位部分加上一句话:“原码一位乘法算法的流程如图3-1所示。”,此图前后的图的说明都需加次说明。请通篇自查、修改。 。 图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课程设计的框架和流程图 开始 分别输入被乘数A、乘数B的正负号signA、signB,阶码exA、exB,尾数mA、mB,并将mA、mB的值分别赋给tempA、tempB。 mA或mB等于零吗? No 对signA、signB进行异或运算,结果为乘积的正负号sign_out。 Yes 初始化尾数结果m_out为0,并设置计数器SIZE(SIZE的值是乘数的二进制数的位数,即为4)。 乘积的正负号sign_out、阶码ex_out,尾数m_out全部为0 乘数tempB尾数的最低位是0吗? Yes No 乘积的尾数m_out = m_out + tempA。 被乘数tempA左移一位, 乘数tempB右移一位 No 乘数移位的总次数大于SIZE吗? Yes 在LED灯区显示乘积 结束 图3-2 原码一位浮点数乘法器设计框图 关于图3-2除了有图2-1的错误之外,又犯了一个新错误,就是分页排版了。这幅图不大,一页放得下,就在一页排版,不要分页排版,分页排版有专门的规范,相当麻烦,尽量避免。 3.4课程设计的实现 3.4.1创建工程 *双击桌面“Xilinx ISE 7.1”; *选择“File”àNew Project”; 填写“工程项目名”和文件存放路径 *点击“下一步”; 选择芯片类型、封装等信息; 选择综合工具(Synthesis Tool) 这段文字可读性很差,当成作文润色一下。其中的“*”是干什么的?如果是列表的话,最好用1、2、3….来替代。(下同) 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; initial begin tempA=0; tempB=0; end always @(signA or mA or exA or signB or mB or exB) begin if((mA == 0)||(mB == 0)) begin sign_out = 0; m_out = 0; ex_out = 0; end else begin sign_out = signA^signB; ex_out = exA + exB; tempA = mA; tempB = mB; m_out = 0; repeat(SIZE) begin if(tempB[0]) m_out = m_out + tempA; tempA = tempA << 1; tempB = tempB >> 1; end end end endmodule 3.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 程序编译通过截图 否则,重新调试,并重新执行如前操作。 连接好线路如3图 -5和3图 -6 图3-5 实验接线图1 图3-6 实验接线图2 3.4.6 下载 在“Process View”框中,点击“Configure Device(Impact)”; 选“Boundary-Scan Mode” 选“Automatically connect to cable….”(注意此时必须将实验目标板通过并口与PC相连,同时打开实验箱的电源!),可见屏上显示图3-7 就是几句话,没有必要分段。注意句子之间的标点。 图3-7 实验目标板和pc连通 居中排版。(文中所有图都没居中排版) 3. 4.7 开始测试 开关(开关向上为开“1”,向下为关“0”),各自输入如下浮点数,并依次得到图3-8、3图 -9、3图 -10、3图 -11如下此句不通顺。请修改。 缺表号、表题:(表3-1 ***表)。表号、表题注意和图号、图题区分开。表号、表题要在表上方居中,别问为什么,国际惯例。 mA exA mB exB 第一次 -0.1101 0111 0.0000 1010 第二次 0.1001 0110 0.1001 0101 第三次 -0.1101 1010 0.1011 0100 第四次 0.0011 0010 0.0010 0101 图3-8 第一次测试结果 图3-9 第二次测试结果 图3-10第三次测试结果 图3-11 第四次测试结果 结果分析:a.图3-8说明了当至少有一个乘数为0时,结果一定为0。 b.图3-9、3-10、3-11都说明本设计中的浮点乘法器成功地计算了所输入的浮点数的乘法运算,其中要特别说明的是:图3-9和3-10是因为阶码相加产生了溢出,所以代表溢出位的即左上角的灯显示灯亮。而图3-10显示异号尾数相乘,结果为负,所以代表尾数结果的符号位即左下角的灯显示灯亮。 3.5结论 在原码一位乘算法的理论基础和xilinx ISE集成开发环境双重结合下,我们从硬件语言的编写、调试到测试通过得到预期结果,顺利完成了浮点乘法器的设计。 我们的创新点,在于输出了阶码相加的进位,尾数相乘的结果符号位输出,以及乘法结果的扩展输出。 还需要改进的地方,在于实现乘法和加法过程中溢出位的进一步处理。 用分页符替换。 第4章 结束语 在大二即将结束时,我们迎来了计算机组成原理课程设计。这次课程设计的内容是用硬件设计语言设计浮点乘法器(原码一位乘法),为了能成功出色的完成,我们课程小组对原码一位乘法做了深入的钻研,又对verilog硬件编程语言进行了进一步的学习,我们用两个加法器,分别实现阶码相加和尾数相乘,并最终调试成功。 在整个课程设计的过程中,尽管困难重重,但是在组长同学的主持下,各组员同心协力,认真对待,终于成功完成了本次课程设计。从中,我们不仅巩固了我们的专业知识,更明白了团队精神的重要意义! 用分页符替换。 用分页符替换。 致 谢 在三位老师耐心的指点下,我们组克服了重重困难,终于完成了计算机组成原理的课程设计。通过本次课程设计,不但巩固了我们的专业知识,更重要的是接触了很多计算机组成原理相关的文献,开阔了我们的视野,为我们以后的学习打下坚实的基础。 再次感谢三位认真指导我们的老师。 参考文献 [1]裘雪红.毕业设计宝典.西安:西安电子科技大学出版社,2008:15-20 [2]罗克露,单立平,刘辉,等.计算机组成原理.北京:电子工业出版社,2009:125 [3]罗克露,单立平,刘辉,俸志刚.计算机组成原理.北京:电子工业出版社,2009:110-112
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服