System verilog 是否允许在端口中使用结构打包?

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;

我使用的大多数工具都允许,但有一个不允许。我看过说明书,IEEE1800-2017我找不到

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。我知道,但这是一个坏习惯。嗯。。硬件代码充满了坏习惯,没有关键的技巧点,我很好。感谢您通知最佳实践!特别是当结构在模块之外没有意义,相当于一个简单的总线时。还有
别名
构造