SystemVerilog 数据类型(一)

一、变量类型

四值变量: (0、1、x、z)四种状态

四值逻辑类型:integer、reg、logic、reg、net-type(如wire、tri);

  • SV并不太常用变量类型是wire(assign语句中)还是reg(initial和always语句中)。
  • logic用的比较多。可以被连续赋值语句驱动,可用在assign、initial、always语句中。

四值变量与二值变量的特性:

  • 四值变量的默认初始值为x,二值变量的默认初始值为0,在initial中可以直接使用~clk变成1,但是如果是logic,必须设置初值为0、或者1.**

  • 将四值变量赋值给二值变量,x和z状态会转变为0;

二值变量: (0、1)两种状态

二值逻辑类型:byte、shortint、int、longint、bit。

有符号类型:byte、shortint、int、longint、integer。

无符号类型:bit、logic、reg、net-type(如wire、tri)。

对于转换方式,可以分为隐式转换显式转换显式转换又可以分为静态转换动态转换

  • 静态转换:unsigned’(signed);注意单引号。
  • 动态转换:$cast(tgt,src)

二、数组

2.1.固定数组

静态数组是指其数组的大小在定义时被显性地指定。

sv引入两种类型的数组:压缩数组 (packedarray)和非压缩数组 (unpackedarray)。

压缩(合并)数组,维数定义在变量标识符之前,如: bit [7:0] c1; //压缩数组 (c1在左边)

在这里插入图片描述

非压缩数组,维数的定义在变量标识符之后,如: bit [7:0] up_array [3]; //非压缩数组

在这里插入图片描述

更深入理解

在这里插入图片描述

答案:2WORD、3WORD(logic 2位存储)

24x2 = 48位 2word ; 3x(8x2) 3word;

  • word : 1字=2字节(1 word = 2 byte ) 字长是指字的长度
  • 字节byte :1字节=8位(1 byte = 8 bit)
  • bit

一个字的字长为16
一个字节的字长是8

混合数组

在这里插入图片描述

2.2.动态数组

  • 声明时使用 [ ] 进行动态数组声明;
  • 在仿真过程中进行分配内存空间和设置数组元素个数;
  • 使用 new[]来分配内存空间,传递数组元素的个数;
  • 通过数组名称可以实现整个数组的赋值
  • $size系统函数返回数组元素个数;
  • 动态数组和固定数组之间可以进行相互赋值,但需要满足:(数据类型相同,元素数目相同);

在这里插入图片描述

2.3.数组方法

  • 求和sum、求积product、与and、或or、异或xor

  • a.sum——单bit数组的求和返回单bit的数值;

  • 求最大值max,求最小值min,唯一化unique;

在这里插入图片描述

2.4.数组定位方法

  • 查找元素:find
  • 查找第一个元素:find_first
  • 查找第一个元素的索引:find_first_with_index

在这里插入图片描述

三、队列

  • 声明时使用 [$] 进行队列声明;
  • 能够迅速分配额外的空间和额外的元素
  • 不需要new[]进行分配空间
  • 支持 push(数据入队——写)和 pop(数据出对——读)操作;push时自动增补空间,pop后空间不消失;
  • 具有排序和搜索的功能;
  • 支持add和remove元素操作;

在这里插入图片描述

在这里插入图片描述

四、结构体

  • 结构体相当于是对一组数据类型的封装,是一组变量的集合,可以作为一个整体进行操作;
  • 一般使用结构体的名字对其中的变量进行操作
  • 结构体默认情况下是非填充的,当然也可以使用关键字packed将其声明为填充型的;
  • 可以使用关键词typedef来定义结构体,实现对同一个结构体的多次例化增强结构体的重用性;

在这里插入图片描述

五、枚举

在这里插入图片描述

  • 数值必须唯一;默认为int型,且会初始化为0。上图INIT缺失代表0,如果赋值{INIT=1,…}报错。

六、字符串

  • 字符串类型(string)是一个大小可变、动态分配的字节数组。字符串文本为一个具有宽度为8的整数倍的压缩数组
  • 在未赋值的情况下,string类型的变量初始值为空字符 “ ”
  • 可以使用系统函数$psprintf()生成字符串;
  • 字符串类型变量具有内建的操作符和函数,len(), getc(), putc(),substr()等;

在这里插入图片描述
参考:
Mr.翟的博客

Systemverilog(绿皮书)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值