在 SystemVerilog 中切片结构数组

Slicing array of struct in SystemVerilog

假设有一个结构声明为:

typedef logic [7:0] Data;
typedef struct packed {
    logic valid;
    Data data;
} MyStruct;

结构数组声明为:

MyStruct foo [8];

除了使用 for 循环从所有数组元素中提取一个字段并形成自己的字段之外,还有其他方法吗?array/bit-vector?

换句话说,我希望做这样的事情,不幸的是,这似乎不是有效的 SV 语法。

assign all_valid =  & foo[7:0].valid;

您不能在 SystemVerilog 中像这样对数组进行切片,但是因为您正在尝试进行缩减,所以可以使用一种数组操作方法:

assign all_valid =  foo.and() with (item.valid);

请参阅 1800-2012 LRM 中的第 7.12.3 节数组缩减方法