Проверка количества открытых файлов при запуске тестового стенда SystemVerilog

Я запускаю тест для сравнения выходных данных системы с набором золотых данных, сгенерированных в текстовом файле, но когда тест выполняется примерно до 2000 кадров +, я начинаю получать сообщение об ошибке, где говорится:

warning-Cannot open file
 file could not be opened. Too many open files.

Я попытался найти системную задачу в SystemVerilog, чтобы узнать, есть ли задача, которая может отображать все открытые в данный момент файлы во время выполнения теста, но я не могу ее найти. Есть ли способ сделать это?

Скорее всего, вы достигли предела операционной системы для дескрипторов открытых файлов. К верилогу это не имеет никакого отношения.

Serge 20.02.2023 15:58

Я знаю, что существует ограничение на количество доступных дескрипторов открытых файлов, но поскольку я всегда использую $fclose после завершения работы с файлом данных для каждого кадра, я бы предположил, что тест может просто повторно использовать значение для другого файла, когда Я снова вызываю $fopen, не так ли?

miner_kai 21.02.2023 04:41

Да, я это сделал, и я использовал возвращенные целочисленные значения, чтобы подтвердить, что между каждым кадром есть некоторый код, открывающий файлы, которые не принадлежат мне, потому что целочисленный идентификатор перескакивает на 2 вместо 1. Но поскольку я не единственный работающий в проекте трудно выяснить, какой фрагмент кода открывает файлы, поэтому я пытался выяснить, существует ли функция, описанная в вопросе, если нет, я думаю, мне просто нужно сделать это трудным способом, чтобы найти вне

miner_kai 22.02.2023 12:11

@miner_kai: Итак, мой ответ действительно отвечает на ваш вопрос (задачи нет, и вы можете использовать значение дескриптора). Кроме того, если вы ответите, используйте синтаксис @toolic, чтобы я получил уведомление.

toolic 22.02.2023 19:35
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
Уроки CSS 6
Уроки CSS 6
Здравствуйте дорогие читатели, я Ферди Сефа Дюзгюн, сегодня мы продолжим с вами уроки css. Сегодня мы снова продолжим с так называемых классов.
Что такое Css? Для чего он используется?
Что такое Css? Для чего он используется?
CSS, или "Каскадные таблицы стилей", - это язык стилей, используемый в веб-страницах. CSS является одним из основных инструментов веб-разработки...
0
4
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не думаю, что IEEE Std 1800-2017 предлагает какой-либо способ напрямую узнать, сколько файлов открыто в данный момент.

Однако вы можете посмотреть целочисленное значение, возвращаемое $fopen, чтобы увидеть значение последнего открытого файлового дескриптора. Когда я открываю много файлов, значение увеличивается на единицу каждый раз, когда открывается новый файл. Я пробовал это на 2 симуляторах.

Имейте в виду, что есть 2 способа вызова $fopen: многоканальный дескриптор и файловый дескриптор. Они возвращают разные значения.

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

Ответ на проблему с основной причиной:

warning-Cannot open file
 file could not be opened. Too many open files.
  • Читайте и записывайте больше файлов, используя системные задачи $readmemh, $readmemb, $writememh, $writememb. Доступ к содержимому файла с использованием массивов. Они не используют $fopen().

    См. спецификацию IEEE 1800 2017 SystemVerilog, разделы 21.4 и 21.5.

  • Альтернатива: объединить файлы, чтобы уменьшить общее количество файлов, к которым осуществляется доступ.

Другие вопросы по теме