SV 逻辑数值、数组、队列、结构体、字符串

目录

一、逻辑数值

二、变量转换

显示转换

隐式转换(不需要进行转换操作)

三、定宽数组

数组声明

多维数组声明

初始化和赋值  

非合并数组

合并数组

基本数组操作

for和foreach

赋值:=

比较:==,!=   

四、动态数组

数组定位

方法定位

with(指示sv如何搜索)

重复参数声明,意思相同

数组排序

五、队列

利用队列函数

利用队列操作

六、关联数组

七、结构体 struct

八、枚举类型enum

九、字符串

字符串声明string s


一、逻辑数值

  • 四值逻辑类型(硬件世界):logic、integer、reg、net-type(例如wire、tri)
  • 二值逻辑类型(软件世界):byte、shortint、int、longint、bit
  • 有符号类型:byte、shortint、int、longint、integer
  • 无符号类型:bit、logic、integer、reg、net-type(例如wire、tri)

注意:1.verilog中有寄存器类型reg、线网类型wire;sv侧重验证,并不关切logic对应逻 辑应该被                综合为reg还是wire。

           2.net-type(例如wire、tri)只能连续复制,logic可以连续赋值、过程块赋值。

           3.在缺省的情况下参数类型是与前一个参数相同的,而第一个参数的缺省类型是单比特输入

           4.有符号类型最高位带有符号位,例如:8位有符号数'b1000_0000,打印为-128


二、变量转换

  • 显示转换

  • 静态转换(编译阶段检查),需要在转换表达式前加上单引号,不会对转换值做检查,转换失败也无从得知。

         例如:byte signed_vec = 8’b1000_0000;

                   A=unsigned'(signed_vec);   //将signed_vec转换成无符号数

                   $display("result_vec = 'h%x",A) //’h080

  • 动态转换(仿真阶段检查),$cast(tgt,src)告诉是否成功
  • 隐式转换(不需要进行转换操作)

        例如:logic[3:0] x_vec = 'b111x;

                   Bit [2:0] b_vec;

                   b_vec = x_vec; //隐式转换,结果为’b110

注意:四值逻辑中的x、z转换成二值逻辑中的0。


三、定宽数组

  • 数组声明

                int A [0:15]; //[0]…[15] verilog中必须给上下界。

                int A [16];  //[0]…[15]。

  • 多维数组声明

                int array [0:7][0:3]; //完整说明

                int array [8][4];    //紧凑说明

                array[7][3] = 1;    //设置最后一个元素值

注意:从越界地址读取数据,那么SV将返回数组元素类型缺省值,例如对于logic返回X,对于int或bit返回0。

  • 初始化和赋值  

                int ascend[4]='{0,1,2,3}; 

                int descend[5];

                descend='{4,3,2,1,0};  //先定义再初始化

                descend [0:2]='{5,6,7}; //为前三个元素赋值

                ascend='{4{8}}       //重复操作

                descend='{9,8,default:-1};  //{9,8,-1,-1,-1},default定义剩下的元素

                int md[2][3]='{'{0,1,2,3},'{3,4,5}}; //定义多维数组

  • 非合并数组

                bit [7:0]barray[3];    //非合并数组,三行,每一行有一个8bit数据

  • 合并数组

        声明合并数组时,合并的位和数组大小作为数据类型的一部分必须在变量名前面指定,数组大小定义的格式必须是[msb:lsb],而不是[size].

                bit [3:0][7:0]barray;       //合并数组,一行,3个字节组成的32bit

                bit [3:0][7:0]barray[3];   //合并,3行,3*32bit

                barray[0]=lw

                barray[0][3]=8'h01;

                barray[0][1][6]=1'b1;

                nibbles=barray[0];         //复制合并数组的元素值32bit

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值