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