Это только частичный ответ.
Вы можете использовать events[..]
или %{events}
для преобразования вектора в список, содержащий биты этого вектора. Использование его непосредственно в ограничении напрямую не работает, потому что он жалуется на отсутствие генеративного элемента:
extend sys {
events : uint(bits:4);
// neither of these compile
keep events[..].sum(it) == value(2);
keep %{events}.sum(it) == value(2);
};
Это, вероятно, случай для Cadence.
Однако разрешено создавать промежуточный список и назначать его выходу любого из этих операторов:
extend sys {
events_bits : list of bit;
keep events_bits == events[..];
};
Вы могли бы подумать, что затем можете ограничить этот список определенным количеством единиц:
extend sys {
// these constraints apply, but aren't enforced
keep events_bits.sum(it) == value(2);
keep events_bits.count(it == 1) == value(2);
};
Однако это не работает. Несмотря на то, что ограничения есть, они по какой-то причине не применяются. Это еще одна проблема, на которую стоит обратить внимание Cadence.
Подводя итог, если бы этих проблем не было, вы, вероятно, могли бы легко сосчитать их количество. Возможно, в будущей версии Specman. Я все еще надеюсь, что, по крайней мере, наблюдение за существованием операторов [..]
и %{}
поможет вам в других вещах.
person
Tudor Timi
schedule
27.11.2014