Specman 反思:如何使用 get_method()?

Specman reflection: How to use get_method()?

你好我想写一个通用方法check_range()作为参数raw_typevinvoutil等)和根据 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
};

};