Verilog系列:常量位宽不指定导致的异常

在进行Verilog设计时经常会遇到多位数常量的使用,常用的描述方式如下:

<size>'<base><value>

'<base><value>

其中size指定了数据的位宽,base指定了数值采用的进制,value是对应进制的具体数值。

为了减小设计人员的负担,常常允许设计人员在描述常量时可以省略数值(<base>)描述符前的具***宽数值(<size>),但是当使用不同仿真工具时可能出现与期望不一致的结果,那么具体情况到底是什么呢,请看下文。

【示例】

使用仿真器的版本如下:

NCSIMCadence):14.20-2014

VCSMXSynopsys):K-2015.09-SP2-3

【使用NCSIM进行仿真的结果】

其中的sig1采用了省略数据宽度的描述方式,结果sig1中的值为只有32位有效数据“32'hAAAA_AAAA”,而期望sig1的高32位有效数据为全0.sig2中明确指定了数据宽度和数制等信息,所以输出的是完整的64位有效数据。sig3采用了省略数据宽度的写法,因为其有效数据只有8位,所以仅输出有效的8位数据。sig4省略了数据宽度和数制,这样的写法可以使数据的所有位均为指定的数值,因为这种写法保证所有数据位都为相同的数值,所以这里指定的数值必须具有1位的属性,即这里指定的数值只能是“01xXzZ”。

【使用VCSMX进行仿真的结果】

其中仿真器对于sig1sig2的处理结果一致,sig3sig4的处理方式同上例.通过上述两个仿真结果可以观测到,不同的仿真工具对于sig1处理结果产生了差异,主要是不同的EDA工具对于IEEE中未指定位宽常量的处理方式不一致导致的,具体IEEE中描述如下:

因此,不同仿真工具对于IEEE的上述描述理解不同,可能会导致仿真结果与期望不一致,所以在具体设计中对于数值常量一定要明确指定位宽,尽量将所有的常量信息都明确的指出,这样可以保证设计意图的正确性和确定性.


全部评论
我以前还学过verilog
点赞 回复 分享
发布于 2022-09-06 22:02 陕西

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务