如何将“结构数组”与“信号数组”匹配? (开箱)

How to match `an array of struct` with `arrays of signals`? (unpacked)

我有一个模块:

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

来自

struct {
  logic [3:0] data; // tri-states, can't use tri in struct
  ...
  logic       anything; 
} dut [NUM];

test test_i(
  .data     (dut.data), // should be same as [3:0] data [NUM]
  ...
  .anything (dut.anything)
);

我得到:由于尺寸不匹配,无法在 dut 中 select data

为什么?我该怎么做才能将解压的结构与 modport 相匹配?

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

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

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

(详见this post

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

你必须做

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

这可能违背了你想要做的事情的目的。