SystemVerilog:从结构向量中,获取一个向量,该向量收集每个结构的一个字段
Posted
技术标签:
【中文标题】SystemVerilog:从结构向量中,获取一个向量,该向量收集每个结构的一个字段【英文标题】:SystemVerilog: From a vector of structs, get a vector that collects one of the fields for every struct 【发布时间】:2021-10-15 16:59:58 【问题描述】:我有一个结构向量,我想以一种有点优雅的方式访问所有元素的一个字段。我发现为 C++ (From a vector of structs, get a vector that collects one of the fields for every struct) 发布了一个非常相似的问题。我的代码看起来有点类似于这个(我展示了一个非常简化的版本),其中example.valid
将是我想要获得的向量。
typedef struct
logic valid;
logic [2:0] a;
custom_t;
custom_t example [3:0];
logic aux0, aux1, aux2, aux3;
logic[1:0] mv0, mv1, mv2, mv3;
...
assign example.valid = 4aux0 & 4'b001<<mv0
| 4aux1 & 4'b001<<mv1
| 4aux2 & 4'b001<<mv2
| 4aux3 & 4'b001<<mv3;
任何帮助将不胜感激。在此先感谢:)
【问题讨论】:
【参考方案1】:SystemVerilog 没有优雅的方法来访问数组中结构的各个字段而不迭代它们。但是有一些优雅的方法可以使用串联选择 RHS 上的表达式位。
always_comb foreach(example[i]) example[i].valid =
4aux0 & 4'b001<<mv0
| 4aux1 & 4'b001<<mv1
| 4aux2 & 4'b001<<mv2
| 4aux3 & 4'b001<<mv3 [i];
【讨论】:
以上是关于SystemVerilog:从结构向量中,获取一个向量,该向量收集每个结构的一个字段的主要内容,如果未能解决你的问题,请参考以下文章