Можно ли разрешить межсоединение по типу структуры?

Я получаю сообщение об ошибке при разработке приведенного ниже кода SV. Может ли межсоединение разрешено структурировать?

 struct {
    byte a;
    reg b;
    shortint unsigned c;
  } myLocalStruct;

module top;
    interconnect n;
    structData sD(n);
endmodule

module structData( myLocalStruct x);

  initial begin
    $display ("a = %b b = %b c = %h", x.a, x.b, x.c);
    $display ("a = %b b = %b c = %h", x.a, 
         x.b, x.c);
     #1  $finish;
   end
 endmodule
1
0
653
3

Ответы 3

Система Verilog LRM 1800-2017 говорит о следующем для правила подключения порта.

It shall be illegal to connect a port variable to an interconnect port or interconnect net.

если вы объявляете порт как межсоединение, вы не можете присвоить ему какую-либо переменную, и наоборот. не имеет отношения к вопросу.

Serge 11.09.2018 22:26

Две проблемы с вашим кодом.

  • MylocalStruct должен быть typedef, а не переменной
  • Как провод, MylocalStruct должен содержать только типы с 4 состояниями. Так что измени
    • byte в `логическую подпись [7: 0]
    • shortint unsigned в logic [15:0]

да, вы можете использовать межсоединение с типом структуры. Однако, чтобы объявить структуру как тип порта, вам необходимо использовать typedef (как в ответе Дейва).

Кроме того, цель interconnect состоит в том, чтобы обеспечить безтиповое соединение между модулями, поэтому нет смысла использовать его в одном модуле.

Начиная с lrm 6.6.8:

A net or port declared as interconnect (an interconnect net or port) indicates a typeless or generic net. Such nets or ports are only able to express net port and terminal connections and shall not be used in any procedural context nor in any continuous or procedural continuous assignments. An interconnect net or port shall not be used in any expression other than a net_lvalue expression in which all nets or ports in the expression are also interconnect nets. An interconnect array shall be considered valid even if different bits in the array are resolved to different net types as demonstrated in the following example.

В стандарте есть несколько примеров, вот еще один простой пример использования межсоединения со структурами:

package is_pkg;
   typedef struct {
      bit         a,b,c;
   } S;
endpackage:is_pkg

module top();
   interconnect  bus;

   tb tb(bus);
   dut dut(bus);

endmodule // top

module tb import is_pkg::*; (output S so);
   initial
     so = '{0,1,1};
endmodule // tb

module dut import is_pkg::*; (input S si);
   always @*
     $display("struct: %b%b%b", si.a, si.b, si.c);

endmodule // dut

Другие вопросы по теме