Это, скорее всего, проблема с инструментом. В соответствии с разделом 19.5.7 Разрешение значений в LRM 1800-20167, все выражения bin обрабатываются в контексте типа точки покрытия. Вы можете использовать [$:$]
в качестве альтернативы, которая представляет максимально возможное значение.
НО ... illegal_bins
в cross
не требуется, потому что пересечены только включенные ячейки точки прикрытия. И ... если вы определили явный набор бинов, то неявно не определены бины, поэтому вы должны записать это как
covergroup my_covergroup_cg (input string name);
enable_reg_cp : coverpoint enabled_reg[PARAM1-1:0] {
bins enable[] = {[1:$]}; // will be split into N bins according to auto_bins_max
}
feature_active_reg_cp : coverpoint feature_active_reg_mask[PARAM2-1:0] { // Interested in covering a PARAM2-width chunk of a 32-bit feature_active_reg
bins some_features_active = {[0:$]};
ignore_bins all_features_active = {[$:$]}; // We must not activate all features (1 bit = 1 feature active)
}
my_covergroup_cross : cross enable_reg_cp , feature_active_reg_cp;
endgroup : my_covergroup_cg
В 2 nd точке покрытия значение $ перекрывает две спецификации bin, но ignore_bins
переопределяет это.