System Verilog (8) 队列
查看代码
module tb;
int q1[$]={1,2,3,4,5};
int q2[$];
int tmp;
initial begin
tmp = q1[0]; #1;
tmp = q1[$]; #1;
q2 = q1; #1;
q2 = {}; #1;
q2[0] = 15; #1;
q2.insert(0,15); #1;
q2 = {q2,22}; #1;
q2 = {99,q2}; #1;
q2 = q2[1:$]; #1;
q2 = q2[0:$-1]; #1;
q2 = q2[1:$-1]; #1;
end
initial begin
$monitor("time %0t ns tmp=%0d q2=%p", $time, tmp,q2);
end
endmodule
编译结果
# Loading sv_std.std
# Loading work.tb(fast)
#
# vsim -voptargs=+acc=npr
# run -all
# time 0 ns tmp=1 q2='{}
# time 1 ns tmp=5 q2='{}
# time 2 ns tmp=5 q2='{1, 2, 3, 4, 5}
# time 3 ns tmp=5 q2='{}
# time 4 ns tmp=5 q2='{15}
# time 5 ns tmp=5 q2='{15, 15}
# time 6 ns tmp=5 q2='{15, 15, 22}
# time 7 ns tmp=5 q2='{99, 15, 15, 22}
# time 8 ns tmp=5 q2='{15, 15, 22}
# time 9 ns tmp=5 q2='{15, 15}
# time 10 ns tmp=5 q2='{}
# exit
# End time: 08:19:51 on Mar 31,2022, Elapsed time: 0:00:00
# Errors: 0, Warnings: 0
Done
将类的指针/句柄声明为队列
查看代码
class fruit;
string name;
function new (string name = "unknown");
this.name=name;
endfunction
endclass
module tb;
fruit list[$];
initial begin
fruit f=new("apple");
list.push_back(f);
f=new("banana");
list.push_back(f);
foreach(list[i])
begin
$display("list[%0d]=%s",i,list[i].name);
end
$display("list = %p",list);
end
endmodule
编译结果
# Loading sv_std.std
# Loading work.testbench_sv_unit(fast)
# Loading work.tb(fast)
#
# vsim -voptargs=+acc=npr
# run -all
# list[0]=apple
# list[1]=banana
# list = '{@fruit@1, @fruit@2}
# exit
# End time: 08:43:29 on Mar 31,2022, Elapsed time: 0:00:00
# Errors: 0, Warnings: 1
Done
由动态数组构成的队列
查看代码
module tb;
typedef string str_dyn[];
str_dyn list[$];
initial begin
str_dyn marvel='{"spiderman","hulk","captin American","iron man"};
str_dyn dcworld='{"Batman","superman"};
list.push_back(marvel);
list.push_back(dcworld);
foreach(list[i])
foreach(list[i][j])
$display("list[%0d][%0d]=%s",i,j,list[i][j]);
$display("list=%p",list);
end
endmodule
编译结果
# Loading sv_std.std
# Loading work.tb(fast)
#
# vsim -voptargs=+acc=npr
# run -all
# list[0][0]=spiderman
# list[0][1]=hulk
# list[0][2]=captin American
# list[0][3]=iron man
# list[1][0]=Batman
# list[1][1]=superman
# list='{'{"spiderman", "hulk", "captin American", "iron man"}, '{"Batman", "superman"}}
# exit
# End time: 08:59:06 on Mar 31,2022, Elapsed time: 0:00:01
# Errors: 0, Warnings: 3
Done
示意图