SystemVerilog中能否用nettype定义struct?定义失败求解答
在SystemVerilog中用nettype定义struct?答案是不行的
直接给你结论:你没办法用nettype(比如wire、tri这类)直接定义struct类型。这是因为SystemVerilog里的net类型本质是用来表示硬件模块之间的物理互连信号,它们属于变量的声明类型,而非用来构建自定义数据类型的基础类型。
那正确的打开方式是什么呢?其实你可以分两步走:先独立定义好struct类型,之后再用nettype去声明该struct类型的变量。举个实际的代码例子:
// 第一步:先通过typedef定义struct类型 typedef struct { logic [31:0] addr; // 用logic作为成员的数据类型 logic [7:0] data; logic enable; } bus_packet_t; // 第二步:用wire(nettype的一种)声明该struct类型的net变量 wire bus_packet_t my_bus_wire;
这样写是完全合法的,你可以像使用普通wire一样使用这个struct类型的net——比如把它连接到模块的端口,或者用连续赋值语句驱动它。
你之前尝试失败,大概率是直接把nettype和struct定义混在一起写了,比如类似wire struct { ... } my_var;这种写法——这在SystemVerilog语法里是不被允许的,编译器肯定会报错。记住:struct是自定义数据类型,得先通过typedef把它定义出来,再用nettype或者变量类型(比如logic、reg)去声明对应类型的变量。
内容的提问来源于stack exchange,提问作者shailesh tripathi
相关产品推荐
相关产品推荐

