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的弱点之一。。。谢谢你的确认!