Я реализовал следующую кавергруппу:
covergroup my_covergroup_cg (input string name);
enable_reg_cp : coverpoint enabled_reg[PARAM1-1:0] {
illegal_bins no_enable = {0};
}
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
illegal_bins all_features_active = {'1}; // We must not activate all features (1 bit = 1 feature active)
}
my_covergroup_cross : cross enable_reg_cp , feature_active_reg_cp {
illegal_bins il0 = (binsof (enable_reg_cp) intersect {0});
illegal_bins il1 = (binsof (feature_active_reg_cp) intersect {'1});
}
endgroup : my_covergroup_cg
При выполнении недопустимая корзина «il1» моего кросса получает значение «0x1» из feature_active_reg_mask[PARAM2-1:0] — что полностью допустимо и не соответствует {'1} (эквивалентно ..111111 : все).
Есть ли особая проблема с тем, как эти {'1} обрабатываются в области "binsof"?
{$bits(feature_active_reg_cp){1'b1}}
) Я предполагаю, что правая часть оператораintersect
определяется сама по себе, поэтому'1
принимает ширину, равную 1 (см. LRM 2012; 5.7.1). (Помещаю это как комментарий, так как я действительно не уверен) - person Unn   schedule 28.01.2020