Параметр передачи во время создания IP-ядра в vivado

Хотя это кажется невозможным из исследований: Передача параметра в ядро ​​xci

Я разрабатываю собственное ядро, которое использует экземпляр Xilinx FIFO. Однако у верхнего модуля есть параметры, которые представлены в IP Packager, и должен изменить включенное ядро ​​FIFO.

module top();
 parameter C_FIFO_DEPTH = 256
 xilinx_fifo_core #(
  .FIFO_DEPTH(C_FIFO_DEPTH)
) my_fifo_instance (...);

Таким образом, когда кто-то создает экземпляр моего модуля, переопределяя параметр C_FIFO_DEPTH, он также изменяет глубину встроенного FIFO.

Хотя это будет работать для модулей, написанных пользователем, это не работает для экземпляров IP-ядер (xci), которые кажутся настраиваемыми только через графический интерфейс «Настроить IP».

Я отключил генерацию вне контекста, но все еще нет игральных костей.

В настоящее время я работаю над (очень грязным) решением, использующим сценарии tcl в упакованном ядре, однако отчаянно необходимо элегантное решение.


person GCon    schedule 18.03.2016    source источник


Ответы (2)


Я не могу придумать никакого элегантного решения, но вот еще три беспорядочных:

(1) просто используйте самый большой FIFO, который вам когда-либо понадобится. (Очевидно, это пустая трата площади.)

(2) создайте ряд FIFO разного размера и используйте generate case, чтобы выбрать правильный. (Только любые хорошие, если диапазон полезных размеров разумно ограничен.)

(3) не используйте блок IP - создайте свой собственный FIFO. (Вы, наверное, думали об этом.)

person Matthew Taylor    schedule 19.03.2016
comment
Спасибо за ваш ответ! 1.) Пустая площадь И приведет к другим проблемам - в моем случае это может использоваться в коммерческих целях. 2.) Разные размеры были бы хорошо, если бы они были дискретными и специфическими. Однако есть случай, когда ширина также может измениться, что приведет к слишком большому количеству комбинаций и возможностей. 3.) В лучшем случае, но только отсрочивает решение проблемы. Могу ли я создать все блоки IP, которые я буду использовать? - person GCon; 20.03.2016
comment
@GCon Я не понимаю, как (3) решает проблему. Если ваш FIFO достаточно велик, чтобы потребовать RAM, убедитесь, что вы запрограммировали его в таком стиле, что Vivado предполагает RAM. Я не понимаю, зачем вообще нужно использовать блокировку IP. - person Matthew Taylor; 20.03.2016
comment
Извините, если я казался враждебным; Я работал над этим несколько дней. Я имел в виду, что хотя вы можете создать ядро ​​FIFO и не использовать Xilinx, это будет довольно неэффективно, если вам придется разрабатывать собственный hdl для всех используемых IP-ядер. Насколько я понимаю, ваш ответ максимально близок. Либо используйте TCL для привязки изменений к родительскому ядру (настраиваемому ядру), которое переупаковывает дочерний IP (FIFO) с измененными параметрами, либо используйте настраиваемое ядро ​​(ваше предложение). Поскольку решения этой проблемы нет, я принимаю ваше предложение в качестве ответа. - person GCon; 20.03.2016

Вы можете сделать это с XPM_FIFO_xxx ядрами. Посмотрите документацию и примеры в Руководстве по библиотекам UG953. Вы также можете сделать это для ОЗУ с помощью XPM_MEMORY_xxx.

person Justin N    schedule 05.02.2020