信号x是位'n'的一个热信号 我想只涵盖信号的一个热值,而不想对其他值感兴趣。
例如:如果信号x是3位,那么我希望x达到以下值不是。
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'`定义了可以根据环境变化的值。 请帮助我如何为上述案例撰写报道。
提前感谢您的帮助。 问候, SRIKANTH
答案 0 :(得分:1)
你可以写一个简单的'define as computed'宏来做到这一点。 我在下面写了一个简短的例子。
宏应如下所示:
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
'>
希望这有帮助!
答案 1 :(得分:0)
你可以自己编写一个定义为计算的宏来创建封面组。 请注意,宏必须扩展为完整的语法元素,您不能只创建一个创建范围表达式的宏。 (我有这样一个宏但不能透露它。)
和Thorsten。