预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Systemverilog数据类型总结 1逻辑数据类型(logic) 可替reg和wire,但是不能有多个驱动,有多个驱动的信号还是要定义成wire型 2双状态数据类型(只有0/1两个状态) 无符号:bit 有符号:byte shortint int longint $sunknown操作符可检查双状态数据类型位是否出现X、Z状态,若出现,返回1 例If($sunknown(iport)==1) $display() 3定宽数组 1)声明: 在数组声明中允许给出数组宽度 如:intc_style[16]等同于intc_style[15:0]//16个整数 2)多维数组 intarray[8][4]; intarray[7:0][3:0];//8行4列数组 array[7][3]=1//设置最后一个元素为1 从越界地址中读数,SV返回数组元素缺省值 四状态类型,返回X; 双状态类型,返回0; 3)存放: 32比特字边界存放数组元素 4)非合并数组声明:bit[7:0]b_unpack[3] 低位存放数据 5)常量数组 声明:单引号和大括号初始化数组 例:inta[4]='{0,1,2,1};//4个元素初始化 intb[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要指定数组名,且要用方括号中给出索引变量 initialbegin bit[31:0]arc[5],drc[5]; for(inti=0;i<$size(src);i++) src[i]=i; foreach(drc[j]) drc[j]=src[j]*2; end 多维数组遍历foreach语法用[i,j],如intmid[2][3]='{'{1,2,3},'{3,4,5}}foreach(mid[i,j]) 2)比较和复制 聚合比较和赋值(适用于整个数组而非单个元素) 比较只有等于和不等于比较 可使用?:操作符比较 $display("src[1:4]%sdst[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[]操作符分配空间,[]内给定数组宽度 intdyn[],d2[]; initialbegin 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)可通过索引实现访问元素;链表需要遍历目标元素之前的元素 声明:[$] intj=1; q2[$]={3,4},//队列常量不需要使用’ q[$]={0,2,5}; initialbegin 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数