Verilog【24】Verilog的real类型及注意事项
Verilog中的real类型变量为双精度浮点数,且符合IEEE Std754-1985对双精度浮点数的规定,即双精度浮点数为64位,其中1位符号位,11位指数位,53位尾数(其中包含1位隐含位).在IEEE Std 754-1985中一般用{S、E、M}对双精度浮点数进行描述,一个64位双精度浮点数的表示格式如下:
其中S为符号位占1位,E为指数位占11位,M为尾数位占52位,这里需要注意的是尾数位还有一个隐含位(具体取值可参考IEEE Std 754-1985).在具体仿真过程中观测到的数据需要通过相应的运算转换后可以得到对应IEEE Std 754-1985标准中指定的数据格式.但是在具体仿真的时候如果没有对浮点数进行合理的处理和使用将会引起不仿真结果可能与预期不符,那么进行浮点数算术计算时需要注意哪些问题呢?本文将以具体示例进行说明.
【示例】
仿真结果如下:
可见,在除法算术运算时需要合理使用相关的操作数.在Verilog中,如果两个操作数都为整型数据,那么计算结果将按照整型数据处理;如果两个操作数中有整型也有浮点类型,那么在进行运算前会将整型数据转换为对应的浮点类型数据后再进行计算,同时对计算结果按照浮点数运算规则进行处理.为此在具体使用real时需要注意以下几点:
-
不能在posedge和negedge中使用实型变量;
-
不能在矢量的位选中使用实型变量;
-
不能将要进行位选操作的变量声明为实型;
-
实型变量在声明的时候不能指定数据范围;
-
实型变量的初始默认值为0;
-
将real变量赋值给整型变量,real将按照"就近原则"处理后赋值给整型变量;
-
如果两个整型变量进行除法操作,操作后的结果存在小数部分,那么小数部分将会被截除转换为对应的整型数据;
- Verilog中并不是所有的运算符都支持操作数为实型变量,具体支持情况如下表:
【支持实型数据的运算如下表】
+,- | 正值运算符,负值运算符 |
+,-,*,/,** | 算数运算操作符 |
>,>=,<,<= | 关系运算符 |
!,&&,||,==,!= | 逻辑运算符 |
?: | 条件运算符 |
or | 敏感信号列表中的or |
【支持实型数据的运算如下表】
{},{N{}} | 拼接运算符 |
% | 取余运算符 |
===,!== | 等式运算符(比较包括x和z) |
~,&,|,^,^~,~^ | 位运算符 |
^,^~,~^,&,~&,|,~| | 缩减位运算符 |
<<,>>,<<<,>>> | 移位运算符 |