Specman 反思:如何使用 get_method()?
Specman reflection: How to use get_method()?
你好我想写一个通用方法check_range()
作为参数raw_type
(vin
或vout
或il
等)和根据 raw_type
调用相关方法 calc_vin()
或 calc_vout()
等。我尝试使用反射 get_method()
:
type raw_t : [vin, vout, il, iin];
...
extend my_unit {
check_range(raw_type : raw_t) : uint {
var meth_name : string = appendf("calc_%s", raw_type);
var meth : rf_method = me.get_method(meth_name); //This line causes an error
// ....
};
calc_vout() is {
// Calculates Vout
};
};
当我调用 check_range()
方法时,我得到 error:
Error: 'me' (of type my_unit_u) does not have 'get_method()' method.
如何使用反射 get_method()
处理 calc_vout()
方法?非常感谢您的帮助
为了使用反射功能,您需要使用 my_unit_u 的 "rf_struct"。
具体来说,尝试以下操作:
type raw_t : [vin, vout, il, iin];
...
extend my_unit {
check_range(raw_type : raw_t) : uint {
var meth_name : string = appendf("calc_%s", raw_type);
var my_unit_rf := rf_manager.get_struct_of_instance(me);
var meth : rf_method = my_unit_rf.get_method(meth_name);
// ....
};
calc_vout() is {
// Calculates Vout
};
};
你好我想写一个通用方法check_range()
作为参数raw_type
(vin
或vout
或il
等)和根据 raw_type
调用相关方法 calc_vin()
或 calc_vout()
等。我尝试使用反射 get_method()
:
type raw_t : [vin, vout, il, iin];
...
extend my_unit {
check_range(raw_type : raw_t) : uint {
var meth_name : string = appendf("calc_%s", raw_type);
var meth : rf_method = me.get_method(meth_name); //This line causes an error
// ....
};
calc_vout() is {
// Calculates Vout
};
};
当我调用 check_range()
方法时,我得到 error:
Error: 'me' (of type my_unit_u) does not have 'get_method()' method.
如何使用反射 get_method()
处理 calc_vout()
方法?非常感谢您的帮助
为了使用反射功能,您需要使用 my_unit_u 的 "rf_struct"。
具体来说,尝试以下操作:
type raw_t : [vin, vout, il, iin];
...
extend my_unit {
check_range(raw_type : raw_t) : uint {
var meth_name : string = appendf("calc_%s", raw_type);
var my_unit_rf := rf_manager.get_struct_of_instance(me);
var meth : rf_method = my_unit_rf.get_method(meth_name);
// ....
};
calc_vout() is {
// Calculates Vout
};
};