如何将“结构数组”与“信号数组”匹配? (开箱)
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;
这可能违背了你想要做的事情的目的。
我有一个模块:
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;
这可能违背了你想要做的事情的目的。