我希望在 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 内部。
我希望在 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 内部。
我不确定你会如何做到这一点,除非你以某种方式拥有所有字段的集合,这会给你所有字段的名称。
因此,我将分支预测并假设您想要给定的所有字段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在其文档中未告诉您的所有功能。
您无法获取变量的字符串名称。虽然您可以使用get_name()
.
这是有道理的,因为变量只在它被声明的位置是已知的。您甚至无法在以后的扩展中访问该变量my_task()
。因此,如果您已经在声明变量的位置编辑代码,只需说"my_var"
而不是my_var.to_name()
. (是的,可能会出现拼写错误和剪切粘贴错误。)
我认为这就是你要找的:
define <dump'action> "dump <exp>" as {
out("<exp>","=[",<exp>,"]");
};
您可以在 specman 命令行或内部函数中使用此宏,例如:
foo() is {
var a : int = 5;
dump a;
};
会给:
a=[5]