Верно ли, что с современными усовершенствованными симуляторами SV RTL размер симуляции может увеличиться при использовании распакованных массивов против упакованных массивов? Если это так, это проблема, и проверяющие команды настаивают на правилах использования упакованных массивов? TIA. СанджайSystemVerilog упакованный массив против занимаемой памяти памяти без упаковки
ответ
«[ли] моделирование след может увеличиться при использовании распакованные массивов против упакованных массивов?»
Это зависит от того, как симулятор выделяет и получает доступ к своей памяти. В большинстве случаев упакованные массивы будут иметь меньший объем памяти, чем распакованные массивы. Обычно различия размеров отпечатка в не очень достаточном количестве. Когда симулятор обращается к массиву из памяти, упакованные массивы осуществляют весь массив, а распакованные массивы получают доступ к части. Когда массив большой и не требует одновременного доступа ко всему массиву, распакованные массивы имеют лучшую производительность, а затем массивы.
«это проблема, и команды разработчиков настаивают на разработке правил использования упакованных массивов?»
Если машина, работающая на симуляторе, имеет достаточную память для запуска моделирования, то это не имеет значения. Тем не менее ограничения памяти не должны быть правилом проектирования. Правила проектирования должны быть сосредоточены на качестве, производительности, силиконовых/FPGA-ограничениях и удобочитаемости. Если настройка массивов массивов помогает соответствовать реальным правилам проектирования, то уменьшенный объем памяти будет побочным эффектом.
Испытательные стенды и несинтезируемые модели - это другая история, когда речь идет о ограниченной системной памяти (или очень длительном времени моделирования). Калибровка упакованных и распакованных массивов является одним из многих факторов для изучения. Многие коммерческие симуляторы поставляются с документацией по рекомендациям, чтобы получить лучшие результаты моделирования.
Общие принципы массива:
- упакована массив - синтезируемый - лучше при доступе всего массива алгоритмических операций и поддерживает битый выбор и часть выбора (LRM § 7.4.1)
- пример:
reg [31:0] packed_array;
- пример:
- распакованы массив - синтезируемого - лучше всего, когда массив огромна или каждая запись должна быть доступна по отдельности (LRM § 7.4.2)
- пример
reg unpacked_array [31:0]; reg [31:0] unpacked_array_of_packed_arrays [15:0];
- пример
- ассоциативный массив - не Синтезируемый - лучше всего, когда требуется доступ ко всем входам, и вряд ли доступ к большинству объектов в моделировании (LRM § 7.8)
- примера
int associative_wildkey [*]; logic [127:0] associative_keytype [int];
- примера
- очередь - не синтезируемый - лучше всего, когда число записей неизвестны и доступ к данным, как трубопровод (LRM § 7,10)
- примера
bit [7:0] queue [$];
- примера
- динамический массив - не синтезируемого - лучше всего, когда необходимости создать массив на лету, хорошая практика, чтобы удалить массив, когда сделано с ним и моделирование не выполняется (LRM § 7,5)
- пример
int dynamic_array[]; initial dynamic_array = new[8];
- пример
- векторного нетто - (проверьте синтезатор руководство) - лучше всего, когда только доступ всю упакованной записи на, бит выбор и частично выбрать не допускаются (возможно, меньше меня mory footprint из-за этого). Ограничена чистых типов (LRM § 6.9.2)
- например
wire vectored [7:0] vec;
- например
Спасибо, Грег. Я должен был указать правила проектирования и проверки правил. Отредактировано выше. Я не следовал тому, что вы подразумевали под этим предложением - «Обычно различия в размере отпечатка в не очень достаточном количестве». – shparekh
Это очень легко сделать эксперимент. Используя симулятор, вам нужно создать очень большой упакованный/распакованный массив и присвоить им значения; многие симуляторы могут сообщать об использовании памяти. Тем не менее, я рекомендую вам выбрать упакованный/распакованный массив на основе намерений проекта. Кстати, если вы используете симулятор с сторонними инструментами через PLI/VPI, я думаю, что упакованный массив лучше для малого массива, потому что он может быть выбран сразу; распакованный массив, возможно, потребуется перебрать по каждому из них. Для большого массива распакованный массив лучше, потому что чтение/запись огромного блока, но для изменения данных небольшой порции - это потеря процессора и памяти. – jclin