绿皮书笔记:System Verilog 验证 第二章 数据类型 (下半部分)

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 验证

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值