我在编写以下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
答案 0 :(得分:0)
您的代码有两个问题。
MylocalStruct
必须是typedef
,而不是变量MylocalStruct
必须仅包含4状态类型。所以改变
byte
改为逻辑签名的[7:0] shortint unsigned
至logic [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 网络是非法的。