【问题标题】:SystemVerilog: From a vector of structs, get a vector that collects one of the fields for every structSystemVerilog:从结构向量中,获取一个向量,该向量收集每个结构的一个字段
【发布时间】: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 = {4{aux0}} & 4'b001<<mv0 
                     | {4{aux1}} & 4'b001<<mv1 
                     | {4{aux2}} & 4'b001<<mv2 
                     | {4{aux3}} & 4'b001<<mv3;

任何帮助将不胜感激。在此先感谢:)

【问题讨论】:

    标签: vector struct system-verilog


    【解决方案1】:

    SystemVerilog 没有优雅的方法来访问数组中结构的各个字段而不迭代它们。但是有一些优雅的方法可以使用串联选择 RHS 上的表达式位。

    always_comb foreach(example[i]) example[i].valid = 
                        {  {4{aux0}} & 4'b001<<mv0 
                         | {4{aux1}} & 4'b001<<mv1 
                         | {4{aux2}} & 4'b001<<mv2 
                         | {4{aux3}} & 4'b001<<mv3 }[i];
    

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 2014-07-06
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多