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:从结构向量中,获取一个向量,该向量收集每个结构的一个字段的主要内容,如果未能解决你的问题,请参考以下文章

SystemVerilog结构体

system verilog 数据结构(转)

问题记录——SystemVerilog

SystemVerilog package

如何生成依赖于 systemverilog 中先前参数的参数

请教systemverilog中的interface问题