Перейти к содержанию
    

Управление выводом из подмодуля

Приветствую.

 

Есть примерно такой код:

module Topmodule(..., inout Pin, ...);

...

assign Pin = StatePin? A : 1'dZ;

...

endmodule

Мне был бы удобно управлять выводом из вложенного модуля, что-то типа:

module TopModule(..., inout Pin, ...);

...

M1 M1(..., .Pin(Pin), ...);

...

endmodule

module M1(..., inout Pin, ...);

...

assign Pin = StatePin? A : 1'dZ;

...

endmodule

Может у Xilinx-а есть какой хитрый (*атрибут*), позволяющий такое делать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а вы пробовали так сделать без всяких атрибутов? И что у вас получилось?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В любых модулях, кроме верхнего уровня не рекомендуется использовать сигналы с третьим состоянием, так как внутри современных ПЛИС физически нет шин с третьим состоянием. Используйте отдельный сигнал data_oe (StatePin).

Изменено пользователем Lotos

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, Lotos said:

В любых модулях, кроме верхнего уровня не рекомендуется использовать сигналы с третьим состоянием, так как внутри современных ПЛИС физически нет шин с третьим состоянием.

Эти рекомендации уже давным давно не актуальны.   
Вы можете использовать tristate на  любом уровне иерархии, а если это не внешний пин то такой tristate будет синтезирован в мукс 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 29.10.2023 в 21:28, Lotos сказал:

В любых модулях, кроме верхнего уровня не рекомендуется использовать сигналы с третьим состоянием, так как внутри современных ПЛИС физически нет шин с третьим состоянием. Используйте отдельный сигнал data_oe (StatePin).

Да это всё понятно. Вопрос в том чтобы пробросить третье состояние вывода по модулям вверх по иерархии.

 

Сейчас в железе проверить возможности нет, но во всяком случае откомпилировал. Скорее всего, в первый раз, я просто что-то не то сделал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, Jackov said:

Да это всё понятно. Вопрос в том чтобы пробросить третье состояние вывода по модулям вверх по иерархии.

Проброс  tristate идет через порты inout,  как у вас во втором примере.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 час назад, RobFPGA сказал:

Проброс  tristate идет через порты inout,  как у вас во втором примере.  

Сейчас вспоминаю, что я ещё раньше тоже пытался так делать, но не получилось. Возможно в тот раз это было на Альтере. Надо ещё и там попробовать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 29.10.2023 в 22:01, RobFPGA сказал:

Вы можете использовать tristate на  любом уровне иерархии,

Это верно если синтезатор в САПР позволяет пробрасывать tristate. Но можно нарваться и придется переделывать на data_in, data_out и data_oe. Особенно будет актуально при переносе проекта в ПЛИС другого производителя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, Lotos said:

Но можно нарваться и придется переделывать на data_in, data_out и data_oe.

Последнее где я помню что такое было это был древний XIlinx Foundation ISE 3-й 4-й версии в далеких 2000-х.  
Если боятся нарваться на такие древности то тогда и в "лес" ходить не надо ... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, RobFPGA сказал:

Последнее где я помню что такое было это был древний XIlinx Foundation ISE 3-й 4-й версии в далеких 2000-х.  
Если боятся нарваться на такие древности то тогда и в "лес" ходить не надо ... 

+1. Делал такое ещё на Quartus'е лохматых годов (2005-й), всё прекрасно пробрасывалось из внутреннего по иерархии модуля на топ через inout.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я на эти грабли в чужом коде наступил пару лет назад при синтезе. Пришлось переделывать, чтобы заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 час назад, Lotos сказал:

Я на эти грабли в чужом коде наступил пару лет назад при синтезе. Пришлось переделывать, чтобы заработало.

Может была какая-то "адская смесь" из взаимных подключений выводов с тремя состояниями в самой архитектуре?

Неоднократно прокладывал шины с тремя состояниями из второго-третьего уровня вложенности наверх, без каких-либо изменений и всегда получал желаемый результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все фантазии разработчиков, которые переваривает симулятор, лучше сразу прогонять на синтезируемость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...