verilog - 可以将互连解析为结构类型吗?
问题描述
我在详细说明以下 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
解决方案
是的,您可以将互连与结构类型一起使用。但是,要将结构声明为您需要使用的端口类型typedef
(如 Daves 回复中所示)。
此外,目的interconnect
是在模块之间提供无类型连接,因此在单个模块中使用它是没有意义的。
从 lrm 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
推荐阅读
- linux - 在汇编中,如何存储来自 scanf 调用的输入?
- javascript - 为什么 Summernote 文本编辑器的值返回空?(Vue Js)
- python - 如何从基于颜色的分组条中禁用 plotly express?
- linux - 无法在 Linux Debian 10 上使用 Java 11 和 JavaFX 从源文件编译
- powershell - Add-DnsServerResourceRecord 添加 CNAME,但添加 A 记录时出错
- r - 在数据框的几列上使用过滤器功能删除 NA
- c++ - 是否有用于排序和查找该值是否已存在于 C++ 中的函数?
- azure - Azure 应用注册刀片之间的区别
- c# - 当一个物体离它开始的地方有一定距离时,我将如何摧毁它?
- c# - 如何将 Nsubstitue 用于具有不同参数和返回值的方法?