1. 程式人生 > 其它 >System Verilog (7) 佇列

System Verilog (7) 佇列

檢視程式碼

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