科学网

 找回密码
  注册

tag 标签: 硬件设计

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

有感软件基地和软件园
accsys 2018-6-10 13:38
有感软件基地和软件园 姜咏江 现在到处还可以看到计算机软件基地和软件园之类的招牌。当初起这些名称的时候,一定认为非常非常 “高科技”,其实这体现了当初人们对计算机科学的肤浅认识。“软件什么都能做”,这是一些当时国内顶尖计算机专家的认识。这种肤浅的认识不仅使国人对计算机设计制造这个行业放弃了,更重要的是影响到了中华民族在世界上的生存能力。严厉地说,他们对中华民族的强盛负有不可推卸的罪责。如今我们如此受美国在计算机这个高科技领域欺负,跟这些所谓权威的肤浅认识直接相关。 不论现在的计算机软件做得如何复杂,其最基本的支撑仍然是硬件结构的设计。计算机硬件结构决定着计算机所能完成的任务。在计算机硬件结构确定的情况下,可以设计出适合任务需要的指令系统。一种结构的计算机虽然可以根据需要设计出不同的指令系统,然而不同设备结构的计算机,一定有不同的指令系统存在。从这一点不难体会到 “硬件决定软件”这个最基本的道理。不可否认,有些硬件的工作可以通过软件程序来完成,但其基础仍然要有相应的硬件设计来保证。 不可否认,计算机的指令集的设计有很高的艺术性和科学性。如此,有些人就想设计出一种包罗万象的计算机指令系统,这是一种幼稚。从计算机发展的角度来看,这是徒劳的工作。计算机功能在不断地扩展,这种扩展必然带来计算机硬件结构的复杂化,势必会有更多全新的指令格式出现。只有具备了计算机架构发展设计能力的科学家,才能够认识到这方面问题。为了能够在人工智能领域我国不被落下,在重视软件设计的同时,不放松对计算机核心硬件系统的研究,从根本上完成对人工智能基理的认识,这样我们才不会总是跟在别人的屁股后面跑,同时自欺欺人的呼喊 “成为世界第一”。 现在看看国内的大学计算机课程内容,仍然是混乱一片的不痛不痒的肤浅, 多少教学内容涉及到了计算机核心设计与制造?在现今个人就可以设计制作特色计算机的时代,大学的计算机课程内容仍然距离硬件很远,设立的计算机专业仍然只了解一些硬件的皮毛,而没有切实地将计算机软硬件理论、方法和技术有机地结合在一起,谈什么 “赶超世界先进水平”,恐怕只是一句空话。
个人分类: 随笔|3036 次阅读|0 个评论
用限位数方法设计精确浮点加减法运算器
热度 3 accsys 2011-6-10 15:35
用限位数方法设计精确浮点加减法运算器
用限位数方法设计精确浮点加减法运算器 姜咏江 (对外经济贸易大学信息学院 北京 100013 ) 摘要: 仅用二进制补码制来说明机器如何表示数值运算,存在多方面的缺失,很难说清楚机器计算的理论依据,并带来了设计冗余和资源的浪费。限位数不用书写正负号就可以表示有符号数。只用无符号数做加法就能够进行加减运算。用限位数方法设计浮点运算器,阶码不用引进移码就能够方便进行计算,而且能够方便进行尾数扩充,得到精确的计算结果。 关键词: 计算机体系结构,限位数,硬件设计,软件设计 中图分类号: TP301 , TP311 Design Exact Float’s ADD/SUB with the Fixed-Length Number Jiang Yongjiang (School of Information Technology Management Engineering,UIBE,Beijing 100013) : Abstract : Only use Binary-complement to explain the machine how to represent numerical computation, there are many losses. It is difficult to clarify the theoretical basis for machine-computation and bring the design redundancy and waste of resources. The Fixed-length number can express the value not use the '-' or '+' symbol. Only use unsigned addition will be able to carry out addition and subtraction. Use the Fixed-length number to design the float’s ADD/SUB, Exponent no need to shift and can facilitate the mantissa expansion, get accurate results. Key words : architecture, fixed-length number, hardware, software 1 引言 国际标准化组织给出的单精度 IEEE754 标准(见 图 1 )将 32 位数用一位表示尾数的正负号, 8 位做阶码,尾数 23 位,并且做了如下规定: (1) 如果 阶码 E=0 ,并且 尾数 M= 0 ,这个数是± 0 (和符号位相关); (2) 如果 阶码 E =2 255 - 1 ,并且 尾数 M= 0 ,这个数是± 无穷大 (同样和符号位相关); (3) 如果 阶码 E =2 255 1 ,并且 尾数 M ≠ 0 ,这 不是一个数(NaN ) 。 图 1 IEEE754 浮点数的格式 计算机浮点数是数学“科学记数法”表达的数,一般形式为: M × 2 E ,这种形式可以与定点数通过移动小数点的方法自由转换。 IEEE754 标准的规定不仅使一定长度数码表数范围减少了,而且失去了运用浮点数进行精确计算的可能。 本文根据限位数理论和方法 设计了 32 位可实现精确计算的浮点数加减法运算器,阶码 8 位,尾码 24 位,没有尾码的符号位。阶码 E 的值是 -128 ~ +127 的所有整数,不论 24 位尾码 M 如何, 32 位浮点格式都表示惟一确定的数。 通过保留移出数据的方式,该浮点运算器就能够运用于任意范围的浮点数精确计算。 2 限位浮点数的表示 限位数理论使用数码原样排列的算术运算来完成数值计算,同样也适合浮点数算数运算。 2.1 限位数和对称制 我们将位数固定只用数码表示的数叫“限位数”。为了表示出限位数的长度,无效数码不能够省略。两限位数之和为数的总数,那么一个叫另一个“对称数”。因而 0 和负数没有对称数。两个数码之和为最大数码时,一个叫另一个数码的“反码”。一个限位数的对称数可以用“求反加一”得到。用较大的限位数来表示其对称数的相反数, 0 就是 0 ,这就是比补码制更一般化的“对称制” 。对称制中判断数的正负只要与对称点比较即可。限位数可以直接表示一定范围的正负数,不用在运算过程中转换。保值扩充限位数,正数添“ 0 ”,负数添最大数码。 例如, 3 位十进制的限位数是 000 ~ 999 ,总数是 1000 个,其中较大的一半 501 ~ 999 的每个数都表示较小一半对称数 499 ~ 001 的相反数,对称点 500 的对称数是自身,这种情况规定为负数(基数是奇数时没有这种情况)。 2.2 用限位数表示浮点数 浮点数的限位数表示不必分为单精度或双精度,也不必将阶码用移码表示,数码的直接运算就能得到任何精确度的计算结果。由 y = M × 2 E 函数的性质知,阶码 E 的值越大, 2 E 的值越大。按着我们这里规定的阶码 8 位,尾码 24 位,浮点数直接表数范围应为: -0.838860 8 × 2 127 ~ +0.8388607 × 2 127 ,阶码的变化范围是 -128 ~ +127 的整数 。 需要指出,限位数小数点的左方是不能够随便添加“ 0 ”的,原因是限位数的最高位数码关系到该数的正负,并且小数点左面有数码就会增加限位数的位数。例如, 0.866 和 .866 在限位数表示中是不同值的,前者是一个 4 位正数,而后者是一个 3 位的负数。如果将后者变为 4 位数,左面的最高位应是添最大数码 9 ,那么应有 .866 = 9.866 。因为浮点数尾数的小数点隐含在左边的位置,并且对阶时是将较小阶码的尾数右移进行的,因而不会出现小数点左面添 0 的情况。 3 可精确计算的浮点运算器设计 限位浮点数加减法器的设计要分为对阶和计算两大步骤。对阶不会产生阶码溢出,如果用 24 位加减法器来进行第二步工作,那么设计时要考虑数据位数扩充问题。 3.1 设计思想 计算机浮点运算的不精确来自于单精度或双精度的浮点数不能根据需要进行位数扩充。浮点数在尾数移位的过程中,由于位数限制,阶码小的尾数右移时就会丢失掉一些有效数字。如果将丢失的有效数值随时能够捡回来,那么就可以实现精确的计算。 图 2 所示是两个浮点数精确加减运算的流程,其特点是直接将存储形式的数据 A 、 B 分离阶码和尾码,然后对阶和计算,移出的尾数如果包含有效数字,则将移出部分适当变化后添加到结果的尾部。 图 2 浮点数精确加减运算流程 借助于存储器我们可以将移出的尾数保留起来,这样可以根据计算的需要,改变尾数的长度。当使用固定长度的浮点加减法运算器完成超长尾数的浮点数运算时,只要将超长的尾数进行分段加减运算处理,就可以确保得到精确的运算结果。 3.2 可精确计算的浮点加减法器运算实例 根据前面提到的设计思想,作者设计了浮点数加减运算器。下面给出这个浮点运算器三张仿真图,借此来展示浮点数精确计算设计的可行性。 8 位阶码对阶时,尾码保值移动最大为 255 位。仿真 图 3 的 Name 栏下 sub=1 做减法, sub=0 做加法; f_a 与 f_b 是参加运算的两个 32 位浮点数; remain 显示移位后得到的尾数; f_out 显示加减运算 24 位的结果; 256 位的 space 显示被移出的尾码, mov_f 是移出不为 0 的标志; over 是尾数加减运算溢出标志; osign 显示 f_a 阶码与 f_b 阶码的差,为防止判定大小时溢出定为 9 位编码,最高位为 1 指示差为负。 图 3 阶码最小最大的两数相加减 图 3 中 f_a 阶码是最小数 8’h80 , f_b 阶码是最大数 8’h7F ,因而差是负数 9’h101 ,距离为 9’h0FF ,说明 f_a 的尾数右移了 255 位。也即是 24’h999999 右移了 255 位,因为它是负数,故保值右移应该用“ 1 ”补位,于是 space 的前 231 位都是 1 ,而 space 的最低位保持初始值 0 ,故而我们见到 space 的低十六进制位是 24’h333332 ,其余位全是“ F ”。稳定的运算输出需要 3 个时钟周期,故图中由加变到减运算时, over 出现 3 个节拍的溢出显示,此时的判断和减法运算无关。 如果我们要得到这两数加法运算的精确值,只要将 space 的有效数字添加在结果的后面即可。如果是做减法,并且 space 是 f_b 的移出,那么要“求反加一”,并且这种 space “求反加一”没有向上的进位时,还要将结果 f_out 的尾码减一之后与变化的 space 相连。 图 4 中两浮点数的阶码都是负数, 8’hB0 = -80 , 8’hA3 = -93 ,故 8’hB0 8’hA3 , f_b 的尾码 24’b001100100101010101110111 要右移 13 位,得剩余为 24’b000000000000000110010010=24’h000192 ,移出的部分是 =16’hABB8 。尾码加法的近似结果是 24’h6545AA ,尾码减法的近似结果是 24’h654286 。加法运算的精确结果是 40’h6545AAABB8 ;而减法运算需要先求移出的 16’b1010101110111000 对称码,即有 16’b0101010001000111 + 1’b1 = 16’b0101010001001000 = 16’h5448 ,再连接减法运算的“结果减一”,得到减法运算精确结果 40’h6542855448 。 由于精确计算只考虑移出的有效数字不是 0 ,而不是 0 的限位数对称码不会产生进位,因而当移动的是 f_b 的尾数时,减法运算的精确结果获得必须用尾数差的结果减一后去连接移出部分的对称码。 图 5 验证的是阶码相同正数浮点数加减运算,由于移出到 space 中没有有效数字,故得到的加减运算结果都应该是精确的,但加法运算的结果溢出。要解决溢出,需要将公共阶码提高单位 1 ,也就是要将两数的尾码都右移一位,这用软件的方法就可以完成。 图 4 阶码都是负数的加减运算 图 5 阶码相同的加减运算 4 结论 计算机运算器电路设计当中,一般用所谓的二进制的“补码制”,会用很多种“碰值”的手段来完成运算器的设计,这样常会“漏掉”边界值。这里运用“限位数”进行能精确计算的浮点数电路设计,不仅简单易行,节省器件资源,而且在理论上能够透彻地解释机器数值运算问题,为软硬件结合浮点数运算的精确性提供了可行的方法。 参考文献 姜咏江·计算机设计的基础理论限位数· 2009 中国计算机大会论文集· p362 姜咏江·补码制理论的理解·北京,计算机工程与应用· 2004.5 姜咏江·计算机原理综合课程设计·北京,清华大学出版社· 2009.6 姜咏江 CCF/CIE 高级会员。对外经济贸易大学副教授。主研计算机理论与设计方法,系统结构,操作系统等。 E_mail : accsys@126.com
个人分类: 机器计算|8900 次阅读|12 个评论
搞处理机设计的诀窍
accsys 2010-4-23 07:25
姜咏江 一个追随我半年的学生退了,这是我不愿意看到的事情。搞计算机核心设计需要扎实的计算机原理知识,我让他好好读我的《计算机原理教程》,并准备一次决定是否收他为徒的考试。他昨天告诉我选择了放弃。 搞计算机硬件设计的人一定要天生聪慧,这其中的关键是要深入掌握计算机原理,并且要进行过原理计算机的设计。现在大学很浮躁,体现在学生身上也急功近利,学那么两三年就想挣大钱,因而很少有人在学科的基本原理方面痛下功夫,很难深入到计算机高层次的境界。 一位朋友通过邮件告诉我说:本人打算设计一款处理器,不知道怎么入手。 他还说:我已经设计出了操作系统,基于X86构架的,现在我打算设计一个自己的接收机系统,实践才是真正的梦想! 搞计算机的人如果能够自己设计制作出计算机来,那无疑是圆了科学研究的美梦。这位朋友能够自己设计操作系统,自然功底不浅,但仅在软件的范围深入,难免会发出不知道怎么入手的感叹。 我认为科学研究原理极为重要,因为只有牢固地掌握了原理,才能够有智慧,有能力,才能使人变得聪明起来。 目前计算机教材不够注重原理,因而培养出来的学生常常缺乏想像力。实践中,许多人只了解一些现成器件的接口,就匆匆进行实践设计,这种知其然儿不知所以然的实践方法,阻碍了理论和实践的进一步发展。凡事多问为什么,特别是搞计算机,不这样作,就不能摆脱追随国外厂家的打工者身份。 深入掌握计算机原理,巧妙地利用现代的科技成果FPGA和EDA,属于自己的计算机系统一定能造出来,梦一定能实现。 这是我想跟计算机朋友说的诀窍。 2010-4-23
个人分类: 随笔|3924 次阅读|2 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-17 04:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部