结构的选定成员上的 system verilog uniq

system verilog uniq on selected members of a struct

能否将结构的选定成员限制为 uniq?

typedef struct {
   typeA a;
   typeB b;
   typeC c;
   typeD d;
} config_t;

rand config_t config[10];

例如,我可以将 {a, c} 限制为 config[10] 实例中的 uniq 吗? 如果不是,那么实现此目的的推荐方法是什么。

更新:组合对 {a,c} 在所有 config[] 实例中应该是唯一的

例子:[0]={a=ENUM_X, b=0}; [1]={a=ENUM_X, b=1}; [2]={a=ENUM_Y, b=1} ...

方法是嵌套 foreach 循环

constraint uniq {
   foreach (config[i]) foreach (config[j])
        i != j -> !(config[i].a == config[j].a && config[i].c == config[j].c); }

如果我没理解错的话,你的意思是a和c的组合必须是唯一的,而不是每一个单独的。如果是这种情况,我会尝试以某种方式组合或连接它们。然后创建一个新类型的 unique 数组,并使其等于配置的 a,c。

constraint unique_ac {
   typeAC aux[];
   aux[i].size() == config.size();
   foreach (config[i]) {
     aux[i] == {config[i].a,config[i].c};
   }
   unique {aux};
}