(完整)Systemverilog数据类型总结,推荐文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

System verilog数据类型总结

1 逻辑数据类型(logic)

可替reg和wire,但是不能有多个驱动,有多个驱动的信号还是要定义成wire型

2 双状态数据类型(只有0/1两个状态)

无符号:bit

有符号:byte

shortint

int

longint

$sunknown操作符可检查双状态数据类型位是否出现X、Z状态,若出现,返回1例If ($sunknown(iport)==1)

$display( )

3 定宽数组

1)声明:

在数组声明中允许给出数组宽度

如:int c_style[16] 等同于int c_style[15:0] //16个整数

2)多维数组

int array[8][4];

int array [7:0][3:0];//8行4列数组

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

从越界地址中读数,SV返回数组元素缺省值

四状态类型,返回X;

双状态类型,返回0;

3)存放:

32比特字边界存放数组元素

4)非合并数组声明:bit[7:0] b_unpack[3]

低位存放数据

5)常量数组

声明:单引号和大括号初始化数组

例:int a[4] = '{0,1,2,1}; //4个元素初始化

int b[5];

a[0:2] = '{1,2,2}; //为前三个元素赋值

b = '{5{1}}; //5个值全为1

a= '{3,2,default:1} //为没有赋值元素,指定缺省值1, a='{3,2,1,1} 4 基本数组操作

1)遍历数组---for /foreach

foreach要指定数组名,且要用方括号中给出索引变量

initial begin

bit[31:0] arc[5],drc[5];

for(int i=0;i<$size(src);i++)

src[i]= i;

foreach (drc[j])

drc[j]=src[j]*2;

end

多维数组遍历foreach语法用[ i,j], 如int mid[2][3]='{'{1,2,3},'{3,4,5}} foreach(mid[i,j])

2)比较和复制

聚合比较和赋值(适用于整个数组而非单个元素)

比较只有等于和不等于比较

可使用?:操作符比较

$display ("src[1:4] %s dst[1:4]", src[1:4]==drc[1:4]? "==":"!==");

3)赋值src=drc //drc所有元素赋值给src

src[3]=4; //第三个元素赋值为4

4)同时使用数组下标和位下标

如指定第一个数组的第一位和第二位:

bit[31:0] src[5] = '{5{5}};

$display ("src[0],, //'b101

src[0][2:1] ); //'b10

5)合并数组

连续的比特集存放,既可以当成数组,也可以当单独数据,如32比特数据,可以看成4个8比特数据

合并的位和数组大小必须放在变量明前指定

如bit[3:0] [7:0] byte1; //四个8比特数组成32比特

byte1[2][7] //第3个字节的第8位

合并/非合并混合数组(详见SV验证测试平台编写指南P26)

和标量进行相互转换,建议使用合并数组,如以字节或字对存储单元进行操作,需要等待数组中变化,必须使用合并数组,如用@()等待触发,只能用标量或合并数组

5 动态数组

仿真过程中再分配空间或调整宽度,在声明时用空的[ ],在执行过程中使用new[]操作符分配空间,[ ] 内给定数组宽度

int dyn[],d2[];

initial begin

dyn = new[5]; //分配5个元素

foreach (dyn[j]) dyn[j]=j;//对元素进行初始化

d2=dyn //复制dyn

dyn=new[20](dyn);

dyn.delete(); //删除所有元素

想声明一个常数数组但不想统计元素个数,可以使用动态数组

bit[7:0] mask[ ] = '{3'b101,3'011};

数据类型相同,定宽数组和动态数组之间可以相互赋值

6 队列

结合链表和数组优点:1)可在队列任何地方添加,删除元素;动态数组需要分配新的数组并复制元素的值2)可通过索引实现访问元素;链表需要遍历目标元素之前的元素

声明:[$]

int j=1;

q2 [$] = {3,4} , //队列常量不需要使用’

q [$] = {0,2,5};

initial begin

q.insert(1,j); // {0,1,2,5}

q.delete(1); // {0,2,5} 删除第一个元素

q.push_front(6) //{6,0,2,5}

q.push_back(8) //{6,0,2,5,8}

q[$,2] //$放最左边,代表最小值0;$放最右边则代表最大值

7 关联数组

用来保存稀疏矩阵的元素,只为实际写入的元素分配空间

8 数组方法

数组缩减sum/product/and/or/xor 注意位宽

定位方法min/max/unique/find

数组排序re verse/sort/rsort/shuffle

9 枚举类型

10 表达式位宽可强制转换

bit [7:0] b8;

bit one= 1'b1;

相关文档
最新文档