数字验证学习笔记——SystemVerilog芯片验证4 ——数据类型

1.结构体

Verilog 的最大缺陷之一是没有数据结构,在SV中可以使用struct语句创建结构,跟c语言类似。不过struct的功能少,它只是一个数据的集合,其通常的使用的方法是将若干相关的变量组合到一个struct结构定义中。
伴随typedef可以用来创建新的类型,并利用新类型来声明更多变量。

struct {bit [7:0] r ,g ,b ;} pixel; //创建一个pixel结构体

//为了共享该类型,通过typedef 来创建新类型

typedef struct{ bit [7:0] r,g,b; } pixel_s;
pixel_s my_pixel; //声明变量
my_pixel = '{'h10,'h10,'h10}; //结构体类型的赋值 非合并性数组用单引号赋值,就是地址是非连续性的

2.枚举类型

typedef enum{ INIT ,DECODE,IDIE} fsmstats_e; //默认 INIT 0 DECODE 1 IDIE 2
fsmstate_e pstate,nstate; //声明自定义类型变量
case(pstate)
IDIE:nstate =INIT;//数值赋值
INIT:nstate =DECODE;
defalult:nstate =IDIE;
endcase
$dispaly( " Next state is %s" ,nstate.name() ); //显示状态名
如果给nstate 直接用整数赋值 是否正确? 答:该赋值本身不合法
枚举类型可以直接赋值给整型(INT)
整型不可以直接赋值给枚举类型

3.字符串

所有与字符串相关的处理,都使用string来保存和处理。字符串的格式化函数即如何形成一个你想要的字符串句子,使用SV系统方法$sformatf()函数。

string    s;   // 初始为空“”
initial begin
         s=“IEEE ”;                            //5个字符,末尾加上一个空格
         $display(s.getc(0));      //显示 ‘I’  ,getc=getchar,返回byte
         $display(s.tolower( ) ); //显示ieee     tolower 转化为小写
         s.putc( s.len()-1,''-'');         //将空格转变为‘-’  IEEE-
         s={s,"P1800"};                  //"IEEE-P1800"
         $dispaly(s.substr(2,5));       //显示EE-P
         //创建一个临时字符串并将其打印
         my_log($sformatf(" %s  %5d"  ,s  ,42  ) );
         end
         task my_log(string message);  //打印消息
         $display( "   @%0t: %s", $time  , message );   //显示时间是%t
         endtask

你可能感兴趣的:(验证学习,SV,学习)