【IC验证】systemverilog_信号类型

1.信号声明

语法:

变量类型 信号类型 符号转换 位宽 信号名 深度;

2.变量类型

(1)说明
systemverilog中的信号类型主要分为线网类型(wire)和变量类型(var);
(2)关键字

wire	//线网类型 
var		//变量类型

(3)特点
线网类型的信号只能进行连续赋值,变量类型的信号既可以连续赋值又可以在过程块中进行赋值;
(4)使用注意点
使用时,线网类型的信号要用wire关键字进行修饰,变量类型的信号要用var关键字进行修饰,缺省默认是变量类型;
在systemverilog中,reg类型是变量类型中的一种,所以我们一般直接使用var类型;
在systemverilog中,var类型既可以连续赋值又可以在过程块中赋值,而在verilog中,reg类型只能在过程块中赋值;
(5)例子
在这里插入图片描述
结果:
在这里插入图片描述
注意:如果w2类型声明是wire logic w2;时,w2就只能用连续赋值;而var类型的信号既可以连续赋值又可以在过程块中赋值;

3.数据类型

(1)说明
systemverilog中数据类型有两种,四值逻辑(0,1,x,z)和二值逻辑(0,1);
(2)关键字
四值逻辑(硬件逻辑)

logic 

二值逻辑:

bit 					//1位宽二值逻辑
byte 					//8位宽二值逻辑
shortint 				//16位宽二值逻辑
int 					//32位宽二值逻辑
longint 				//64位宽二值逻辑;

(3)使用注意点
缺省默认为四值逻辑;
二值逻辑一般会将前面的变量类型声明缺省;

4.符号

(1)说明
信号可以分为有符号数和无符号数;
(2)分类
无符号数:wire,reg,logic,bit
有符号数:byte,shortint,int,longint,integer
(3)符号转换
可以在无符号信号名前加signed关键字,将信号转换为有符号;
可以在有符号信号名前加unsigned关键字,将信号转换为无符号;
(4)注意点
二值逻辑可以直接赋值给四值逻辑,四值逻辑赋值给二值逻辑存在以下转化:
在这里插入图片描述

(5)例子
在这里插入图片描述
在这里插入图片描述

5.其他类型

(1)自定义类型(typedef)

i 说明

用来创建用户自定义类型;
通常会配合枚举类型(enum)和结构体类型(struct)联合使用;

ii 语法

typedef 类型 自定义类型名;

iii 注意

一般自定义类型名后面都加一个** _t **

iv 例子

在这里插入图片描述
结果:
在这里插入图片描述

(2)枚举类型(enum)

i 说明

定义一个抽象变量,并限定其取值范围;

ii 语法

enum 变量类型 {取值范围} 变量名;

iii 注意

枚举类型的变量类型可以缺省,默认是int类型;
枚举类型的取值范围,没有指定具体值时,会默认从0递增;

iv例子

在这里插入图片描述
在这里插入图片描述

v扩展1-联合typedef使用

联合typedef使用,将枚举类型指定为自定义类型使用;
语法:

//定义
typedef enum 变量类型 {取值范围} 类型名;
//声明
类型名 实例化变量名;

例子:
在这里插入图片描述
结果:
在这里插入图片描述
注意:
枚举类型声明的是一个变量,通过typedef声明后,才是一个类型;

vi 扩展2-枚举类型的赋值

同一枚举类型的变量之间,可以直接赋值;
枚举类型的变量,可以赋值给整形;
整形的变量,不可以赋值给枚举类型;
枚举类型不能作数学运算;

(3)结构体类型(struct)

i 说明

将相关联的信号,打包,放在一个组里面;

ii 语法

//定义
struct {
	成员变量1;
	...
	成员变量n;
} 结构体名 ;
//索引
结构体名.成员变量名

iii 注意

结构体声明的是一个变量,通过typedef声明后,才是一个类型;

iv 结构体的赋值方式

方式一:结构体变量名.成员变量 = 值
方式二:结构体变量名=‘{成员变量1取值,成员变量2取值,…,成员变量n取值};
方式三:结构体变量名=’{成员变量1名:成员变量1取值,成员变量2名:成员变量2取值,…,成员变量名n:成员变量n取值};

v 扩展

可以用typedef将结构体变为类型;
语法:

typedef struct {
	成员变量;
} 结构体名;

vi 例子在这里插入图片描述

结果:

在这里插入图片描述

(4)字符串类型(string)

i 说明

用来存储可变长度的字符串;

ii 语法

string 字符串变量名 = "值";

iii 注意

字符串存储单元为byte类型;
长度为N的字符串,索引为0~N-1;
不同于C语言,字符串末尾没有空字符;

iv 字符串常用的操作(内建方法)

str.len();  		//返回字符串的长度
str.putc(i,c);		//将第i个字符替换为c,等效为str[i] = "c";
str.get(c);			//返回第i个字符
str.substr(i,j);	//将第i个字符到第j个字符的字符串返回
str.{atoi(),atohex,atooct,atobin};	//将字符串转变为十进制,十六进制,八进制或者二进制数据

v 例子

在这里插入图片描述

结果:
在这里插入图片描述

说明:
由s2可以看出,字符串类似动态数组,长度会根据付得知动态调整;
由s3可以看出,字符串每个字符是按照ASCII码进行编码的,要得到每个字符的值需要索引到具体的字符;
由s4可以看出,字符串每个字符按照byte类型存储,当字符长度不匹配时,会存在截断;
i为内建方法的使用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值