互连可以解析为结构类型吗?

时间:2018-09-10 09:06:37

标签: verilog system-verilog verification

我在编写以下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

3 个答案:

答案 0 :(得分:0)

您的代码有两个问题。

  • MylocalStruct必须是typedef,而不是变量
  • 作为电线,MylocalStruct必须仅包含4状态类型。所以改变
    • byte改为逻辑签名的[7:0]
    • shortint unsignedlogic [15:0]

答案 1 :(得分:0)

是的,您可以将struct类型使用互连。但是,要将结构声明为端口类型,您需要使用typedef(如Daves的回复)。

此外,interconnect的重点是在模块之间提供无类型的连接,因此在单个模块中使用它是没有意义的。

从6.6.8起:

  

被声明为互连的网络或端口(互连网络或端口)表示无类型或通用网络。   此类网络或端口只能表示网络端口和终端连接,不得在任何情况下使用   程序上下文或任何连续或程序连续分配。互连网或   除了net_lvalue表达式(其中所有网络或端口都位于   表达也是互连网。即使互连阵列中的不同位被解析为不同的网络类型,也应将其视为有效,如以下示例所示。

标准中有几个示例,这是将互连与结构一起使用的又一个简单示例:

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

答案 2 :(得分:-1)

系统Verilog LRM 1800-2017的端口连接规则如下。

  

将端口变量连接到 interconnect 端口或 interconnect 网络是非法的。