1

信号 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' `定义了可以根据环境变化的值。请帮助我如何为上述案例撰写报道。

提前感谢大家的帮助。问候, 斯里坎特

4

2 回答 2

1

您可以编写一个简单的“定义为计算”宏来执行此操作。我在下面写了一个简短的例子。

宏应如下所示:

 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
'>

希望这可以帮助!

于 2014-03-06T16:15:53.870 回答
0

您可以自己编写一个定义为计算的宏来创建覆盖组。请注意,宏必须扩展为完整的句法元素,您不能只创建一个创建范围表达式的宏。(我有这样的宏,但不能透露)。

托尔斯滕。

于 2013-04-02T08:16:29.017 回答