Как динамически ограничить диапазон покрытия предмета в specman?
Сигнал x является одним горячим сигналом битов 'n'. Я хотел бы охватить только одно горячее значение сигнала и не интересоваться другими значениями.
Пример: если сигнал х имеет 3 бита, то я бы хотел, чтобы х достигал ниже значений, которых нет.
x == 3'b001
x == 3'b010
x == 3'b100
Я старался ниже, чтобы достичь цели.
struct ABC {
x :uint(bits:n);
event pqrs;
cover pqrs is {
item x using ranges={
range([1]);
range([2]);
range([4]);
};
};
Но приведенный выше код не элегантен, поскольку 'n' `определяет значение, которое можно варьировать в зависимости от среды. Пожалуйста, помогите мне, как написать покрытие для вышеупомянутого случая.
Заранее благодарю всех за помощь. С уважением, Срикант
2 ответа
Для этого вы можете написать простой макрос "определите как вычисленный". я написал короткий пример ниже.
макрос должен выглядеть так:
define <RANGE1'struct_member> "COVER_ITEM_WITH_DEFAULT_RANGES <struct_member>" as computed {
var x:uint(bits:NBITS) = 1;
var str := append( "cover covT_e is also {",
"item ", <1>," using ranges = {");
while(x!=0){
str =append(str,"range([",x,"]);");
x=x<<1;
};
str=append(str, "};",
"}"
);
return str;
};
и вы можете использовать это в своем коде так:
<'
define NBITS 4;
import cover0;
extend sys {
field1 : uint(bits:NBITS);
event covT_e;
cover covT_e is empty;
COVER_ITEM_WITH_DEFAULT_RANGES field1;
run() is also {
for i from 1 to 20 {
gen field1;
emit covT_e;
print field1;
}; // for i from 1 to...
}; // run() is also
finalize() is also{
specman("show cover");
};
}; // extend sys
'>
надеюсь это поможет!
Вы можете написать себе макрос для определения как, который создает группу покрытия. Обратите внимание, что макрос должен расширяться до полного синтаксического элемента, вы не можете просто создать макрос, который создает выражения диапазона. (У меня есть такой макрос, но я не могу раскрыть его).
Торстен.