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

SV вложенный modport

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

Вот задачка - есть интерфейс  и модули его использующие 
 

interface if_A (input wire clk, rst);
  lu8_t st ;
  lu1_t vld;

  lu32_t seq ;
  lu1_t  svld;

  modport in (
    input  clk, rst,
    input  st,  vld, 
    input  seq, svld
  );

  modport ou (
    input   clk, rst,
    output  st,  vld, 
    output  seq, svld
  );

  modport sou (
    output  seq, svld
  );
endinterface

//  
module A (
  if_A.in  if_a
);
...
endmodule

module B (
  if_A  if_a // if_A.ou  if_a
);
  assign if_a.st  = ...
  assign if_a.vld = ...

  C i_C (.if_a(if_a)); // .if_a(if_a.sou)
...
endmodule

module C (
  if_A.sou  if_a
);
...
endmodule

module top (...);
  if_A if_a(...);

  A i_A (.if_a(if_a));
  B i_B (.if_a(if_a));
endmodule  

При  синтезе  в Vv (v2020.2)  получаю  варнинг  на то что в модуле  B интерфейс декларирован без  modport и cоответвенно порты для сигналов интерфейса будут синтезированы как inout.
Но сам синтез корректен и все работает. Хочется навести лоск и убрать варнинг. 
При  попытке специфицировать modport if_A.ou  дает ошибку на строку подключения интерфейса к модулю C   - мол не находит sou в объявлении modport if_A.ou.

Сходу не придумал как убрать эти  варнинги.  Делать вложенные интерфейсы?  Или  можно как то определить вложенные modport?   

Удачи! Rob. 

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


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

17.07.2021 в 02:40, RobFPGA сказал:

При  попытке специфицировать modport if_A.ou  дает ошибку на строку подключения интерфейса к модулю C   - мол не находит sou в объявлении modport if_A.ou.

А если этот модпорт прокинуть отдельной сточкой?

module B
(
    if_A.ou  if_a_ou,
    if_A.sou if_a_sou
);
...

По логике, когда специфицируете отдельный модпорт, остальные опускаются, поэтому их не видно.

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


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

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

3 minutes ago, dxp said:

А если этот модпорт прокинуть отдельной сточкой?

Наверное можно и так но в реале будет неудобно  так как  модуль C  лежит глубоко в иерархии. И это  получится что надо тянуть отдельный порт/интерфейс через всю иерархию.  
При чем обидно ведь - эти же порты есть в if_A.ou  :cray:

Удачи! Rob.

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


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

1 минуту назад, RobFPGA сказал:

При чем обидно ведь - эти же порты есть в if_A.ou  :cray:

Ну, тогда передавайте в C этот модпорт да и всё. :) Или внутри модуля В добудьте эти сигналы из .ou и передайте их в С. Тул ведь не знает, про то, что там сигналы пересекаются. Ему указали конкретный модпорт, вот он его и хочет.

 

Попутно хочу спросить. У вас не возникают предупреждения при использовании вот таких интерфейсов с тремя модпортами (или с логикой внутри)? Синтезатор у меня дико матерился на неиспользуемые сигналы (которые в неиспользуемых в текущем модуле модпортах описаны). Причём по всей иерархии. Это порождало тыщи предупреждений. В итоге я отказался от логики внутри интерфейсов и от вот таких вот, где более двух модпортов.

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


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

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

20 minutes ago, dxp said:

У вас не возникают предупреждения при использовании вот таких интерфейсов с тремя модпортами (или с логикой внутри)?


Логику в интерфейсах я не использовал пока. За исключением функций для различных конверсий данных и подсчета актуальной ширины.  

С множественными  modport  проблем не было. Как в Qu так и в Vv.  Кроме  вот этих последних варнингов  в Vv.  
Но у меня не было ситуаций когда часть сигналов интерфейса  нигде не используется - где то по иерархии всегда был модуль который использовал весь набор сигналов интерфейса.   

 

20 minutes ago, dxp said:

Ну, тогда передавайте в C этот модпорт да и всё. :)

Увы  так не получится - там есть сигналы которые драйвятся  в других  модулях  на одном уровне  иерархии с C. 

 

Удачи! Rob.

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


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

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

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

Подобное может возникать, когда, например, из одного модуля сигналы раздаются в другие. В первом модуле присутствуют все сигналы, а в другие раздаются по частям. И вот даже несмотря на указанный модпорт, всё равно присутствует ругань, что сигналы объявлены и неиспользуются. Такое впечатление, что прокидываемый через иерархию интерфейс как будто инстанцируется на каждом уровне (и соответственно появляются все его потроха, часть которых тут не используется), хотя по идее должны передаваться только сигналы, которые указаны в модпорте. После синтеза работает всё правильно, но тыщи предупреждений не радуют. То же самое касается логики внутри интерфейсов. Поэтому использую только простые интерфейсы "точка-точка" и их массивы (возможность метать массивы интерфейсов - это рулез).

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


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

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

1 hour ago, dxp said:

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

А  что за синтезатор?

У меня и такие случаи тоже есть - один модуль  "раздает" интерфейс на несколько  через различные modport.   
И  даже микс двух вариантов есть - два модуля  на разных уровнях иерархии через свои modport объединяются  в один интерфейс который  потом раздаётся на другие модули через свои отдельные  модпорты.  Но понятное  дело  основной интерфейс  идет по иерархии  без модпортов  как и в начальном посте.

Удачи! Rob          

 

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


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

Vivado 2018.2. Подробностей подключения не помню. Вроде прокидывания интерфейса с помощью подпорта по иерархии было достаточно, чтобы на каждом уровне получать предупреждения об неиспользуемых сигналах.

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


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

On 7/18/2021 at 10:05 PM, dxp said:

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

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

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


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

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

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

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

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

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

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

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

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

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