Автоматическое закрытие файла в моделировании Vivado

У меня есть тестовый стенд, который использует $fopen и $fwrite для записи выходных данных. В конце моделирования следующий код закрывает файлы:

initial
  begin
     #10000 begin
        $fclose(file);
        $finish;
     end
  end

Но что мне делать, если я хочу, чтобы симуляция длилась дольше или короче? Могу ли я каким-то образом вызвать автоматическое закрытие файлов по окончании симуляции?


person haggai_e    schedule 11.07.2017    source источник
comment
Я увидел, что содержимое файла было обрезано, поэтому я предположил, что это было причиной.   -  person haggai_e    schedule 11.07.2017
comment
Обрезается ли часть строки, где, как вы знаете, вывод заканчивается знаком \n? $finish обычно не является C exit(). Ваш симулятор должен аккуратно закрыть все дескрипторы открытых файлов. Для более длительного выполнения теста многие методологии создают семафор, и $finish закрывается, когда семафор возвращается к нулю. Глобальный семафор может быть трудно отладить, когда вы обнаружите, что тест выполняется бесконечно, поэтому вы захотите сделать больше, чем простой семафор, чтобы отслеживать, какие пути тестовой среды препятствуют завершению теста.   -  person Ross Rogers    schedule 11.07.2017
comment
Фактически он был усечен посередине строки. Я думал, что вывод может быть помещен в буфер где-нибудь в симуляторе.   -  person haggai_e    schedule 11.07.2017
comment
Я попробую семафорный подход. Звучит более надежно.   -  person haggai_e    schedule 11.07.2017
comment
Обычно операционные системы выполняют буферную запись в файлы, чтобы ваша программа работала намного быстрее. Обычно дисковые блоки, составляющие файл, имеют размер примерно 4 Кбайт, поэтому библиотека буферизует меньшие записи, которые вы делаете, до тех пор, пока не будет заполнен дисковый блок, а затем она записывает все это сразу. Если вы хотите обновить содержимое в определенных точках моделирования (скажем, в конце теста, чтобы вы могли проверять результаты во время выполнения следующего теста), вы можете вставить вызов $fflush(file); в этот момент, чтобы он написал из буферизованных данных.   -  person Mac    schedule 15.09.2017
comment
@Mac хороший момент. Проблема здесь в том, что я пытался использовать симулятор в интерактивном режиме и по-прежнему получать буферизованные записи. Думаю, одно решение - сбрасывать после каждой записи.   -  person haggai_e    schedule 15.09.2017


Ответы (1)


Вам не нужно звонить $fclose(file) перед выходом.

По умолчанию перед завершением работы симулятора все открытые файлы закрываются. Это означает, что пользователю не нужно закрывать какие-либо файлы, и закрытие выполняется автоматически симулятором.

http://verilog.renerta.com/source/vrg00016.htm

person Krabby127    schedule 11.07.2017
comment
Возможно, это не совсем то, что предполагалось, но если я запускаю симуляцию в интерактивном режиме и останавливаю ее (после того, как весь ожидаемый результат был написан), я все равно вижу усеченные файлы. Только если я закрою интерактивный симулятор или перезапущу симуляцию, я вижу недостающие части записываемых файлов. - person haggai_e; 12.07.2017