.pop_~と.sizeの併用

概要

全ての配列に対して、popしながら処理をする

ソースコード


間違い

int data[$];
  int dt;
  $display("## push random number");
  repeat(10)data.push_back($random);
  for(int i=0;i<data.size();i++)begin
    dt=data[i];
    $display("%0d) data=%0d",i,dt);
  end
 
  $display("## pop_front array");
  for(int i=0;i<data.size();i++)begin
    dt=data.pop_front();
    $display("%0d) data=%0d",i,dt);
  end
 

dataに10個の乱数をpushし、すべてをpopする。

シミュレーション結果
## push random number
  0) data=303379748
  1) data=-1064739199
  2) data=-2071669239
  3) data=-1309649309
  4) data=112818957
  5) data=1189058957
  6) data=-1295874971
  7) data=-1992863214
  8) data=15983361
  9) data=114806029
  ## pop_front array
  0) data=303379748
  1) data=-1064739199
  2) data=-2071669239
  3) data=-1309649309
  4) data=112818957
 
10個のpushについては確認できたが、pop側が5個しか出来ていない。


修正後

int data[$];
  int dt;
  $display("## push random number");
  repeat(10)data.push_back($random);
  for(int i=0;i<data.size();i++)begin
    dt=data[i];
    $display("%0d) data=%0d",i,dt);
  end
 
  $display("## pop_front array");
  for(int i=0;data.size()>0;i++)begin
    dt=data.pop_front();
    $display("%0d) data=%0d",i,dt);
  end
 
popすることでdata.sizeは変化してしまう。
for(int i=0;i<data.size();i++)begin
for(int i=0;data.size()>0;i++)begin
と変更。


  • ぼくもよく同じ間違えをしていました。 - ともすけ 2012-07-07 00:43:08

Top > 言語 > verilog > バグ事例 > .pop_~と.sizeの併用
link_pdfプラグインはご利用いただけなくなりました。























-

最終更新:2009年02月04日 10:10