文章编号= 1009 -2552 (2018)01 -0136 -05
2018年第1期
DOI:10. 13274/j. cnki. hdzj. 2018. 01. 032
半精度浮点数处理器的设计与验证
宋聂平,韩俊刚,李
涛
(西安邮电大学计算机学院,西安710121)
摘要
:半精度浮点数处理器HFPP (Half-Precision Floating Point Processor)是一种16位浮点数
处理器。HFPP基于VerilogHDL实现了加减、乘、除、开方等运算,采用了 BOOTH算法与华莱 士树加法器,以及改进的开平方算法。验证方面采用了基于UVM (Universal Verification Metho-
dology)的验证平台。最终结论表明,算法相比普通移位算法速度提高了 50% ~ 70%
。覆盖率提
高了 50%。
关键词:浮点数;半精度;图像;高效算法;UVM验证方法学 中图分类号:TN492; TP332
文献标识码:A
Design and verification of the half-precision floating point processor
SONG Nie-ping, HAN Jun-gang, LI Tao
Abstract: The HFPP( Half-Precision Floating Point Processor) is a 16-bit processor. HFPP based on
Verilog HDL,has functions of addition and subtraction,multiplication,division,square root etc. ,using the BOOTH algorithm and Wallace tree adder, and improved square root algorithm. Compared to the general algorithm,it increased by 50% to 70% in speed. The verification part is constructed on a UVM
(School of Computer Science,Xi’ an University of Posts & Telecommunications,Xi’ an 710121,China)
Key words: floating point number; half-precision; image; efficient algorithm; UVM
(Universal Verification Methodology) based platform with a 50% increase in coverage.
0引百
随着集成电路与芯片产业的发展,高性能低功
算法,华莱士树加法器,还有改进的开平方算法,极 大地提高了处理器的速度。
在验证部分采用UVM验证方法学,搭建了一 个高重用性的验证平台,通过大量的随机激励保证 了结果的正确性,各种覆盖率指标也达到了工业 标准。
1
耗的产品成为了业界追求的目标。在图形计算与存 储方面,人们期待一种更适合于图形的数据格式,半 精度(half-precision)泮点数格式因此产生。与单精 度、双精度格式一样,半精度也包括在IEEE754- 2008标准之中。虽然标准相对较新,但16位格式 的在图形处理方面的应用较早,包括日立公司在 1982年推出的DSP产品和3dfx公司的Voodoo
整体描述
1.1半精度浮点数格式
整个半精度浮点数的详细情况如表1所示。 半精度浮点数由两字节组成,分别是1bit的符 号位,5bit的阶码位,以及10bit的尾数位。普通半 精度浮点数可以分为两种,一种是规格化数,另一种 是非规格化数。本文使用的常规浮点数是规格化
Graphics系列处理器之中都使用了这种格式。与
其他格式不同,半精度只占用2字节空间,适用于对 存储空间和带宽要求很严格的开发平台,例如
ARM,特别是对于图形计算方面有着极大的优势。 HFPP阐述了在图形加速器GPU( Graphics Processing Unit)中集成的半精度浮点数处理器的整体设计
与验证。在算法方面HFPP使用了基4的BOOTH —
136 —
收稿日期:2017 -04 -18
作者简介:宋聂平(1990 -统开发。
)
,男,硕士研究生,研究方向为嵌人式系
的,即隐藏的前导位默认为的数,我们为了弥补失,将前导位视为
00
1
。但是对于一些较小 数 N
AN
分为 QNAN(Quiet not a Numbei•,表
0
示未定
到最小的规格化数之间的缺
义的算术运算结果,如除
not a Number,用
运算)与
SNAN(Signaling
。另外,还有无穷与非数的概
INF
于标记未初始化的值,以此来捕获
念。无穷分为正无穷与负无穷,使用表示。非表1
异常)。
半精度浮点数格式
前提条件
符号位S
01
阶码 e
00000000000000000001 -11110
11111111111111111111
值
尾数f
00
性质
非规格化数(正0)非规格化数(负0)
非规格化数规格化数正
INF
正 0_00000_0000000000负 1_00000_0000000000
(-1)s * (2-15) *(0. f)(-1”
注
任意任意
01
非0任意
00
①②③
注
*(2e-15) *(1.f)④
0_11111_00000000001_11111_00000000000—11111—10000000000—11111—0000000001
负INF非数QNAN注⑤非数SNAN
任意任意
非0,以0开头非0,以1结尾
注释①:这里的阶码e为0
注释②:这是一段很小的数,弥补0到最小的规格化数2-14 *注释③:范围是-1 *注释④:范围是-1 *
2-15 * (0.1023)到 1 *2-15 * (0.1023)2-14 * (0.1023)到 1 *215 *(0.1023)
( 1.0
)之间的缺失
注释⑤:非规格化数/规格化数、无穷、非数是不同而独立的概念,无穷即为无穷,与规格化无关
1.2
概念解释
规格化:为了保证浮点数的精度,需要在计算过
浮点数的溢出:上溢:当浮点数阶码超过了最大 阶码时,此时不再运算,进行中断处理;下溢:当浮点 数小于最小阶码,此时溢出的值很小,处理方式是把 尾数置为零,处理器继续运行。
浮点数近似模型:由于计算机计算的结果精度 不可能是无穷大的,所以需要采用某种近似模型。
HFPP
程与计算结果让浮点数保持规格化。判断规格化数 的方法是检测阶码是否全为
0
。如果不是规格化
数,就要通过增加阶码右移尾数或者减少阶码左移 尾数的办法使其变成规格化数。这个过程叫做规 格化。
扩充位:在运算过程中为了计算方便,会对阶码 以及尾数进行扩充。增加了扩充位后,可以判断并 防止溢出,并且能显示出隐藏的前导位,还能有助于 近似判断。不同运算的扩充位有所不同,在下文会 有详细解释。运算结束之后,会把扩充位删除,恢复
16
根据
IEEE -754
标准设置了 4种近似模型。
0(
分别是:靠近最近的偶数、靠近将超出范围的数
据直接切除)、靠近无穷大方向、靠近无穷小方向。 输人信号中可以对这
2
4
种模型进行指定选择。
详细设计总体设计如图
1
所示。
位。
图1总体设计图
一 137 —
整个设计在两个
16
start低电平的时候开始工作,得到
3
_h
,a_
h_h
和
b_h_h
,分别进行乘法运算,得到的结果
位操作数与一个位的操作符。根据操作 分别是积的低6位,中6位,中6位和高6位,按位相 加就是一个临时积。接下来还要对另外半部分进行 相同的运算,得到一个临时积矩阵。再次按照相同的 逻辑顺序进行迭代处理
(3)
4
符来决定使用哪个运算模块进行计算。在五种运算 模块内部
,pre
模块对操作数进行预处理
。MUX
,post模块
对运算结果进行后处理是一个选择器模块, 次可以得到最终乘积。
它根据操作符来对所有运算结果选择性输出。异常 触发器会拋出异常的结果。
2. 1
中间过程为了防止组合链过长而导致时延
过长,加人一级寄存器,因此消耗1个时钟。
2.2.2
加减法
pre
串行乘法
模块功能是尾数的规格化与阶码的运算。
re
传统的串行乘法使用的是移位相加的办法。这 种方法虽然易于理解与实现,但是速度较慢
。HFPP
两个操作数经过了 p模块直接得到
post模
AddSub
模块
运算所需要的规格化尾数与块需要的运算 通过改进传统的移位法,显著的提高了乘法的速度, 结果的阶码
。pre
模块首先将两个操作数的尾数、
阶码分开,尾数前部扩充2位,高位用来判断是否溢 出,低位就是隐藏的前导位,如果阶码全为0则设置 为0,阶码不全为0则为1
;
尾数后部扩充
3
位,避免 溢出且方便近似。根据浮点数的加减法的运算特 性,较大的阶码就是运算结果的阶码。而拥有较小 阶码的操作数需要对阶,也就是在保证值不变的情 况下左移阶码,右移尾数以平衡阶码的增加。对阶 过后的尾数再进行规格化,输出给
AddSub
。整个 pre
模块使用组合逻辑,不消耗时钟数。
AddSub
模块功能是进行尾数和符号的计算,消
耗
3
个时钟。
post模
块的功能是拼接计算结果并再次对阶规
格化,对后三位判断来进行近似操作,消耗
3
个时钟。
2.2
乘法
乘法使用了并行乘法与改进的串行乘法,两个
乘法模块的
pre
与post是共用的。
首先,设两个乘法操作数分别为
A
和
B
。
pre
模块采用的是组合逻辑,首先将阶码与尾数
分开。阶码前置2个扩展位,假设两个扩展后的阶码 分别为
el
与e2,那么按照数学法则,积的阶码是乘数
阶码的和,减去偏移量则为
(el -15) + (e2 -15) +15 = el + e2 - 15
,结果输出给post模
块
;
而尾数扩展仅在
高位扩展一位表示隐藏的前导位,后续的扩展在不 同算法中有所不同。结果输出给计算模块。
post对
结果进行对阶、近似操作,消耗6个时钟。
2.2. 1 并行乘法
并行乘法采用的方法如下:
(1)
首先对11位的尾数高位再次扩充1位。这
一位的作用在于将尾数位数变为偶数以便于对半截 取,虽然参与运算,但是对运算结果不造成影响。扩 充之后尾数成为12位
,A
和
B
被截为
4
段命名为
a_
h_h
、a_h_l、a_l_h、a_l_l 和 b_h_h、b_h_l、b_l_h、b_
l_l。
(2 ) a_h_l 和 b_h_l,a_h_h 和 b_h_l,a_h_l 和 b_h
一
138 —
减少了消耗的时钟数。
(1)booth
算法
。booth
算法可以有效的提高串
行乘法的速度,被广泛应于市面众多的处理器中。
HFPP
采用了基
4booth
算法。那么如图
2
所示,低
位添加一位0
补充凑齐以便于每3
位划分,电路每
个时钟周期右移2位,取后三位作为参考(
如表2所
示)。而
A
的补码(尾数可以看作无符号正数,因此
不需要特地的进行补码与原码互转)要根据B
每
3
位的情况得到部分积,最后将每个部分积求和,就是 最终的乘积。
图2
BOOTH算法操作
表2
部分积操作
B
每3位
具体操作
000+ 0
001+补码010+补码011+
补码并左移1位
100+
补码并左移1位再取反+ 1
101+补码再取反+ 1110
+
补码再取反+ 1
111
+0
(2)
华莱士树。华莱士树的原理是使用全加器 把两个
3
个〃位的数相加转换成
2
个〃 + 1位的数
相加,以此类推,可以用多个全加器把多个数规约成
2个数相加,最后用加法器把这两个最终的数相加
得到乘积。利用华莱士树可以进一步加快上述
booth算法之中部分积求和的步骤,缩短时钟数。2
.3
除法
pre
模块完成规格化与扩充。处理方式如下:
尾数处理:被除数A的尾数前扩1位前导位, 后部扩充13位,总24位。除数B的尾数前扩4位, 分别是3位的占位零与1位的前导位,总14位。都 需要进行规格化,左移消除多余的零(由于被除数 位宽大,经过规格化被除数会大于除数),零的个数 分别记为dvd_zeros和div_zeros。处理后的尾数传 输给div模块。
阶码处理:A与B的阶码前扩2位,记为el与
sqrt模块采用逐次逼近法。先使用被开方数一
半位宽的数作为假设平方根的位宽,这个假设平方根 最高位为1,其余位都为0。因为这个值是平方根的 最大可能值。如果这个假设平方根的平方大于A,则 不符合要求,这一位置0,低一位置1;如果这个假设 平方根的平方小于A,则保留这一位的1,低一位同样 置1。循环这个步骤直到A的每一位都被检测完成。 最终得到一个近似平方根。本模块消耗12个时钟。
e2,那么商的阶码是(el -15) - (e2 -15) +15 - dvd_zeros + div_zeros,即 e1-e2+15- dvd_zeros + div_zeros。这是因为尾数部分在商分母增加了 dvd_ zeros位,在分子增加了 div_zeros位;相应的就要在
阶码部分“补偿”回来以保持平衡。计算好的阶码 传输给post模块。
post模块主要进行规格化对阶与舍人操作。消
耗6个时钟。
3
测试与验证
3.1验证平台架构
UVM是1C验证行业一门较为新兴的验证方法
学。从技术方面来说,它是一种基于systemverilog 语言的类库。
pre模块共消耗2个时钟。
div模块的逻辑米用移位相减法。由于pre模
块规格化与对阶处理后被除数一定大于除数,所以 移位相减法可以直接运用。设被除数为f1,除数G。 状态机首先判断f1是否大于£2,如果小于£2则左 移,商左移1位,最后一位置〇(第一次的运行这种 情况不会发生,第二次以后可能会发生);如果f1大 于f2则相减,差作为下一时钟的被除数,商也同样 左移1位,最后一位置1。商左移并且设置最后一 位的这个过程能够让商不断的累加。当被除数为零 时,模块停止工作。
HFPP通过使用uvm的factory机制、
callback机制、sequence机制,搭建了 一套适用于浮
点数处理器的可重用、易移植、灵活的验证平台。
HFPP的平台如图3所示,首先通过top来配置
待测设计 DUT (Design Under Test)和 interface。in
terface 连接平台与 DUT 的接口。 sequence 不直接
参与到平台的运行之中,sequencer桥接着前者与
driver,起着仲裁的作用。Transaction事务级包依次
通过前三个模块,最终被转化为信号级输送到
div模块消耗12个时钟。
DUT。而monitor被实例化2次,一个用来收集刚刚
被驱动到interface上的随机数据(考虑到平台的可 重用性,有必要这么做),一个用来采集DUT输出的 信号级结果,并且将结果转化为事务级下发。上述
post模块主要进行规格化对阶与舍人操作,消
耗6个时钟。2.4开方
开方只需要处理一个操作数。
pre模块负责将
的模块都被整合在agent模块之中,而agent模块被 实例化为i_agt与o_agt与cov_agt。分别收集DUT 的运行结果、参考模型(Reference Model)的运行结 果、覆盖率结果。前两个运行结果会被送人记分版 (Scoreboard)进行比较,统计误差率等等;另一份结 果被送人覆盖率模块(Coverage)统计覆盖率。上述 模块再次被整合到环境(Environment)之中。
操作数A截取,尾数高位扩一位前导位,低位扩15 位,进行左移规格化,移动的零的个数记位sqrt_ze-
ros。阶码高位扩充1位并且设为e,则平方根的阶
码为:(e + 15 - sqrt_zeros)/2。特别需要注意的是, 具体电路之中对于除2处理是利用右移来进行的, 最后一位如果为1会有精度损失,因此需要在尾数 部分左移1位作为补偿。
pre模块消耗2个时钟。
图3平台设计
一 139 —
Virtual Sequence 与 Virtual Sequencer 的启用可以
有效的管理平台中多个模块拥有数个不同实例的情 况,并且拥有强大的调度功能,减少冗余代码的产生。
不同的testcase可以从不同的角度切人到对
4
结束语
HFPP实现了 IEEE754标准的半精度浮点数的
处理器,包括了加减、乘、除、开方等运算。使用了高 效的booth算法与华莱士树加法器,提高了运行速 度。并且在测试验证方面不仅仅使用了传统的定向
DUT的验证之中,HFPP采用了如下的几种case:
(1)
通过约束控制让sequence多发送边界情况 试方法,还基于uvm方法学开发了可重用、测易移
植、灵活的验证平台,覆盖率达到了工业标准。HF-
的激励,尽可能多的使DUT抛出异常。
(2)
去除异常部分,只发送普通激励。这种
PP的研究成果可以使用在图像处理这一类对带宽
和速度要求比较高的环境,可以作为协处理器,也可 以单独作为处理器工作。
case也是耗时最多的,实际情况中,平台运行50万
次循环需要30分钟以上的时间。
(3)
前两种情况都是在固定舍人模式的情况下
参考文献:
[1] 张强.LVM
进行,最后一种case减少数据量的产生,主要随机 舍人选择符,关注近似模块能否正常运行。
参考模型使用了 C语言建立的模型,通过DPI -
实战.卷1[M].北京:机械工业出版社,2014.
].
[2] 白中英,戴志涛.
2013.
[3] 胡伟武,等.
计算机组成原理[M北京:科学出版社,
C接口调用C文件。
3.2其它测试
(1) 定向测试参考使用了 IBM的浮点数测试包。(2)
计算机体系结构[M
].
北京:清华大学出版社,
2011.
[4] Itoh N, Naemura Y, Makino H, et al. A 600 - Mhz 54&Times;
54 - Bit Multiplier With Rectangular-Styled Wallace Tree [J]. Solid-State Circuits,IEEE Journal of,2001,36(2) :249 -257.
利用 SVA(SystemVerilog Assertion)对 DUT
的异常触发器插人探针,配合异常测试包,在测试前 期消除了一部分设计缺陷。3.3覆盖率统计信息
表3是覆盖率统计信息。可以看到,通过随机 化的验证平台的帮助,可以让功能覆盖率得到大幅 提升。代码覆盖率也有小幅度提升。
表3
方法 测试包 验证平台
功能覆盖率
45. 11 % 98.76%
[5] 林志谋,卢贵主.一种适合FPGA实现的开平方算法[J].厦门
一种基于LVM面向RISC CPL的可重
大学学报:自然科学版,2006, 45(2) : 199 -201.
[6] 谢峥,王腾,雍珊珊,等.
用功能验证平台[
50(2) :221 -227.[7] 韩俊刚.
J].
北京大学学报:自然科学版,2014,
系统芯片的混合验证方法[
J].
西安邮电大学学报,
2002, 7(1) :12 -17.[8] 韩俊刚,姚静,李涛,等.
覆盖率统计代码覆盖率
85.33% 90.39%
多态并行机上的3D图形渲染[J].西
安邮电大学学报,2015, 20(2) :1 -6.
断言覆盖率
100%100%
责任编辑:薛慧心
於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於於
(
上接第135页)
术的应用和发展打下了坚实的基础。但是,因工程 检测数据对工程质量判定影响重大,在大力发展和 普遍应用物联网技术的同时要高度重视检测数据的 安全性防控。参考文献:
[1] 张德洪.
自己的优势,对于二维码防伪标识,用专用识别设备 可以脱网识别并解密二维码信息,以确认报告真伪; 对于条形码防伪标识,通过扫描条形码,连接网络服 务端,通过网络端服务器调取条形码对应的唯一报 告信息,确认报告真伪。二维码模式可以脱网使用, 但是需要专用解密识别终端,条形码信息对公众开 放,可以随意查阅,但需要在互联网服务端存有与条 形码信息唯一对应的检测报告内容。
6
物联网在楼体结构安全检测的应用研究[」].中南林业 基于物联网技术的公交智能化管理体系建设与实
科技大学学报,2011(12):202 -205.
[2] 张保国.
践[J
结束语
物联网技术在建设工程质量检测行业的快速发 展,大大推动了建设工程检测行业智能化智慧化发 展的进程。同时,也为建设工程检测行业大数据技
].
城市公共交通,2015(5):25 -28.
[3] 戴勇.物联网技术在起重机检验检测中的管理应用研究[J].中
物联网技术应用前景分析[J].电子
-11.
国设备工程,2017(9):178 - 179.
[4] 解自国,颜礼松,严仕新.
工业专用设备,2012(1):8
责任编辑:么丽苹
—140 —
因篇幅问题不能全部显示,请点此查看更多更全内容