Specman:有没有办法通过某个索引访问不同的变量?

时间:2014-09-17 09:09:19

标签: specman e

在我的验证环境中,我有3个不同的寄存器,其中包含相同的字段:load_0load_1load_2。 现在我为每个寄存器重复了3次相同的功能,只有一行不同:

duplicated_func_0() {
    value = timer_regs.load_0; //This is the only different line (in duplicated_func_1 - load_1 is substituted

    ...

};

是否有更好的方法来访问变量名称(仅与索引不同),而不是复制相同的函数3次? 像这样:

not_duplicated_func(index : uint) {
    value = timer_regs.load_%x; //Is there a way to put the input index in the variable name instead of %x?

};

我将非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

timer_regs内部我不会定义3个变量load_0load_1load_2,而是列出相应的类型:

extend TIMER_REGS vr_ad_reg_file {
  loads[3] : list of TIMER_LOAD vr_ad_reg;
};

这样您就可以通过索引访问每个寄存器。

如果您无法更改已有的布局,只需将每个列表项限制为与现有实例相同:

extend TIMER_REGS vr_ad_reg_file {
  loads[3] : list of TIMER_LOAD vr_ad_reg;
  keep loads[0] == load_0;
  keep loads[1] == load_1;
  keep loads[2] == load_2;
};