TriD 0 13 января, 2005 Опубликовано 13 января, 2005 · Жалоба Проблема, наверное, и выеденного яйца не стоит, но вот уже часа 4 мучаюсь :( Есть модуль, который описывает работу с памятью. У этого модуля один из портов описан как inout. В основном модуле для всех портов генерятся буферные элементы (ibuf, obug, ibufg, bufg). Очевидно, что для дунаправленного порта необходим такой же буфер: iobuf. Как выглядит его описание я знаю. Вопрос: КАК связать io порт модуля памяти с io портом основного модуля через этот iobuf? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 13 января, 2005 Опубликовано 13 января, 2005 · Жалоба Проблема, наверное, и выеденного яйца не стоит, но вот уже часа 4 мучаюсь :( Есть модуль, который описывает работу с памятью. У этого модуля один из портов описан как inout. В основном модуле для всех портов генерятся буферные элементы (ibuf, obug, ibufg, bufg). Очевидно, что для дунаправленного порта необходим такой же буфер: iobuf. Как выглядит его описание я знаю. Вопрос: КАК связать io порт модуля памяти с io портом основного модуля через этот iobuf? <{POST_SNAPBACK}> Если под модулями подразумевается vhdl модули одного проекта, то, если я правильно понимаю, никаких iobuf не нужно. Т.к. эти буфера нужны только для общения с внешним миром. И даже в этом случае iobuf - это макрос, который состоит из ibuf и какого-нибудь буфера типа obuft или obufe. А вообще - приведи пример кода, тогда будет гораздо понятнее, в чем проблема. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TriD 0 13 января, 2005 Опубликовано 13 января, 2005 · Жалоба Все верно. Нужно описать этот io порт во внешнем мире. Основной модуль, в который входит модуль для работы с памятью, как раз и должен общаться с внешнем миром. Все сигналы описал, а вот с этим двунаправлнным проблема! Причем, я предстваляю как выглядит этот iobuf (в хелпе все расписано), но не понимаю, как связать io порт модуля памяти (входит в состав основного модуля) и io порт основного модуля (будет физически связан с соотв. ногами микросхемы памяти). Какой фрагмент кода привести для более полного понимания ситуации просто не представляю :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 13 января, 2005 Опубликовано 13 января, 2005 · Жалоба Ну если я правильно понял твою проблему и у модуля верхнего уровня этот порт описан как inout, и у модуля памяти он тоже inout, то можно просто внутри архитектуры верхнего модуля объявить некоторый сигнал, с помощью которого и port map связать требуемые порты (модуля верхнего уровня и модуля памяти). А синтезатор должен будет сам правильно синтезировать требуемые буфера ввода-вывода... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 14 января, 2005 Опубликовано 14 января, 2005 · Жалоба entity test is port( sel : in STD_LOGIC; data : inout STD_LOGIC_VECTOR(7 downto 0) ); end test; architecture test of test is signal a, b: std_logic_vector(7 downto 0); begin a <= data; data <= b when sel = '0' else "ZZZZZZZZ"; end test; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TriD 0 14 января, 2005 Опубликовано 14 января, 2005 · Жалоба to makc Максим, ты все понял правильно. А я попытаюсь еще больше конкретизировать задачу, что бы получить более конкретный овет :) Несколько упрощенный случай представил k2i. Итак, пусть в основном модуле описан порт: data : inout std_logic_vector(15 downto 0); В модуле памяти, который входит в основной модуль, то же есть подобный порт, скажем: sdata: data : inout std_logic_vector(15 downto 0); То, что было написано k2i входит в логику управления портом в модуле памяти. Я не пойму как связать между собой порты data (физически будет подключен к микросхеме памяти) и sdata через примитив iobuf. Можно ли не использовать какие-либо примитивы и напрямую соединить sdata и data (с этим у меня проблем нет :))? Но это будет выбиваться и общей логики буферизации входных и выходных сигналов. Да и программе PACE это не понраву. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 14 января, 2005 Опубликовано 14 января, 2005 · Жалоба to TriD: Случай, хоть и упрощенный, зато по существу. ;) Теперь я понял твою проблему. В общем случае нужно "протаскивать" двунаправленную шину из внутреннего модуля во внешний. В этой цепи можно поставить соответсвующий буфер ввода-вывода, но можно воспользоваться возможностью автоматического добавления нужного буфера ввода-вывода, которую нам предоставляет синтезатор (опция Add I/O Buffers) в параметрах XST. Прикладываю пример того, что тебе нужно. Правда там реализован счетчик, но это не принципиально. ;) Теперь что касается IOBUF: это буфер ввода вывода, который позволяет от одной двунаправленной линии перейти к двум (линии ввода и линии вывода). Таким образом, в твоей задаче модуль для работы с памятью должен иметь два разных порта - in и out, а не один inout для того чтобы правильно воспользоваться IOBUF, если сам IOBUF расположен в архитектуре модуля верхнего уровня. Можно ли не использовать какие-либо примитивы и напрямую соединить sdata и data (с этим у меня проблем нет :))? Но это будет выбиваться и общей логики буферизации входных и выходных сигналов. Да и программе PACE это не понраву. В моем примере так и сделано. А что должно не понравиться PACE? sample.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TriD 0 14 января, 2005 Опубликовано 14 января, 2005 · Жалоба Маским, спасибо за помощь :) Буду разбираться. А PACE выдавал какие-то предупреждения (сейчас, правда, помалкивает :)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться