如何定期在 ModelSim 中获取内存转储?
我知道如何导出内存数据。有没有办法在 .do 文件中写入命令以每 1000 ns 或每 x 个周期导出一次内存数据?
更新:
感谢您的回答。我现在这样做的方式:
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 ...
}
可以替换“运行 10 ns”
或者,您可以使用指示模拟结束的信号
signal end_of_sim : std_logic := '0';
...
end_of_sim <= '1'
在do-file中:
when -label end_of_simulation {/end_of_sim == '1'} {
echo "End of simulation";
stop ;
#quit -f
}