systemverilog中高精度浮点运算的一种求解思路
1. 问题背景
设计中有一个计时器,包含48bit的s和32bit的ns共同组成80 bit的时间数据存放在以下数据结构中
reg [79:0] timer;
该计时器允许存入一个负数值,符号位由s所在的48bit表示
现在有两个这样类型的计时器timer1和timer2,实时计算这两个计时器之间的时间差值,并填入到计时器offset中。
想要实现的算法如下所示:
bit [79:0] timer1;
bit [79:0] timer2;
bit [79:0] offset;
//求解offset为timer1与timer2的差值
//需要对其中的s和ns分别进行运算,还要考虑符号位,所以不能简单的进行相减
2. 问题难点
- 这里的时间由两部分构成,分别是s和ns,ns跟s之间的进制关系是10^9,因而无法直接用这两个80bit的数进行加减运算
- SystemVerilog数据结构中很难找到这么一种数据类型来描述48bit的s和32bit的ns的组合值,SystemVerilog中能够记录的最大的有符号数类型为real,所占空间也仅仅只有64bit
3. 解题思路
由于bit类型是无符号的,所以我们在进行bit类型的运算时最好将其转化为无符号之间的运算,同时符号位单独计算。
3.1 统一度量衡
原有的80 bit timer即包含了s又包含了ns,那么我们要进行运算首先得统一单位,同时还需要将符号位进行处理,进而得到一个符号位和以ns为单位的无符号正整数的组合,为后面的运算打好基础。
这里我们写了这么一个函数array_to_time进行转换,输入为

文章介绍了在SystemVerilog中处理80bit时间数据结构,通过转换、符号位处理和函数设计解决高精度浮点运算的问题,以求取计时器之间的差值。
最低0.47元/天 解锁文章
3016

被折叠的 条评论
为什么被折叠?



