当前位置:文档之家› 用硬件描述语言设计浮点乘法器(原码一位乘法) 课程设计

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

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

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

相关主题