1

我希望在 Specman 中执行以下操作:

my_task() is {
   var my_var : int;
   my_var = 5;

   message(LOW,appendf("%s=[%d]",my_var.to_name(),my_var));

};

目前,我正在寻找内部任务to_name()。我不想为此创建一个结构。我希望只使用 Specman 内部。

4

3 回答 3

1

我不确定你会如何做到这一点,除非你以某种方式拥有所有字段的集合,这会给你所有字段的名称

因此,我将分支预测并假设您想要给定的所有字段struct/unit

extend sys {

    A : list of uint;
    B : int;
    cee : string;
    run() is also {

        var rf_sys: rf_struct = rf_manager.get_exact_subtype_of_instance(sys);
        for each (field) in rf_sys.get_declared_fields() {
             print field;
             print field.get_long_name();  // <-- Here's your "get_name()" function
          };
    };
};

在 8.2 版上,这会产生:

Usage: . env.sh [-32bit|-64bit] [-v] [[VAR=value]...]
Welcome to Specman Elite(64) (09.20.482-d)  -  Linked on Wed Mar  2 13:32:19
2011

Protected by U.S. Patents 6,141,630 ;6,182,258; 6,219,809; 6,347,388;
6,487,704; 6,499,132; 6,502,232; 6,519,727; 6,530,054; 6,675,138; 6,684,359;
6,687,662; 6,907,599; 6,918,076; 6,920,583; Other Patents Pending.

1 notification was modified by command 'set notify -severity=WARNING
DEPR_START_TCM_ARG_BY_REF'
Checking license ... OK
Loading /nfs/pdx/home/rbroger1/tmp.e ...
read...parse...update...patch...h code...code...clean...GC(sys)...

Doing setup ...
Generating the test using seed 1...

Starting the test ...
Running the test ...
  field = rf_field 'time', Specman's private modules
  field.get_long_name() = "time"
  field = rf_field 'logger', Specman's private modules
  field.get_long_name() = "logger"
  field = rf_field 'A', line 5 in @tmp
  field.get_long_name() = "A"
  field = rf_field 'B', line 6 in @tmp
  field.get_long_name() = "B"
  field = rf_field 'cee', line 7 in @tmp
  field.get_long_name() = "cee"
No actual running requested.
Checking the test ...
Checking is complete - 0 DUT errors, 0 DUT warnings.

如果这不能完全回答您的问题,请在您的 Specman 版本的文档中更多地查看 Specman 的自省或反射接口。警告,Cadence 的细节有点少。另外,请参阅我对“Specman:如何检索存储在另一个 var 中的 var 值”的回答。. 最后,specview您可以使用数据浏览器浏览rf_manger 自身(最好是自省)。然后,您可以找到 Cadence在其文档中未告诉您的所有功能。

于 2011-10-17T17:10:46.777 回答
0

您无法获取变量的字符串名称。虽然您可以使用get_name().

这是有道理的,因为变量只在它被声明的位置是已知的。您甚至无法在以后的扩展中访问该变量my_task()。因此,如果您已经在声明变量的位置编辑代码,只需说"my_var"而不是my_var.to_name(). (是的,可能会出现拼写错误和剪切粘贴错误。)

于 2012-05-12T20:38:41.743 回答
0

我认为这就是你要找的:

define <dump'action> "dump <exp>" as {
    out("<exp>","=[",<exp>,"]");
};

您可以在 specman 命令行或内部函数中使用此宏,例如:

foo() is {
    var a : int = 5;
    dump a;
};

会给:

a=[5]
于 2012-07-02T16:46:27.817 回答