System verilog 使用系统verilog中的复制初始化结构队列

System verilog 使用系统verilog中的复制初始化结构队列,system-verilog,System Verilog,当还存在未复制的元素时,如何通过复制初始化结构队列?我尝试了以下方法,但没有成功。有可能吗 typedef struct { A a; B b; C c; D d; } lp_s; //A,B,C,D : integer enums lp_s var_name[$] = '{ '{a: A_VAL0, b: B_VAL1, default:0} '{15{'{a: A_VAL1, b: B_VAL1, default:0}}}, '{a: A_VAL2

当还存在未复制的元素时,如何通过复制初始化结构队列?我尝试了以下方法,但没有成功。有可能吗

typedef struct {
 A a;
 B b;
 C c;
 D d;
} lp_s;    //A,B,C,D : integer enums

lp_s var_name[$] = '{    
     '{a: A_VAL0, b: B_VAL1, default:0}
'{15{'{a: A_VAL1, b: B_VAL1, default:0}}},
     '{a: A_VAL2, b: B_VAL2, default:0}
};
这里的错误是:

分配模式非法,原因是:复制字段超过 目标的大小

我从复制中删除了勾号

lp_s var_name[$] = '{    
         '{a: A_VAL0, b: B_VAL1, default:0}
     {15{'{a: A_VAL1, b: B_VAL1, default:0}}},
         '{a: A_VAL2, b: B_VAL2, default:0}
    };
然后错误变成:

“lp_s”类型的未打包结构不能由多个 串联运算符{15{{a:a_VAL1,b:b_VAL1,默认值:0}} 但是,可以将分配模式分配给未打包的结构。添加 用于将其转换为有效的 分配模式


或者有没有一种方法可以通过使用未打包的数组连接来实现?

您可以将显式类型添加到赋值模式中,以便在自行确定的上下文中使用它

typedef lp_s lp_sq[$];

lp_s vari[$] = { // unpacked array concatenation of struct assignment patterns
                lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM},
               lp_sq'{12{lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM}}},
                lp_s'{a: A_ENUM, b: B_ENUM, C: J_ENUM, D: D_ENUM }
};

注意,这里不能使用默认值:0,因为0不是分配给枚举的有效值类型。

工作起来很有魅力!