System verilog 是否允许在端口中使用结构打包?
我使用的大多数工具都允许,但有一个不允许。我看过说明书,IEEE1800-2017我找不到System verilog 是否允许在端口中使用结构打包?,system-verilog,System Verilog,我使用的大多数工具都允许,但有一个不允许。我看过说明书,IEEE1800-2017我找不到 module mymod ( input logic clk, input logic reset, input struct packed { logic [1:0] var0; logic [1:0] var1;
module mymod (
input logic clk,
input logic reset,
input struct packed {
logic [1:0] var0;
logic [1:0] var1;
logic [8:0] var2;
} addr,
...
我在这里和那里看到了一些示例,在端口中使用了偶数typedef结构
- 规格允许吗?在哪里
参见
7.2结构
和7.2.1压缩结构
端口可以是任何数据类型。(第23.2.2节)对于该数据类型是否可以由与端口方向交互的变量或网络信号表示,存在一些限制
但我强烈反对使用匿名类型(在您的示例中是struct),而是在公共包中声明一个带有
typedef
的用户定义类型,并在声明该端口时使用该typedef。这在尝试连接未打包的结构和枚举时消除了类型兼容性问题。端口可以是任何数据类型。(第23.2.2节)对于该数据类型是否可以由与端口方向交互的变量或网络信号表示,存在一些限制
但我强烈反对使用匿名类型(在您的示例中是struct),而是在公共包中声明一个带有
typedef
的用户定义类型,并在声明该端口时使用该typedef。这在尝试连接未打包的结构和枚举时消除了类型兼容性问题。23.2.2-端口声明。遵循变量\端口\类型。完美!谢谢端口可以是接口、事件、变量或任何允许数据类型的网络的声明,包括数组、结构或联合。23.2.2-端口声明。遵循变量\端口\类型。完美!谢谢端口可以是接口、事件、变量或任何允许数据类型(包括数组、结构或联合)的网络的声明。My struct经过打包,因此与简单逻辑总线没有兼容性问题。我们的目标也是保持逻辑简短,而不必为只使用一次的东西在包中创建新文件或额外的typedef。我知道,但这是一个坏习惯。嗯。。硬件代码充满了坏习惯,没有关键的技巧点,我很好。感谢您通知最佳实践!特别是当结构在模块之外没有意义,相当于一个简单的总线时。还有别名构造。我的结构被打包,因此与一个简单的逻辑总线没有兼容性问题。我们的目标也是保持逻辑简短,而不必为只使用一次的东西在包中创建新文件或额外的typedef。我知道,但这是一个坏习惯。嗯。。硬件代码充满了坏习惯,没有关键的技巧点,我很好。感谢您通知最佳实践!特别是当结构在模块之外没有意义,相当于一个简单的总线时。还有别名构造