GAYVER 2 4 мая, 2020 Опубликовано 4 мая, 2020 · Жалоба Помню что несколько лет назад натыкался на подобное обсуждение (может даже и сам его создавал :)), но через поиск его не нашел. Собственно задача - как при описании портов устройства автоматически сгенерить несколько экземпляров одного и того же интерфйеса, используя дженерик-параметр? Насколько помню старое обсуждение - на ВХДЛе этого нельзя было сделать. Ну кроме как объединить одноименные порты в одну шину и разделить потом на нижележащие устройства. Но такой вариант мне не подходит. А вот на верилоге что то подобное можно было провернуть... Но с верилогом пока знаком очень плохо и на скорую руку гугл ничего не подсказал. Поэтому буду благодарен за примеры :) зы если использовать интрефейсы в системверилоге, то как параметризировать объявление портов модуля на топ-лвл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 4 мая, 2020 Опубликовано 4 мая, 2020 · Жалоба Всё зависит от задачи, для которой нужно "несколько экземпляров". Если говорить про Верилог, то можно через `define'ы сделать описание интерфейса и затем размножать его как хочется: `define INTERFACE_IN(x) \ input i_my_wire_``x module test_mod ( INTERFACE_IN(0), INTERFACE_IN(1), INTERFACE_IN(2), output o_my_wire ) Если же нужно уменьшить количество протов/интерфейсов объявления, то лучше задействовать array'и. Их можно объявлять как в Верилоге, так и VHDL с различными индексами. Возможно есть вариант прописать скриптом TCL объявление интерфейса, а дальше мучится с растягиванием соответствуцющих net'ов по подблокам, но я так и не нашёл как можно подсунуть тиклевский файл в виде исходника в проект. Параметризация объявления портов? Не совсем понял вопрос, но если дело в разрядностях, тогда описываете интерфейс: interface if_axi_lite #( parameter integer C_S00_AXI_DATA_WIDTH = 32, // Data width to AXI lite parameter integer C_S00_AXI_ADDR_WIDTH = 7) // Addr width to AXI lite ( input [C_S00_AXI_ADDR_WIDTH - 1 : 0] S00_AXI_awaddr, input [2 : 0] S00_AXI_awprot, input S00_AXI_awvalid, output S00_AXI_awready, ... ) дальше подставляете нужные значения при объявлении интерфейса: if_axi_lite #( .C_S00_AXI_DATA_WIDTH(32), .C_S00_AXI_ADDR_WIDTH(16)) S_00_AXI (); и подставляете по нужным интерфейсам S_00_AXI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 4 мая, 2020 Опубликовано 4 мая, 2020 · Жалоба Приветствую! 1 hour ago, GAYVER said: если использовать интрефейсы в системверилоге, то как параметризировать объявление портов модуля на топ-лвл? В общем случае задавать через параметры модуля число и тип портов в V/SV нельзя. Можно только менять параметры уже объявленных - ширину вектора/размер массивов/ в отдельных случаях тип данных порта. Поэтому вам надо подумать - либо менять принцип построения системы чтобы не требовалось "динамически" создавать порты - либо использовать что-то для автоматической генерации исходников модулей. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться