system verilog(二)数据类型

首先 verilog-1995 中有两种基本数据类型:变量和线网(有四种取值,0,1,z,x)
变量可以是(所有存储都是静态的)

  • 单比特或多比特的无符号数(reg [7:0] m)
  • 32bit的有符号数(integer)
  • 64bit的无符号数(time)
  • 浮点数(real)

线网可以用来连接设计中不同的部分,例如门和模块实例(wire)

逻辑(logic)类型:任何使用线网的地方均可使用logic,但要求logic只能有一个驱动,不能有多个结构性的驱动(例如双向总线时,信号就需要被定义成线网类型,wire)
在这里插入图片描述
相比四状态数据类型,system verilog引入的双状态数据类型有利于提高仿真器的性能并减少内存的使用量
在这里插入图片描述
双状态变量连接到被测设计时,产生的X和Z的值会转换成双状态值(即随时检查未知值的传播,$i sunknown操作符,可以在表达式的任意位出现X或Z时返回1)
在这里插入图片描述
定宽数组
1、定宽数组的声明和初始化
verilog要求在声明中必须给出数组的上下界,而systemverilog允许只给出数组宽度的声明方式
在这里插入图片描述
可以通过在变量名后面指定维度的方式来创建多维定宽数组
在这里插入图片描述
如果代码试图从一个越界的地址中读取数据,那么systemverilog将返回数组元素的缺省值(对于四状态类型的数组,返回X;对于双状态类型,则返回0;适用于所有的数组类型,线网在没有驱动的时候输出是Z)

很多systemverilog仿真器在存放数组元素时使用32bit的字边界,所以byte,shortint和int都是存放在一个字中,而longint则存放到两个字中。(通常使用两个或两个以上连续的字来存放logic和integer等四状态类型)
例如:字节数组b_unpack存放到三个字的空间中
在这里插入图片描述
常量数组:使用一个单引号加大括号来初始化数组,可以部分或全部赋值,在大括号前标上重复次数可以对多个元素重复赋值,还可以为没有显式赋值的元素指定一个缺省值default
在这里插入图片描述
for 与 foreach
systemverilog的$size函数返回数组的宽度,在foreach循环中,只需要指定数组名并在后面的方括号中给出索引变量,systemverilog会自动遍历数组中的元素。
在这里插入图片描述
在这里插入图片描述
在多维数组中使用foreach并不是像[ i ][ j ]这样把每个下标分别列在不同的方括号中,而是用逗号隔开放在同一个方括号中,像[ i,j ]
在这里插入图片描述

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值