SystemVerilog中logic var reg wire的区别

您所在的位置:网站首页 ups电池组计算方式 SystemVerilog中logic var reg wire的区别

SystemVerilog中logic var reg wire的区别

2023-09-17 22:13| 来源: 网络整理| 查看: 265

在Verilog中,所有的线网和变量都是使用四态值,因此没必要也不能清晰的区分信号类型。

为了增强灵活性,SystemVerilog中定义信号同时具有类型和数据类型两个属性。

类型指示信号是属于线网(net)还是变量(var)。SV使用所有的Verilog线网类型,并且没有进行任何拓展。 需要注意的是,线网类型必须配合使用四态数据类型,一般情况下省略数据类型,默认为四态。

数据类型指示线网或者变量的值系统。对于四态数据类型就是0、1、Z或X,对于两态数据类型就是0或1。 关键字logic是一个数据类型。当logic单独使用时,则隐含这是一个变量var,四态变量可以使用一对关键字var logic进行显式声明。例如: var logic [31:0] data; //一个32位宽的变量 当然,线网类型也可以使用logic显示声明为四态数据类型。如下: wire logic [31:0] addr; //一个32位宽的线网

从语义上来说,SV中的logic数据类型和Verilog中的reg类型是一样的,可以互换使用,更多的是兼容wire类型。

SV中的两态数据变量 相比Verilog中的四态数据类型,SV中引入了两状态的数据类型,有利于提高仿真器的性能并且减少内存的使用量,更加适合在高层次建模和验证。两态数据类型只能用于变量类型。这些类型如下:

bit --1位两态无符号整数 byte --8位两态有符号整数 shortint --8位两态有符号整数 int --16位两态有符号整数 longint --32位两态有符号整数

两态仿真语义

仿真开始时,对于四态变量,例如reg,logic和integer等的所有位缺省逻辑值是X。这因为在硬件系统中这些变量被认为没有初始化,因此直到驱动赋值给变量前,它们的值都是不确定的。所有的两态数据类型默认的初始逻辑为0,因为两态类型不能存储X值,因此它们不能描述未初始化的状态。这也是使用四态数据类型描述可综合RTL模型的原因之一。

需要注意的是,把四态值赋给两态数据类型是合法的。此时四态值中任何位的X或Z值均会对应的转换为逻辑0。

把四态变量赋给两态类型时,最可怕的不是这些值被转换为0还是1,而是要检查是否有未知值的传播。SV中存在”$isunknown”操作符,用来检测表达式中是否存在X或Z,一旦存在就会返回1。如例所示: 例:对四态状态值的检查

if ($isunknown(data)) $display(“@%0t : 4-state value detected“,$time);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3