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

示意图

相关