0

ModelSimで定期的にメモリダンプを取得するにはどうすればよいですか?

メモリデータをエクスポートする方法を知っています。1000 nsごとまたはxサイクルごとにメモリデータをエクスポートするコマンドを.doファイルに書き込む方法はありますか?

アップデート:

答えてくれてありがとう。私が今それをしている方法:

mkdir -p mlog
set counter 0
set limit 30

while { true } {
   run 100 us
  incr counter +1
  mem save -o ./mlog/spram1_${counter}.mem -f mti -data binary -addr hex /ram_tb/spram1/mem
  mem save -o ./mlog/spram2_${counter}.mem -f mti -data binary -addr hex /ram_tb/spram2/mem
  /path/to/third/mem
}

これは、以前にrun -allを使用したことがあり、シミュレーションがいつ停止するかわからない場合です。もちろん、VHDLテストケースには次のようなものが必要です。

ASSERT false
    REPORT "### End of Simulation!"
    SEVERITY failure;

シミュレーションを終了します(より良い方法については、以下の回答を参照してくださいが、これは機能します)

シミュレーションの実行時間がわかっている場合は、次の方法を使用することもできます。

  mkdir -p mlog
  set counter 0
  set limit 10

  while { $counter < $limit } {
    run 1 ns
    incr counter +1
    mem save -o ./mlog/filename1_${counter}.mem -f mti -data binary -addr hex /path/to/another/mem
    mem save -o ./mlog/filename2_${counter}.mem -f mti -data symbolic -addr hex -wordsperline 1 /path/to/mem
    ## mem save -o ./mlog/anotherfile ...
  }

「10ns実行」を置き換えることができます

または、シミュレーションの終了を示す信号を使用することもできます

  signal end_of_sim   : std_logic := '0';
  ...
  end_of_sim <= '1'

およびdoファイル内:

  when -label end_of_simulation {/end_of_sim == '1'} {
    echo "End of simulation"; 
    stop ;
    #quit -f
  }
4

1 に答える 1

1

それはあなたの問題に対する素晴らしい解決策ではありませんが、それはあなたを少し助けるかもしれません。

TCL whileループでは、次の2つのコマンドを実行できます。

while ... {
    run 100 ns;
    mem save -outfile $filename...
}

ModelsimDOファイルはTCLファイルであることに注意してください。

より良い解決策は、「onbreak」関数にメモリのダンプを追加することです。

onbreak {mem save ...}

シミュレーションを中断または停止するたびに、RAMの内容が保存されます。次に、シミュレーションを中断するためのトリガーが必要です。誰か?

于 2013-02-13T09:26:11.927 に答える