如何动态约束specman中的覆盖范围项?

时间:2013-04-01 05:32:50

标签: specman function-coverage

信号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

2 个答案:

答案 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。