System verilog 如何将“结构数组”与“信号数组”匹配?(未包装)

System verilog 如何将“结构数组”与“信号数组”匹配?(未包装),system-verilog,System Verilog,我有一个模块: module test( inout logic [3:0] data [NUM], ... inout logic anything [NUM] ); 借 我得到:无法在dut中选择数据,因为维度不匹配。 为什么?如何将解包结构与modport匹配 有很多信号,这就是为什么我想使用struct而不是几个逻辑阵列信号。你可以使用struct作为导线的数据类型,你只需要一个typedef typedef struct { logic [3:

我有一个模块:

module test(
    inout logic [3:0] data [NUM],
    ...
    inout logic       anything [NUM]
);

我得到:无法在
dut
中选择
数据,因为维度不匹配。

为什么?如何将解包结构与modport匹配


有很多信号,这就是为什么我想使用
struct
而不是几个逻辑阵列信号。

你可以使用struct作为导线的数据类型,你只需要一个
typedef

typedef struct {
  logic [3:0] data;
  ...
  logic       anything; 
} dut_t;
tri dut_t dut[NUM];
(有关更详细的说明,请参阅)

但更大的问题是,不能对结构的数组进行切片以获得结构成员数组。您只能选择数组的一个元素,然后选择一个成员,即
dut[0]。数据

你必须这么做

typedef struct {
  logic [3:0] data[NUM];
  ...
  logic       anything[NUM]; 
} dut_t;
tri dut_t dut;

这可能会破坏你想做的事情的目的

您可以使用结构作为连接的数据类型,您只需要一个
typedef

typedef struct {
  logic [3:0] data;
  ...
  logic       anything; 
} dut_t;
tri dut_t dut[NUM];
(有关更详细的说明,请参阅)

但更大的问题是,不能对结构的数组进行切片以获得结构成员数组。您只能选择数组的一个元素,然后选择一个成员,即
dut[0]。数据

你必须这么做

typedef struct {
  logic [3:0] data[NUM];
  ...
  logic       anything[NUM]; 
} dut_t;
tri dut_t dut;

这可能会破坏你想做的事情的目的

我所有的信号都不是三态的。是的,我忘了这是systemverilog的弱点之一。。。谢谢你的确认!我所有的信号都不是三态的。是的,我忘了这是systemverilog的弱点之一。。。谢谢你的确认!