Jump to content
    

Как использовать интерфейс с параметрами в systemverilog?

Здравствуйте.
У меня есть модуль с массивом интерфейсов в портах. Как передать этот массив в тест? Я создал ещё один параметризованный тип интерфейса, где параметр - число исходных интерфейсов. Всё компилится, но, когда я запускаю симуляцию, моделсим пишет, что "illegal assignment to type 'virtual UDDCP_interface_arr' from type 'interface UDDCP_interface_arr #(11)".
Видимо, мне надо как-то передать параметр внутрь блока program, чтобы при этом параметр был виден уже в портах. Я попытался это сделать, но так не компилится, выдаёт ошибку из-за того, что рараметр объявлен позже, чем используется:

program test(UDDCP_interface UDDCP_rout, UDDCP_interface_arr #(p) UDDCP_inputs, additional_ports add_ports);
   parameter p=11;
   ...

Можно как-то сделать параметризованные порты у program? Я не нашёл примеров. Или вообще можно не городить огород, а просто как-то передавать массив интерфейсов через программу в объект класса?

На всякий случай файлы исходников прикреплю.

new.7z

Share this post


Link to post
Share on other sites

Судя по коду, у вас тестбенч в UVM-like стиле. Тогда мне не ясно зачем вам вообще модуль program? Объявили интерфейсы, сделали на них указатели и передали их в драйвер через env. 

Share this post


Link to post
Share on other sites

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

Судя по коду, у вас тестбенч в UVM-like стиле. Тогда мне не ясно зачем вам вообще модуль program? Объявили интерфейсы, сделали на них указатели и передали их в драйвер через env. 

Так было в примере. Насколько я понял, так сделано потому, что program исполняется в отдельном timing region, чтобы избежать гонок с тестируемым модулем.

Исправил вложение, чтобы точно компилилось моделсимом.

new.7z

Edited by Tsegorah

Share this post


Link to post
Share on other sites

1 minute ago, Tsegorah said:

Так было в примере. Насколько я понял, так сделано потому, что program исполняется в отдельном timing region, чтобы избежать гонок с тестируемым модулем.

т.е. это не ваш пример? Просто program одно время много кто использовал. Потом все от это этого ушли на работу с clocking_block. 

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

Share this post


Link to post
Share on other sites

40 минут назад, des00 сказал:

т.е. это не ваш пример? Просто program одно время много кто использовал. Потом все от это этого ушли на работу с clocking_block. 

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

Вы говорите "все ушли". Есть какое-то сообщество системвериложников со своей модой и традициями? Как его найти?

Share this post


Link to post
Share on other sites

Just now, Tsegorah said:

Вы говорите "все ушли". Есть какое-то сообщество системвериложников со своей модой и традициями? Как его найти?

Эмм, да это я образно выразился. Когда SV пошел, во всех статьях и книгах был program, а если посмотреть текущую литературу, там такого нет. Именно сообщества я не знаю, а так, ресурсы всякие есть. Из недавнего я в UVM снова погрузился, UVM – ClueLogic вот эта ссылка мне помогла быстро вспомнить что там и к чему. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...