Как я могу регулярно получать дамп памяти в ModelSim?
Я знаю, как экспортировать данные памяти. Есть ли способ записать в файл .do команду для экспорта данных памяти каждые 1000 нс или каждые 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 нс»
в качестве альтернативы вы можете использовать сигнал, указывающий на конец симуляции
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
}