四值逻辑:integer,logic,reg,net-type(wire,tri)
二值逻辑:byte,shortint,int,longint,bit
有符号类型:byte,shortint,int,longint,integer
无符号类型:logic,reg,net-type(wire,tri),bit
四值逻辑默认为x,二值逻辑默认为0
(1)数组的声明和初始化
int c_style[16]; //表示[0]-[15]
int array[8][4]; //大小8行4列的二维数组
(2)常量数组的赋值
int ascend[4]='{0,1,2,3};
int descend [5];
desend = '{0,1,2,3,4};
asend = '{4{8}}; //4个值都为8
desend = '{9,8,default:1}; //{9,8,1,1,1}
(3)for和foreach
//foreach对一位数组进行遍历
int f[5];
foreach(f[i]) //等同于for(int i=0;i<=4;i++)
int a[6:2];
foreach(a[i]) //等同于for(int i=6;i>=2;i--)
//foreach对二维数组进行遍历
int md[2][3] = '{'{0,1,2},'{3,4,5}};
initial begin
foreach(md[i,j]) //foreach(md[i][j])是错误写法
$display("md[%0d][%0d]=%0d",i,j,md[i][j]);
end
(4)数组的复制与比较
dst = src //复制非常的简单等号即可
$display("src %s dst",(src==dst)?"==":"!="); //?:操作等同于if...else...
(5)同时使用数组下标和位下标
initial begin
bit[31:0] src[5] = '{5{5}};
displayb(src[0],, //b是二进制的意思
src[0][0],,
src[0][2:1] //显示为‘b10,取数组的第一个的高两位,’b101的高两位为'b10
);
end
(6)合并数组
暂时看的不明朗
int dyn[],d2[]; //声明动态数组
int j = 1,
q2[$] = {3,4}, //队列常量不需要用“'”
q[$] = {0,2,5}; //{0,2,5}
initial begin
q .insert(1,j); //{0,1,2,5} 在第1元素之前插入j
q.insert(3,q2); //{0,1,2,3,4,5}在第3个元素之前插入q2
q.delete(1); //{0,2,3,4,5}删除第1个元素
//下面的操作执行速度很快
q.pus_fornt(6); //{6,0,2,3,4,5}在队列前面插入
j = q.pop_back; //{6,0,2,3,4} j = 5
q.push_back(8); //{6,0,2,3,4,8}在队列末尾插入
j = q.pop_front; //{0,2,3,4,8} j =6
foreach(q[i])
$display(q[i]);
q.delete(); //删除整个队列
end
initial begin
bit [63:0] assoc[bit[63:0]],idx = 1;
//对稀疏分布的元素进行初始化
repeat(64)begin
assoc[idx] = idx;
idx = idx<<1;
end
//使用foreach遍历数组
foreach(assoc[i])
$display("assoc[%h] = %h",i,assoc[i]);
//使用函数遍历数组
if(assoc.first(idx))
begin
do
$display("assoc[%h] = %h",idx,assoc[idx]);
while(assoc.next(idx));
end
//找到并删除第一个元素
assoc.first(idx);
assoc.delete(idx);
$display("The array now has %0d elements",assoc.num);
end
- display(q[i]);
- dispaly("md[%0d][%0d]=%0d",i,j,md[i][j]);
- display("assoc[%h]=%h",i,assoc[i]);
- displayb(src[0],,src[0][0],,src[0][2:1]);
- displayh(bytes,,bytes[3],,byte[3][7]);
typedef struct{bit[7:0]r,g,b;}pixel_s;
pixel_s my_pixel;
typedef struct{int a;byte b;shortint c;int d;}my_struct_s;
typedef enum {RED,BLUE,GREEN} color; //枚举类型的创建
typedef enum{INIT,DECODE=2,IDLE} fsmtype_e; //指定枚举值
string s;
initial begin
s = "IEEE";
$display(s.getc());
$display(s.tolower());
s.putc(s.len()-1,"-");
s = (s,"P1800");
$display(s.substr(2,5));
my_log($psprintf("%s %5d",s,42));
end
task my_log (string message);
$display("@%0t: %s",$time,messgae);
endtask
实在学不动了,下周再写