检索变量名称以便在specman中打印它们

时间:2011-10-17 09:13:38

标签: specman

我希望在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内部。

3 个答案:

答案 0 :(得分: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。另外,see my answer to "Specman: how to retrieve values of var which is stored in another var".。最后,在specview中,您可以使用数据浏览器浏览rf_manger 本身(内省最佳)。然后你可以在他们的文档中找到Cadence 没有告诉你的所有功能。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为这就是你要找的东西:

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

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

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

会给:

a=[5]