记分板数据检查使用关联数组作为存储结构

时间:2014-11-11 08:04:09

标签: specman

请问有人帮助我使用关联数组编写记分板存储结构。输出事务无序。还有更好的方法来实施数据检查吗?

4 个答案:

答案 0 :(得分:1)

e没有传统意义上的关联数组。然而,它所具有的是键控列表。这是一个例子:

struct array_entry {
  key : string;
  val : uint;
};

首先,我们需要定义键控列表中的条目的外观。我们将其建模为包含键和值对的结构。另请注意,没有什么可以阻止我们使用相同的键索引多个值字段。

extend sys {
  !assoc_array: list(key: key) of array_entry;

  run() is also {
    // adding an entry
    var s : array_entry = new;
    s.key = "foo";
    s.val = 0xdead_beef;
    assoc_array.add(s);

    // check if an entry exists
    print assoc_array.key_exists("bar");

    // get an entry
    if assoc_array.key_exists("foo") {
      print assoc_array.key("foo").val using hex;
    };
  };
};

我们使用key字段作为键来定义此类型的键控列表。这意味着元素可以按位置(它们添加到列表中的顺序)进行索引,也可以按键进行索引。

有关详细信息,请查看文档中的键控列表章节。

答案 1 :(得分:0)

感谢。那就是我在寻找的东西。我尝试用这种方式实现键控列表:

extend sys {

  !a : list (key:it) of uint(bits:4);

  run() is also {

  var b : uint = 0;
  for i from 0 to 10 {
    a.add(b);
    b = b+2;
  };
  if a.key_exists(4) {
    print a;
    print a.key(4);
    print a.key_index(4);
    print a.key_index(7);
    };
  };
};

我得到的输出是:         a =(11项,dec):4 2 0 14 12 10 8 6 4 2 0 .0
        a.key(4)= 4         a.key_index(4)= 2         a.key_index(7)= -1

显然,关键4的项目是8而不是4.我明白了吗?

答案 2 :(得分:0)

的Rahul,

您获得的结果似乎是准确的。 列表是[0] = 0,a [1] = 2,a [2] = 4,...

a.key(4)返回其键为" 4" (该项目是" 4"当然......)

a.key_index(4)返回其值为4 - 2的项目的索引(a [2] == 4)

a.key_index(7)返回其值为7的项的索引,因为没有项的键是7,结果是UNDEF

我建议您查看uvm_scoreboard。它是specman / uvm / uvm_lib中的一个开源。它还使用密钥列表。

答案 3 :(得分:0)

请不要在密钥和索引之间混淆。在 e 的键控列表中,每个条目都有。

当您使用(key: it)声明键控列表时,表示每个条目的键都是其自己的值。所以,a.key(4) = 4等等。 另一方面,你是正确的,索引4的条目是8.这意味着a[4] = 8a.key_index(8) = 4

换句话说,键控列表中的每个条目仍然具有索引,就像在常规(非键控)列表中一样。但索引与它们的关键是完全无关的。当您向列表中添加新条目时(使用add()),它会添加到下一个索引(就像使用非键控列表一样),并且获取相关密钥。