- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已将变量名称存储在另一个变量中,我想从原始变量中检索值。
例如:
var var_A: list of uint = {1,3,2};
var var_A_str:string = "var_A";
//现在我想使用 var_A_str 打印 var_A 值列表。我该怎么做?
print $var_A_str;
最佳答案
这称为内省(introspection)或反射(reflection)。您必须使用 Specman 的 rf_manager
。在文档中搜索它。但是,文档并未向您展示该单元具有的所有方法。如果您真的想查看所有方法,请运行这段代码:
extend sys {
run() is also {
var rf_man : rf_struct = rf_manager.get_exact_subtype_of_instance(rf_manager);
out(" RF Manager:");
for each (meth) in rf_man.get_declared_methods() {
print meth;
};
};
};
我不确定如何遍历列表元素,但您可以使用此代码段查看对对象实例成员(不是子例程的变量)的引用的方法。
extend sys {
A : list of uint;
keep A == {1;3;2};
run() is also {
var variable_name := "A";
var rf_obj: rf_struct = rf_manager.get_exact_subtype_of_instance(sys);
var rf_i : rf_field = rf_obj.get_field(variable_name);
print rf_i;
var rf_rf_i := rf_manager.get_exact_subtype_of_instance(rf_i);
out ( "#\n# RF_RFI\n#");
for each (meth) in rf_rf_i.get_declared_methods() {
print meth;
};
};
};
在我的版本 ( 8.2 ) 中打印:
Starting the test ... Running the test ... rf_i = rf_field 'A', line 7 in @rf_test4 # # RF_RFI # meth = rf_method 'get_type', Specman's private modules meth = rf_method 'is_physical', Specman's private modules meth = rf_method 'get_svtp_pack', Specman's private modules meth = rf_method 'set_svtp_pack', Specman's private modules meth = rf_method 'is_ungenerated', Specman's private modules meth = rf_method 'is_const', Specman's private modules meth = rf_method 'is_unit_instance', Specman's private modules meth = rf_method 'is_port_instance', Specman's private modules meth = rf_method 'is_reference', Specman's private modules meth = rf_method 'get_constrained_types', Specman's private modules meth = rf_method 'get_deep_copy_attr', Specman's private modules meth = rf_method 'get_value', Specman's private modules meth = rf_method 'set_value', Specman's private modules meth = rf_method 'get_value_unsafe', Specman's private modules meth = rf_method 'get_all_when_value_unsafe', Specman's private modules meth = rf_method 'set_value_unsafe', Specman's private modules meth = rf_method 'set_value_const_reassign_unsafe', Specman's private modules meth = rf_method 'get_interface_port_prefix', Specman's private modules meth = rf_method 'get_interface_port_suffix', Specman's private modules meth = rf_method 'is_gen_intelligen', Specman's private modules meth = rf_method 'get_long_name', Specman's private modules meth = rf_method 'get_implicit_constraints', Specman's private modules meth = rf_method 'make_path', Specman's private modules meth = rf_method 'make_element', Specman's private modules meth = rf_method 'make_list_size_path', Specman's private modules meth = rf_method 'is_unit_reference', Specman's private modules meth = rf_method 'get_id_name_for_port_type', Specman's private modules meth = rf_method 'get_list_upper_bound', Specman's private modules meth = rf_method 'get_sv_typename', Specman's private modules meth = rf_method 'get_sv_name_under_when', Specman's private modules meth = rf_method 'get_sv_size', Specman's private modules meth = rf_method 'sv_add_encode_lines', Specman's private modules meth = rf_method 'sv_get_decode_function_local_var_name', Specman's private modules meth = rf_method 'sv_get_decode_function_local_var_decl', Specman's private modules meth = rf_method 'sv_add_decode_lines', Specman's private modules meth = rf_method 'get_sv_field_name', Specman's private modules meth = rf_method 'get_sv_field', Specman's private modules meth = rf_method 'sv_must_be_protected_field', Specman's private modules meth = rf_method 'sv_add_get_set_field_functions', Specman's private modules meth = rf_method 'sv_add_get_set_field_function_decs', Specman's private modules meth = rf_method 'is_sv_exported_field', Specman's private modules meth = rf_method 'is_sv_determinant_field', Specman's private modules meth = rf_method 'field_configured_to_svtp_pack', Specman's private modules meth = rf_method 'get_ovm_field_macro', Specman's private modules meth = rf_method 'is_internal', Specman's private modules meth = rf_method 'get', Specman's private modules meth = rf_method 'eanalyze_lnt', Specman's private modules No actual running requested. Checking the test ...Checking is complete - 0 DUT errors, 0 DUT warnings.
我确信有一种方法可以做你想做的事,但使用 Specman 的反射接口(interface)可能非常困难。
快乐的黑客!
关于Specman:如何检索存储在另一个 var 中的 var 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331627/
在 E (specman) 中,我想声明作为列表的变量,并且我想修复它们的长度。 对于结构体的成员很容易做到: thread[2] : list of thread_t; 而对于函数中的“常规”变量,
specman 是否有类似 lex_lt(s1,s2) 的方法? (即按字典顺序比较字符串)。如果没有,是否有推荐的方法来实现相同的目标? 最佳答案 好像没有。你可以在这里做两件事。您可以在 e 中实
我制作了 2 个记录器,每个线程一个,如下所示 (THREAD=2): lsd_logger[THREADS] : list of message_logger is instance;
我想计算 Specman 中 uint 中设置的位数: var x: uint; gen x; var x_set_bits: uint; x_set_bits = ?; 最好的方法是什么? 最佳答案
我需要向specman指定测试中dut_errors的最大数量,在该限制之后测试应终止。目前,我可以选择在出现错误时终止测试或从不终止测试。 最佳答案 您还可以将check_effect更改为ERRO
我想定义一个返回大小列表的方法。例如。 my_method(): list of my_struct is { ... }; 显然会返回一个未知大小的列表。在线文档没有将大小列表作为返回值的语法定义。
我有一个测试用例,其中的行为似乎是错误的。我看到在所有世代中,num_of_red_shoes 都很高,而我希望分布更均匀。这种行为的原因是什么?如何解决? 生成结果: item type
你好, 我扩展了一个现有的 specman 测试,其中出现了一些像这样的代码: struct dataset { !register : int (bits:16); ... other me
假设我有这个单位 unit agent { init_all_regs() @clock is {…}; }; 我有一个代理列表,代理的数量各不相同。我想调用所有代理的 init_all_re
我使用一堆集合来生成受约束的随机流量,但我希望能够调用一个 Specman 宏来计算一个集合的补充,语法如下: COMPLEMENT begin domain=[0..10,24..30],
我有一个返回 const char * 的 c 方法,我将这个函数导入到我的 specman 代码中。在“e”中执行更多语句后,字符串中的值已损坏。我猜可能是因为它指的是 C 空间中的指针。 C 签名
我已将变量名称存储在另一个变量中,我想从原始变量中检索值。 例如: var var_A: list of uint = {1,3,2}; var var_A_str:string = "var_A";
在我的验证环境中,我们使用 vr_ad UVM 包,其中有一个寄存器 vr_ad_reg 的通用结构,它已扩展为环境中每个寄存器的不同类型等: reg_def TIMER_LOAD_0 TIMER 2
我有这样定义的 my_list: struct my_struct { comparator[2] : list of int(bits:16); something_else[2]
我正在为 e 使用 vr_ad 包。我在 vr_ad_reg_file my_reg_file 中定义了一个寄存器 my_reg: reg_def MY_REG MY_REG_FILE 20'h000
我有一个这样定义的 my_list_1(结构列表): struct my_struct { something[2] : list of int; something_else[2]
我是一名优秀的程序员,十分优秀!