结构的选定成员上的 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};
}
能否将结构的选定成员限制为 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};
}