Typedef
使用typedef语句创建新的类型,用户自定义的类型带后缀“_t”,如下面所示:
typedef bit[7:0] byte_t; //定义一个无符号的byte
typedef int array_t5[5]; //定义一个数组长度为5的数据类型
创建用户自定义结构 Struct
把若干个变量组合到一个结构中,用户自定义的结构后缀加“_s”,如下所示:
struct {bit[7:0] r,g,b;} color_s;
类型转换
静态转换
int a;
a = int'(10-1.1); //转换到制定目标类型时,在需要转换的表达式前面加上单引号和转换的类型
动态转换
流操作符,操作符>>把数据从左至右变为流,操作符<<把数据从右至左变为流,可以指定片段宽度进行分段后转变成流,不能将比特流结果直接赋给非合并数组,赋值表达式的右边使用流操作符把比特流拆分到非合并数组中,如下所示:
begin
int d
byte[7:0] c,b[4],a[4] = {8'hd,8'hc,8'hb,8'ha};
byte[7:0] j,k,l,m;
d = {>>{a}}; //0d0c0b0a 数组打包成整型
d = {<<byte{a}}; //0a0b0c0d 数组以byte长度来打包成整型
{>>{j,k,l,m}} = a; //把a分配带j,k,l,m四个字节中
枚举类型
常用于状态机的状态名和指令的操作码,常包含一个常量名称列表以及一个或者多个变量,使用后缀“_e”表示枚举类型,使用name()函数可以得到枚举变量值对应的字符串,如下所示:
typedef enum {init = 0,decode,idle} enum_e; //枚举常量赋值时,默认是int型,第一个常量必须为0
枚举类型的函数:first()返回第一个枚举常量;last()返回最后一个枚举常量;prev()返回前一个枚举常量;
字符串
字符串使用动态的存储方式,字符串的结尾不带标识符null,string类型的函数:getc(N)返回位置N上的字节;toupper()返回字符大写;tolower()返回字符小写;putc(M,C)把字节C写到字符串的M位上;substr(start,end)提出位置start到位置end的字符;{a,b}a字符串与b字符串进行拼接。
$cast()在于将右边的值赋给左边的量,赋值成功则返回1,数值越界导致赋值失败,则返回0
上述笔记都是基于System Veriog 验证