当前位置:文档之家› 单精度浮点乘法器的FPGA实现

单精度浮点乘法器的FPGA实现

单精度浮点乘法器的FPGA实现
单精度浮点乘法器的FPGA实现

32位单精度浮点乘法器的FPGA实现

摘要: 采用Verilog HDL语言, 在FPGA上实现了32位单精度浮点乘法器的设计, 通过采用改进型Booth编码,和Wallace 树结构, 提高了乘法器的速度。本文使用Altera Quartus II 4.1仿真软件, 采用的器件是EPF10K100EQ 240 -1, 对乘法器进行了波形仿真, 并采用0.5CMOS工艺进行逻辑综...

摘要: 采用Verilog HDL语言, 在FPGA上实现了32位单精度浮点乘法器的设计, 通过采用改进型Booth编码,和Wallace 树结构, 提高了乘法器的速度。本文使用Altera Quartus II 4.1仿真软件, 采用的器件是EPF10K100EQ 240 -1, 对乘法器进行了波形仿真, 并采用0.5CMOS工艺进行逻辑综合。

关键词: 浮点乘法器; Boo th 算法; W allace 树; 波形仿真

随着计算机和信息技术的快速发展, 人们对微处理器的性能要求越来越高。乘法器完成一次乘法操作的周期基本上决定了微处理器的主频, 因此高性能的乘法器是现代微处理器中的重要部件。本文介绍了32 位浮点阵列乘法器的设计, 采用了改进的Booth 编码, 和Wallace树结构, 在减少部分积的同时, 使系统具有高速度, 低功耗的特点, 并且结构规则, 易于VLSI的实现。

1 乘法计算公式

32 位乘法器的逻辑设计可分为: Booth编码与部分积的产生, 保留进位加法器的逻辑, 乘法阵列的结构。

1.1 Booth编码与部分积的逻辑设计

尾数的乘法部分,本文采用的是基4 Booth编码方式, 如表1。首先规定A m和B m 表示数据A和B的实际尾数,P 表示尾数的乘积, PP n表示尾数的部分积。浮点32 位数, 尾数是带隐含位1 的规格化数, 即: A m=1×a22a21….a0和B m = 1

×b22b21.…b0, 由于尾数全由原码表示,相当于无符号数相乘, 24 × 24 位尾数乘积P 的公式为:

1.2 乘法器的阵列结构

本文采用的是3 -2 加法器, 输入3 个1 位数据: a, b,ci; 输出2 个1 位数据: s, Co。运算式如下:

其逻辑表达式如下:

当每个部分积PP n产生之后, 将他们相加便得到每个乘法操作的结果。相加的步骤有很多, 可采用的结构和加法器的种类也很多。比如串行累加:

而Wallace 树的乘法阵列如下:

加法器之间的连接关系如图1, 图2 所示, 或者从公式(7) 与(8) 中可以看出, 图1中串行累加的方法延迟为11个3-2 加法器的延迟, 而图2中, Wallace树延迟为5个3 -2加法器的延迟。图1的延迟比图2的延迟大。

图1 串行累

加图2 Wallace 树

2 32 位浮点乘法器的设计

本文是针对IEEE754 单精度浮点数据格式进行的浮点乘法器设计。IEEE754 单精度浮点格为32位, 如图3 所示。设A ,B均为单精度IEEE754格式, 他们的符号位, 有效数的偏移码和尾数部分分别用S , E 和M来表示。双精度和单精度采用的运算规则是一致的, 只是双精度的位长增加了一倍, 双精度是64位, 其中尾数52位, 指数11位, 1位符号位。所以提高了精度范围。

图3 32 位浮点数据格式

32 位浮点数据格式: A = (- 1) S×M ×2E-127。其中乘法器运算操作分4步进行。

(1) 确定结果的符号, 对A 和B 的符号位做异或操作。

(2) 计算阶码, 两数相乘, 结果的阶码是两数的阶码相加, 由于A 和B 都是偏移码, 因此需要从中减去偏移码值127,得到A 和B 的实际阶码, 然后相加, 得到的是结果的阶码, 再把他加上127, 变成偏移码。

(3) 尾数相乘,A 和B 的实际尾数分别为24位数, 即1×M a 和1×M b, 最高位1是隐藏位, 浮点数据格式只显示后23位, 所以尾数相乘结果应为一个48位的数据。

(4) 尾数规格化, 需要把尾数相乘的48位结果数据变成24 位的数据, 分3步进行:

① 如果乘积的整数位为01, 则尾数已经是规格化了;如果乘积的整数位为10, 11, 则需要把尾数右移1位, 同时把结果阶码加1。

② 对尾数进行舍入操作, 使尾数为24位, 包括整数的隐藏位。

③ 把结果数据处理为32位符合IEEE浮点数标准的结果。包括1位符号位, 8位结果阶码位, 结果23尾数位。

3 32 位浮点乘法器的实现与仿真

图4 列出本设计的FPGA 仿真结果。图中data1是被乘数, data2是乘数, reset 是清零信号, 高有效。start 是开始信号, 也是高有效。dataout10是两个浮点32 位数相乘, 进行规格化以后的结果, 是一个32 位数。Product 是24位尾数相乘的结果, 是一个48位数。

图4 32 位浮点乘法器的仿真结果

整个设计采用了VHDL和Verilog HDL语言进行结构描述, 如果采用的是上华0.5 的标准单元库, 并用Synopsys DC 进行逻辑综合, 其结果是完成一次32位浮点乘法的时间为30ns, 如果采用全定制进行后端版图布局布线, 乘法器性能将更加优越。

4 结语

本文给出了32 位浮点乘法器的设计, 浮点算法具有高精度性以及较宽的运算

范围, 使得乘法的设计更能够满足工程和科学计算的要求, 电路的设计、模拟和实现均采用Altera Quartus II 4.1开发工具。采用的器件EPF10K100EQ 240-1, 逻辑单元是1914个, PIN的数量是147,本设计采用了一系列的算法和结构, 如采用Booth编码的方法和Wallace树的结构, 使得系统具有高速度特点, 并且易于ASIC的后端版图实现。

位单精度浮点数的IEEE表示法

32位单精度浮点数的IEEE表示法 float 共计32位(4字节) 31位是符号位,1表示该数为负,0反之 30~23位,一共8位是指数位(-128~127) 22~ 0位,一共23位是尾数位,尾数的编码一般是原码和补码 IEEE标准从逻辑上用三元组{S,E,M}表示一个数N,如下图所示: n,s,e,m分别为N,S,E,M对应的实际数值,而N,S,E,M仅仅是一串二进制位。其中, S(sign)表示N的符号位。对应值s满足:n>0时,s=0; n<0时,s=1。E(exponent)表示N的指数位,位于S和M之间的若干位。对应值e值也可正可负。 M(mantissa)表示N的尾数位,恰好,它位于N末尾。M也叫有效数字位(sinificand)、系数位(coefficient), 甚至被称作“小数”。

IEEE标准754规定了三种浮点数格式:单精度、双精度、扩展精度。前两者正好对应C语言里头的float、double或者FORTRAN里头的real、double精度类型。限于篇幅,本文仅介绍单精度、双精度浮点格式。★单精度:N共32位,其中S占1位,E占8位,M占23位。 ★双精度:N共64位,其中S占1位,E占11位,M占52位。 值得注意的是,M虽然是23位或者52位,但它们只是表示小数点之后的二进制位数,也就是说,假定 M为“010110011...”, 在二进制数值上其实是“.010110011...”。而事实上,标准规定小数点左边还有一个隐含位,这个隐含位通常,哦不,应该说绝大多数情况下是1,那什么情况下是0呢?答案是N 对应的n非常小的时候,比如小于 2^(-126)(32位单精度浮点数)。不要困惑怎么计算出来的,看到后面你就会明白。总之,隐含位算是赚来了一位精度,于是M对应的m最后结果可能是"m=1.010110011...”或者“m=0.010110011...” 计算e、m 首先将提到令初学者头疼的“规格化(normalized)”、“非规格化(denormalized)”。掌握它以后你会发现一切都很优雅,更美妙的是,规格化、 非规格化本身的概念几乎不怎么重要。请牢记这句话:规格化与否全看指数E! 下面分三种情况讨论E,并分别计算e和m: 1、规格化:当E的二进制位不全为0,也不全为1时,N为规格化形式。此时e被解释为表示偏置(biased)形式的整数,e值计算公式如下图所示: 上图中,|E|表示E的二进制序列表示的整数值,例如E为"10000100",则 |E|=132,e=132-127=5 。 k则表示E的位数,对单精度来说,k=8,则bias=127,对双精度来说,k=11,则bias=1023。 此时m的计算公式如下图所示: 标准规定此时小数点左侧的隐含位为1,那么m=|1.M|。如M="101",则 |1.M|=|1.101|=1.625,即 m=1.625 2、非规格化:当E的二进制位全部为0时,N为非规格化形式。此时e,m 的计算都非常简单。

乘法器

课程设计任务书 题目基于FPGA的6*6串行乘法器设计起讫日期 学生姓名专业班级通信工程 所在院系电气信息学院 指导教师职称 所在单位通信工程教研室

任务及要求: 1.设计内容和要求(包括设计内容、主要指标与技术参数) 设计内容:设计一个6*6串行乘法器 设计要求: (1)设计语言为Verilog,仿真软件为ISE自带仿真软件iSIM; (2)该设计不要求下载到硬件开发板上,只需给出仿真波形图,但要求能够从波形图 中看出实现了乘法运算 2.原始依据 本设计要求学生应用Xilinx FPGA设计一个6*6串行乘法器,通过设计能够让学生进一步掌握FPGA的基本开发流程,同时提高时序设计能力,学生已学习过EDA课程,掌握硬件描述语言基本知识,通过本次设计可进一步提高学生的动手能力,加强理论联系实际的能力。 3.进度计划 3.4-3.8 查阅相关资料,掌握FPGA基本知识。 3.11-3.15 应用Verilog语言进行程序开发,设计调试。 3.18-3.22 调试验收,撰写专业课程实践训练报告。 4.参考文献 [1] 夏宇闻. Verilog数字系统设计教程[M]. 北京:北京航空航天大学出版社,2008. [2] Snair Palnitkar(美). VerilogHDL数字设计与综合. 夏宇闻等译.(第二版)[M]. 北京:电子工业出版社,2009. [3] Xilinx. UG230 [Z/OL]. https://www.doczj.com/doc/007246628.html, 指导教师签字: 教研室主任签字:

目录 摘要: (4) 关键词 (4) 一:FPGA (4) 1.1名称 (4) 1.2背景 (4) 1.3工作原理 (4) 1.4芯片结构 (5) 二:Verilog HDL (5) 2.1verilog hdl名称 (5) 2.2verilog hdl用途 (5) 2.3 Ve r i l o g硬件描述语言的主要能力 (6) 三:Spartan3E (7) 四:乘法器 (8) 4.1什么是乘法器 (8) 4.2实现乘法器的方法 (8) 4.3 6*6串行乘法器的设计思路 (9) 4.4 6*6乘法器程序代码 (9) 4.5 6*6乘法器设计仿真图 (11) 4.6结果分析 (12) 四:总结 (12) 参考文献 (12)

单精度浮点数与机器精度解析

单精度浮点数与机器精度解析 一、单精度浮点数 先来简单了解一下浮点数在计算机中的存储方式。根据IEEE 754标准,单精度浮点数格式如下(所有位取0): 各部分解释 单精度浮点数有32个二进制位,左侧是高位,右侧是低位。最高位被指定为符号位,0代表正数,1代表负数。指数部分将是2的幂次,其编码值(即上表指数部分对应的八个二进制位)规定为指数的实际值加上偏移值2^7-1=127,这是为了避免负数,将[-127, 128]映射到[0, 255],这样指数部分编码就可以简单地编排为[00000000, 11111111]。例如指数部分为00001000,十进制为8。那么其所代表的实际指数是8-127=-119,即要乘上2-119。最后23位尾数是不包含整数位的实际有效小数位。规约数的整数位是1,非规约数的整数位是0。 规约形式的浮点数与非规约形式的浮点数 指数部分的编码值在[1, 2e-2]内,且尾数部分的整数位是1,这样的浮点数被称为规约形式的浮点数。 指数部分的编码值为0,尾数非零,这样的浮点数被称为非规约形式的浮点数。 规约浮点数的尾数∈[1, 2),而非规约浮点数的尾数∈(0, 1)。需要注意,非规约数指数编码为00000000,但指数实际值是-126,而非-127。非规约浮点数被IEEE 754-1985标准采用是因为它的渐进式下溢出,而规约浮点数将导致突然式下溢出,具体原理不再展开。 实际计算 设符号位为s。sign(s)确定正负:sign(0)=1,sign(1)=-1;指数部分为e;尾数部分为f。用(N)2表示二进制数N。 规约形式:sign(s)*2e-127*(1.f)2 非规约形式:sign(s)*2-126*(0.f)2 特殊值和极值

单精度浮点乘法器的FPGA实现

32位单精度浮点乘法器的FPGA实现 摘要: 采用Verilog HDL语言, 在FPGA上实现了32位单精度浮点乘法器的设计, 通过采用改进型Booth编码,和Wallace 树结构, 提高了乘法器的速度。本文使用Altera Quartus II 4.1仿真软件, 采用的器件是EPF10K100EQ 240 -1, 对乘法器进行了波形仿真, 并采用0.5CMOS工艺进行逻辑综... 摘要: 采用Verilog HDL语言, 在FPGA上实现了32位单精度浮点乘法器的设计, 通过采用改进型Booth编码,和Wallace 树结构, 提高了乘法器的速度。本文使用Altera Quartus II 4.1仿真软件, 采用的器件是EPF10K100EQ 240 -1, 对乘法器进行了波形仿真, 并采用0.5CMOS工艺进行逻辑综合。 关键词: 浮点乘法器; Boo th 算法; W allace 树; 波形仿真 随着计算机和信息技术的快速发展, 人们对微处理器的性能要求越来越高。乘法器完成一次乘法操作的周期基本上决定了微处理器的主频, 因此高性能的乘法器是现代微处理器中的重要部件。本文介绍了32 位浮点阵列乘法器的设计, 采用了改进的Booth 编码, 和Wallace树结构, 在减少部分积的同时, 使系统具有高速度, 低功耗的特点, 并且结构规则, 易于VLSI的实现。 1 乘法计算公式 32 位乘法器的逻辑设计可分为: Booth编码与部分积的产生, 保留进位加法器的逻辑, 乘法阵列的结构。 1.1 Booth编码与部分积的逻辑设计 尾数的乘法部分,本文采用的是基4 Booth编码方式, 如表1。首先规定A m和B m 表示数据A和B的实际尾数,P 表示尾数的乘积, PP n表示尾数的部分积。浮点32 位数, 尾数是带隐含位1 的规格化数, 即: A m=1×a22a21….a0和B m = 1 ×b22b21.…b0, 由于尾数全由原码表示,相当于无符号数相乘, 24 × 24 位尾数乘积P 的公式为:

各种乘法器比较

各种乘法器比较 韦其敏08321050 引言:乘法器频繁地使用在数字信号处理和数字通信的各种算法中,并往往影响着整个系统的运行速度。如何实现快速高效的乘法器关系着整个系统的运算速度和资源效率。本位用如下算法实现乘法运算:并行运算、移位相加、查找表、加法树。并行运算是纯组合逻辑实现乘法器,完全由逻辑门实现;移位相加乘法器将乘法变为加法,通过逐步移位相加实现;查找表乘法器将乘积结果存储于存储器中,将操作数作为地址访问存储器,得到的输出数据就是乘法运算结果;加法树乘法器结合移位相加乘法器和查找表乘法器的优点,增加了芯片耗用,提高运算速度。 注:笔者使用综合软件为Quartus II 9.1,选用器件为EP2C70,选用ModelSim SE 6.1b进行仿真,对于其他的软硬件环境,需视具体情况做对应修改。 汇总的比较: 详细实现过程: 1.并行乘法器 源代码: module Mult1(outcome,a,b); parameter MSB=8; input [MSB:1] a,b; output [2*MSB:1] outcome; assign outcome=a*b; endmodule

资源耗用情况: ModelSim测试激励文件源代码:`timescale 10ns/1ns module Mult1_test(); reg [8:1] a,b; wire [16:1] outcome; Mult1 u1(outcome,a,b); parameter delay=2; initial begin a=1; b=0; end initial forever begin #delay a=a+1; b=b+1; if(outcome>=16'h0FFF) $stop;

单精度浮点数的转换和解析

1 单精度浮点数的转换和解析 工业现场通信经常遇到浮点数解析的问题,如果需要自己模拟数据而又不懂浮点数解析的话会很麻烦!很久以前根据modbus 报文格式分析得到的,供大家参考。 浮点数保存的字节格式如下: 地址 +0 +1 +2 +3 内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里 S 代表符号位,1是负,0是正 E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。 M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了 较高的有效位数,提高了精度。 零是一个特定值,幂是0 尾数也是0。 浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下: 地址 +0 +1 +2 +3 内容0xC1 0x48 0x00 0x00 浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转 换。 浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表 所列的那样分开,例如: 地址 +0 +1 +2 +3 格式 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 二进制 11000001 01001000 00000000 00000000 十六进制 C1 48 00 00 从这个例子可以得到下面的信息: 符号位是1 表示一个负数 幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。 尾数是后面的二进制数10010000000000000000000

基于标准单元库扩展的快速乘法器设计

收稿日期:2011-09-20;修回日期:2011-11-04 基金项目:国家科技重大专项基金资助项目(2009ZX01030-001-002). 作者简介:曾宪恺(1987-),男,湖北孝感人,硕士,主要研究方向为超大规模集成电路设计自动化(zengxk@vlsi.zju.edu.cn );郑丹丹(1981-),女,博士,主要研究方向为超深亚微米集成电路SOC 设计;严晓浪(1947-),男,教授,主要研究方向为超大规模集成电路设计、VLSI 设计自动化;吕冬明(1981-),男,博士,主要研究方向为集成电路CAD 研究;葛海通(1972-),男,博士,主要研究方向为嵌入式系统设计. 基于标准单元库扩展的快速乘法器设计 * 曾宪恺,郑丹丹,严晓浪,吕冬明,葛海通 (浙江大学超大规模集成电路设计研究所,杭州310027) 摘 要:设计并实现17?17bit 带符号数字乘法器。为了提高乘法器的性能,采用改进的Booth 编码算法、 Wal-lace 树型结构以及基于标准单元库扩展的设计方法。该方法使用逻辑功效模型分析乘法器的关键路径,通过构造驱动能力更为完备的单元以实现关键路径中每一级门功效相等,从而得到最短路径延时。将TSMC 90nm 标准单元库扩展得到扩展单元库, 使用两个单元库版图分别实现数字乘法器,基于扩展单元库实现的乘法器速度提升10.87%。实验结果表明,基于标准单元库扩展的半定制设计方法可以有效提升电路的性能,这种方法尤其适用于电路负载过大的情况。 关键词:乘法器;标准单元库扩展;改进的Booth 编码算法;Wallace 树;逻辑功效中图分类号:TN47 文献标志码:A 文章编号:1001-3695(2012)05-1778-03 doi :10.3969/j.issn.1001-3695.2012.05.047 Design of high-speed multiplier based on standard cell library extension ZENG Xian-kai ,ZHENG Dan-dan ,YAN Xiao-lang ,LV Dong-ming ,GE Hai-tong (Institute of VLSI Design ,Zhejiang University ,Hangzhou 310027,China ) Abstract :This paper proposed a 17?17bit signed digital multiplier.To improve the performance ,the multiplier used modi-fied Booth ’s recoding algorithm ,a Wallace tree structure and design method based on standard cell library extension.It ana-lyzed critical path using logical effort model ,and by constructing cells with different driving capabilities , it implemented equal logical effort in each stage to achieve minimum path delay.Based on TSMC 90nm standard cell library , generated an extended cell library ,and implemented the layouts of multiplier respectively.Compared to standard cell library ,the multiplier imple-mented with extended cell library achieved a performance improvement of 10.87%.Experimental results show that the semi-custom design methodology based on standard cell library extension can improve circuit performance effectively ,which is espe-cially appropriate for designs with large loads. Key words :multiplier ;standard cell library extension ;modified Booth ’s recoding algorithm ;Wallace tree ;logical effort 0引言 乘法器是嵌入式CPU 的重要部件,其运算速度决定了逻 辑运算单元的工作频率,因此高性能乘法器的设计仍然被关注 [1,2] 。同时,市场的需求加速了产品的上市进程,从而要求 设计者尽量缩短设计时间。为了兼顾乘法器的性能和设计时间, 通常使用基于标准单元库的半定制设计方法。但该方法受限于库中标准单元有限的驱动能力,无法实现最短路径延时。为此,本文提出基于标准单元库扩展的乘法器设计方法,消除了传统方法因关键路径优化不足对乘法器性能的影响。基于TSMC 90nm 工艺标准单元库扩展,设计并实现了17?17bit 乘法器模块。该乘法器支持带符号二进制乘法运算, 最差情况下(工作电压0.9V ,温度125℃)工作频率为346MHz 。设计过程中,使用EDA 工具进行了速度优先的逻辑综合以及布局布线;在关键路径的处理中,采用了基于逻辑功效的优化方法。 1乘法器 二进制乘法器实现了二进制数的乘法运算,它将两个二进 制数X 和Y 作为输入,将乘法运算的积Z 作为输出。设被乘数为m 位,记为X m -1X m -2…X 0,乘数为n 位,记为Y n -1Y n -2…Y 0,则积为m +n 位,记为Z m +n -1Z m +n -2…Z 0。将m 位被乘数X 与n 位乘数Y 的每一位进行与运算,可以得到n 项位数为m 的部分积, 用加法器阵列将n 项部分积相加,得到积Z 。乘法器的具体实现分为部分积生成、部分积压缩、最终加法三个步骤。通常,使用与门来产生部分积,用加法器阵列对部分积压缩来构成阵列乘法器。这种架构算法简单,易于实现,并且能够实现规则的版图结构,但是由于部分积个数较多,压缩时间较长,无法得到快速的乘法器。使用改进的Booth 编码算法[3,4] 有效地减少了部分积的个数,使用Wallace 树型结 构 [5] 缩短部分积压缩的时间,其算法较复杂,并且版图结构不 规则, 但可以有效地提升乘法器的性能。第29卷第5期2012年5月计算机应用研究 Application Research of Computers Vol.29No.5May 2012

单精度浮点乘法器

EDA/SOPC课程设计报告题目:单精度浮点乘法器 姓名:张恺 学号:120260230 同组人:刘龙 指导教师:王晨旭 成绩:

目录 目录................................................................................................................................................... II 第1章课程设计的要求 . (1) 1.1 课程设计的目的 (1) 1.2 课程设计的条件 (1) 1.3 课程设计的要求 (1) 第2章课程设计的内容 (2) 2.1 设计思路 (2) 2.1.1 符合IEEE-754标准的单精度浮点乘法器规格 (2) 2.1.2 操作数类型 (2) 2.1.3 运算规则 (3) 2.1.4 逻辑门级框图 (3) 2.2 软件流程图 (4) 2.3 HDL代码阐述 (6) 2.4 Modelsim验证 (10) 2.4.1 验证代码 (10) 2.4.2 验证波形 (12) 2.5 硬件调试 (12) 2.5.1 基本说明 (12) 2.5.2 具体操作 (13) 2.6 虚拟机下的DC综合 (17) 2.7 虚拟机下的SDF反标仿真 (19) 第3章课程设计的心得 (20)

第1章课程设计的要求 1.1 课程设计的目的 ●通过课堂所讲授的内容以及私下查阅资料,自主完成课程设计的题目,提高编 程能力,培养用计算机解决实际问题的能力,积累调试程序的经验,更好的消化 老师课堂所讲授的内容,对Verilog这种语言也有了更深的了解; ●掌握较大工程的基本开发技能; ●培养综合运用Modelsim,ISE,Debussy工具进行硬件开发的能力; ●培养数字系统设计的基本能力; ●通过课设积累起的编程以及硬件的能力对于今后的考研抑或是找工作都有非常实 际性的效果; 1.2 课程设计的条件 ●设计条件1:gVim编辑器以及Mentor公司开发的FPGA仿真软件Modelsim; ●设计条件2:Xilinx公司开发的硬件设计工具ISE以及Xilinx公司的开发板; ●设计条件3:虚拟机环境下的Linux系统具有的Design Compiler工具; ●设计条件4:虚拟机环境下的Linux系统具有的SDF工具以及Debussy工具; 1.3 课程设计的要求 ●设计要求1:能够在Modelsim工具下正确的完成程序的编译以及成功的实现波 形的仿真; ●设计要求2:能够在ISE工具下正确的完成程序的综合以及合理的绑定管脚并成 功的将程序下载到开发板里,在开发板中实现程序的功能; ●设计要求3:能够在虚拟机的Linux系统下采用Design Compiler完成逻辑综 合,并且评估其时序面积; ●设计要求4:能够在虚拟机的Linux系统下完成SDF反标仿真;

定点原码两位乘法器的设计

沈阳航空航天大学 课程设计报告 课程设计名称:计算机组成原理课程设计 课程设计题目:定点原码二位乘法器的设计 目录 第1章总体设计方案 (1) 1.1设计原理 (1) 1.2设计思路 (3) 1.3设计环境 (5) 第2章功能模块的设计与实现 (6) 2.1总体的设计与实现 (6) 2.1.1总体方案的逻辑图 (6) 2.2基本功能模块的组成及工作原理 (8) 2.2.1被乘数模块的组成及工作原理 (8) 2.2.2乘数模块的组成及工作原理 (8) 2.2.3选择模块的组成及工作原理 (9) 2.2.4 移位模块的工作原理 (9)

第3章程序仿真与测试 (10) 3.1程序仿真 (10) 3.2仿真测试及结果分析 (10) 参考文献 (12) 附录(汇编程序) (13)

第1章总体设计方案 1.1 设计原理 定点原码两位乘与定点原码一位乘一样,符号位的运算和数值部分是分开进行的,但为了提高运算速度,所以采用了原码两位乘,因为原码两位乘是用乘数的末两位的状态来决定新的部分积如何形成,可提高运算速度。乘数和被乘数都用原码表示。 两位乘数有四种可能的组合,每种组合对应的操作如表1.1所示 表1.1 乘数组合与部分积关系对照表 乘数y n-1y n 新的部分积 00 新部分积等于原部分积右移两位 01 新部分积等于原部分积加被乘数后右移两位 10 新部分积等于原部分积加2倍被乘数后右移两位 11 新部分积等于原部分积加3倍被乘数后右移两位 与一位乘法比较,多出了+2X和3X两种情况。把X左移1位即得到2X,在机器内通常采用左斜送一位来实现。可是+3X一般不能一次完成,如分成两次进行,又降低了计算速度。解决问题的办法是:以(4X-X)来代替3X运算,在本次运算中只执行-X,而+4X则归并到下一步执行,此时部分积以右移了两位,上一步欠下的+4X已变成+X,在实际线路中要用一个触发器C来记录是否欠下+4X,若是,则C变为1。因此实际操作用Yi-1,Yi,C三位来控制,运算规则如下所示: 表1.2 判断值对应的操作以及C值的变化情况 组合值Yi-1 Yi C 操作C值变化 0 0 0 0 部分积+0;右移两位C=0 1 0 0 1 部分积+x;右移两位C=0 1 0 1 0 部分积+x;右移两位C=0 2 0 1 1 部分积+2x;右移两位C=0 2 1 0 0 部分积+2x;右移两位C=0

浮点数表示方法与运算

在计算机系统的发展过程中,曾经提出过多种方法表达实数,典型的比如定点数。在定点数表达方式中,小数点位置固定,而计算机字长有限,所以定点数无法表达很大和很小的实数。最终,计算机科学发展出了表达范围更大的表达方式——浮点数,浮点数也是对实数的一种近似表达。 1.浮点数表达方式 我们知道任何一个R 进制数N 均可用下面的形式表示:N R =±S ×R ±e 其中,S—尾数,代表N 的有效数字; R—基值,通常取2、8、16;e—阶码,代表N 的小数点的实际位置(相当于数学中的指数)。 比如一个十进制数的浮点表达1.2345×102,其中1.2345为尾数,10为基数,2为阶码。一个二进制数的浮点表达0.001001×25,0.001001为尾数,2为基数,5为阶码;同时0.001001×25也可以表示成0.100100×23,0.100100为尾数,2为基数,3为阶码。浮点数就是利用阶码e 的变化达到浮动小数点的效果,从而灵活地表达更大范围的实数。 2.浮点数的规格化 一个数用浮点表示时,存在两个问题:一是如何尽可能多得保留有效数字;二是如何保证浮点表示的唯一。 对于数0.001001×25,可以表示成0.100100×23、0.00001001×27等等,所以对于同一个数,浮点有多种表示(也就是不能唯一表示)。另外,如果规定尾数的位数为6位,则0.00001001×27会丢掉有效数字,变成0.000010×27。因此在计算机中,浮点数通常采用规格化表示方法。 当浮点数的基数R 为2,即采用二进制数时,规格化尾数的定义为:1/2<=|S|<1。若尾数采用原码(1位符号位+n 位数值)表示,[S]原=S f S 1S 2S 3…S n (S f 为符号位的数符),则满足S 1=1的数称为规格化数。即当尾数的最高有效位S 1=1,[S]原=S f 1S 2S 3…S n ,表示该浮点数为规格化数。对0.001001×25进行规格化后,表示为0.100100×23。 3.浮点数的表示范围 求浮点数的表示范围,实质是求浮点数所能表示的最小负数、最大负数、最小正数和最大正数。

流水线乘法器

流水线乘法器 一般的快速乘法器通常采用逐位并行的迭代阵列结构,将每个操作数的N位都并行地提交给乘法器。但是一般对于FPGA来讲,进位的速度快于加法的速度,这种阵列结构并不是最优的。所以可以采用多级流水线的形式,将相邻的两个部分乘积结果再加到最终的输出乘积上,即排成一个二叉树形式的结构,这样对于N位乘法器需要log2(N)级来实现。一个8位乘法器,如图所示。 module mux_4(mul_a,mul_b,mul_out,clk,rst_n); parameter MUL_WIDTH = 4; parameter MUL_RESULT = 8; input [MUL_WIDTH-1:0] mul_a; input [MUL_WIDTH-1:0] mul_b; input clk; input rst_n; output [MUL_RESULT-1:0] mul_out; reg [MUL_RESULT-1:0] mul_out; reg [MUL_RESULT-1:0] stored0; reg [MUL_RESULT-1:0] stored1; reg [MUL_RESULT-1:0] stored2; reg [MUL_RESULT-1:0] stored3; reg [MUL_RESULT-1:0] add01; reg [MUL_RESULT-1:0] add23; always @(posedge clk or negedge rst_n) begin if(!rst_n) begin mul_out <= 8'b0000_0000;

stored0 <= 8'b0000_0000; stored1 <= 8'b0000_0000; stored2 <= 8'b0000_0000; stored3 <= 8'b0000_0000; add01 <= 8'b0000_0000; add23 <= 8'b0000_0000;; end else begin stored3 <= mul_b[3] ? {1'b0,mul_a,3'b0} : 8'b0; stored2 <= mul_b[2] ? {2'b0,mul_a,2'b0} : 8'b0; stored1 <= mul_b[1] ? {3'b0,mul_a,1'b0} : 8'b0; stored0 <= mul_b[0] ? {4'b0,mul_a} : 8'b0; add01 <= stored1 + stored0; add23 <= stored3 + stored2; mul_out <= add01 + add23; end end endmodule

单双精度浮点数的IEEE标准格式

单双精度浮点数的IEEE标准格式 目前大多数高级语言(包括C)都按照IEEE-754标准来规定浮点数的存储格式,IEEE754规定,单精度浮点数用4字节存储,双精度浮点数用 8字节存储,分为三个部分:符号位、阶和尾数。阶即指数,尾数即有效小数位数。单精度格式阶占8位,尾数占24位,符号位1位,双精度则为11为阶,53 位尾数和1位符号位,如下图所示: 31 30 23 22 0 63 62 52 51 0 细心的人会发现,单双精度各部分所占字节数量比实际存储格式都了一位,的确是这样,事实是,尾数部分包括了一位隐藏位,允许只存储23位就可以表示24位尾数,默认的1位是规格化浮点数的第一位,当规格化一个浮点数时,总是调整它使其值大于等于1而小于2,亦即个位总是为1。例如1100B,对其规格化的结果为1.1乘以2的三次方,但个位1并不存储在23位尾数部分内,这个1是默认位。 阶以移码的形式存储。对于单精度浮点数,偏移量为127(7FH),而双精度的偏移量为1023(3FFH)。存储浮点数的阶码之前,偏移量要先加到阶码上。前面例子中,阶为2的三次方,在单精度浮点数中,移码后的结果为127+3即130(82H),双精度为1026(402H)。 浮点数有两个例外。数0.0存储为全零。无限大数的阶码存储为全1,尾数部分全零。符号位指示正无穷或者负无穷。 下面举几个例子:

所有字节在内存中的排列顺序,intel的cpu按little endian顺序,motorola 的cpu按big endian顺序排列。

IEEE754标准的一个规格化 32位浮点数x的真值可表示为 x=(-1)^S*(1.M)*2^(E-127)e=E-127 31 30 23 0 |S | E |M | [例1]若浮点数x的754标准存储格式为(41360000)16,求其浮点数的十进制数值。 解:将16进制展开后,可得二进制数格式为 0 100,0001,0 011,0110,0000,0000,0000,0000 S E M 指数e=100,0001,0-01111111=00000011=(3)10 包含隐藏位1的尾数1.M=1.011,0110,0000,0000,0000,0000 于是有x=(-1)^0*(1.M)*2^(E-127) =+(1.011011)2*2^3 =(11.375)10 [例2]将数(20.59375)10转化为754标准的32位浮点数的二进制存储格式。解:首先分别将整数部分和小数部分转换成二进制 (20.59375)10=+(10100.10011)2 然后移动小数点使其在1,2位之间 10100.10011=1.010010011*2^4 e=4 于是得到:S=0,E=e+127=131,M=010010011 最后得到32位浮点数的二进制存储格式为 0 100,0001,1 010,0100,1100,0000,0000,0000 =(41A4C000)16 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。 任何数据在内存中都是以二进制(0或1)顺序存储的,每一个1或0被称为1位,而在 x86CPU上一个字节是8位。比如一个16位(2字节)的 short int型变量的值是1000,那么它的二进制表达就是:00000011 11101000。由于Intel CPU的架构原因,它是按字节倒序存储的,那么就因该是这样:11101000 00000011,这就是定点数1000在内存中的结构。 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格: ````````符号位阶码尾数长度 float 1 8 23 32 double 1 11 52 64

IEEE-754 32位单精度浮点数计算VB源码

VB IEEE-754 32位单精度浮点数计算源码 Option Explicit Private Function GetData(TmpHex As String) As String Dim TmpBin As String Dim TmpMi As Integer On Error Resume Next TmpBin = HexToBin(TmpHex) Label1.Caption = TmpBin & " 长度" & Len(TmpBin) & "位,第1位1为负数,0为正数" TmpMi = BinToOct(Mid(TmpBin, 2, 8)) - 127 GetData = Round(BinToOct("1." & Mid(TmpBin, 10, 23)) * (2 ^ TmpMi), 6) If Left(TmpBin, 1) = "1" Then GetData = "-" & GetData End Function Private Function HexToBin(TmpHex As String) As String Dim n As Integer Dim I As Integer Dim TmpBin As String On Error Resume Next For n = 1 To Len(TmpHex) I = Val("&H" & Mid(TmpHex, n, 1)) TmpBin = "" While I > 0 TmpBin = CStr(I Mod 2) & TmpBin I = I \ 2 Wend HexToBin = HexToBin & Right("0000" & TmpBin, 4) Next n End Function Private Function BinToOct(TmpBin As String) As Double Dim n As Integer Dim TmpS() As String On Error Resume Next TmpS = Split(TmpBin, ".") For n = 1 To Len(TmpS(0)) If Mid(TmpS(0), n, 1) = "1" Then BinToOct = BinToOct + (2 ^ (Len(TmpS(0)) - n)) Next n

十进制数和单精度浮点数的相互转换

将十进制数转换成浮点格式(real*4) [例1]: 十进制26.0转换成二进制 11010.0 规格化二进制数 1.10100*2^4 计算指数 4+127=131 符号位指数部分尾数部分 0 10000011 10100000000000000000000 以单精度(real*4)浮点格式存储该数0100 0001 1101 0000 0000 0000 0000 0000 0x41D0 0000 [例2]: 0.75 十进制0.75转换成二进制 0.11 规格化二进制数 1.1*2^-1 计算指数 -1+127=126 符号位指数部分尾数部分 0 01111110 10000000000000000000000 以单精度(real*4)浮点格式存储该数0011 1111 0100 0000 0000 0000 0000 0000 0x3F40 0000 [例3]: -2.5 十进制-2.5转换成二进制 -10.1 规格化二进制数 -1.01*2^1 计算指数 1+127=128 符号位指数部分尾数部分 1 10000000 01000000000000000000000 以单精度(real*4)浮点格式存储该数1100 0000 0010 0000 0000 0000 0000 0000 0xC020 0000

将浮点格式转换成十进制数 [例1]: 0x00280000(real*4) 转换成二进制 00000000001010000000000000000000 符号位指数部分(8位)尾数部分 0 00000000 01010000000000000000000 符号位=0;因指数部分=0,则:尾数部分M为m: 0.01010000000000000000000=0.3125 该浮点数的十进制为: (-1)^0*2^(-126)*0.3125 =3.6734198463196484624023016788195e-39 [例2]: 0xC04E000000000000(real*8) 转换成二进制1100000001001110000000000000000000000000000000000000000000000000 符号位指数部分(11位)尾数部分 1 10000000100 1110000000000000000000000000000000000000000000000000 符号位=1;指数=1028,因指数部分不为全'0'且不为全'1',则:尾数部分M为1+m:1.1110000000000000000000000000000000000000000000000000=1.875 该浮点数的十进制为: (-1)^1*2^(1028-1023)*1.875 =-60

浮点乘法器模板

EDA课程设计 课设名称:浮点乘法器 课设日期: 2014.6.23——7.xx 姓名:朱鹏勇 学号: 110250425 哈尔滨工业大学(威海) 信电学院电子信息工程 2014.6

一.所用软件与硬件介绍 1.1 软件介绍 QuartusII是Alter提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。Quartus II在21世纪初推出时,是Altera前一代FPGA/CPLD集成开发环境MAX+plus II的更新换代产品,其界面友好,使用便捷。Altera的Quartus II提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具。 1.2 硬件介绍 EDA试验箱 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。具有如下特点: 一、采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。 二、FPGA可做其它全定制或半定制ASIC电路的中试样片。 三、FPGA内部有丰富的触发器和I/O引脚。 四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 二。系统设计 2.1设计思想 2.1.1课题背景 随着计算机和信息技术的快速发展, 人们对微处理器的性能要求越来越高。运算器是数字信号处理过程中的重要基本组成部分,绝大多数FPGA都使用定点数据格式进行运算处理,对高精度、数据范围较大的运算无能为力,而浮点数比定点数的表述范围宽,有效精度高,更适合科学计算与工程计算,因此需要设计一种高速的浮点运算单元 2.1.2 设计目的 1、弄清浮点乘法器运算规则 2、设计标准的浮点IEEE574乘法器。 3、实现浮点乘法功能。 2.2工作原理及系统框图 1.浮点格式简介 常用的浮点格式为IEEE 754标准。该标准定义 了单精度浮点数、双精度浮点数和扩展双精度浮点数 3种格式,单精度为32位,双精度为64位,扩展双精 度为80位以上,位数越多则精度越高,表示范围也越 大。在通常的数字信号处理应用中,单精度浮点数即可满足处理精度要求。单精度浮点数如图所示。

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

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

相关主题
文本预览
相关文档 最新文档