Jump to content
    

SystemVerilog. Параметризованные интерфейсы.

Потихоньку знакомлюсь с SystemVerilog.

Вопрос собственно в том можно-ли с помощью параметров интерфейса добавить / исключить сигналы.

К примеру в шине AXIS подшина USER может иметь разный размер или отсутствовать вовсе.

Порадовавшись поддержке generate в интерфейсах получил...

interface axis_if #(parameter int DATA_W = 16, USER_W = 0)
                   (input wire logic aclk, aresetn);

  logic[DATA_W-1 : 0] tdata;
  logic               tvalid, tlast, tready;
  logic[USER_W-1 : 0] tuser;

  if (USER_W > 0) begin
    modport m ( input tready, output tdata, tvalid, tlast, tuser );
    modport s ( input tdata, tvalid, tlast, tuser, output tready );
  end
  else begin
    modport m ( input tready, output tdata, tvalid, tlast );
    modport s ( input tdata, tvalid, tlast, output tready );
  end

endinterface

Код синтаксически верный, но не рабочий. Полагаю из-за дополнительного уровня созданного generate.

Очевидное решение с созданием разных modport душу как-то не греет. В общем хотелось-бы понять как делать правильно.

Share this post


Link to post
Share on other sites

Размер параметром задать можно, а вот рулить объявлением - нет. Ну, и с modport тоже всё плохо - в generate это нельзя по той причине, что вы указали - оно вводит уровень иерархии, а modport - это вообще не иерархическая вещь. Раньше мы с энтузиазмом использовали generate for для модпортов (генерить их количество по параметру), но позднее это стало нельзя  квеста 10.7 уже уверенно забривала такое).

Share this post


Link to post
Share on other sites

On 10/19/2021 at 6:47 PM, Asb said:

Вопрос собственно в том можно-ли с помощью параметров интерфейса добавить / исключить сигналы.

А нужно ли это? Если какой-то сигнал не используется, просто не указываете его, и он успешно оптимизируется.

Share this post


Link to post
Share on other sites

4 hours ago, attaboy said:

А нужно ли это? Если какой-то сигнал не используется, просто не указываете его, и он успешно оптимизируется.

Ага, xilinx vivado любит тихо без шума и пыли оптимизировать сигналы в их неактивное состояние.  Например, master tready в ноль.

Share this post


Link to post
Share on other sites

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

2 hours ago, likeasm said:

Ага, xilinx vivado любит тихо без шума и пыли оптимизировать сигналы в их неактивное состояние.  Например, master tready в ноль.

Все неиспользуемые сигналы и неподключенные входы обычно в 0 и садятся. И отнюдь не без шума.
Но ведь разработчик часто не обращает внимание на это "ворчание" :declare:   

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

13 hours ago, likeasm said:

Ага, xilinx vivado любит тихо без шума и пыли оптимизировать сигналы в их неактивное состояние.  Например, master tready в ноль.

ЕМНП tready один из сигналов handhsake, если его бросили в воздухе, то сами себе злобные буратины. tuser, насколько помню не относится к hanshake и на него можно свободно забить)

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...