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

时间:2015-01-04 12:37:51

标签: reflection specman

您好我想写一个通用方法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: 'me' (of type my_unit_u) does not have 'get_method()' method.

如何使用反射calc_vout()来处理get_method()方法?非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

为了使用反射工具,您需要使用" rf_struct" of my_unit_u。

具体来说,请尝试以下方法:

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
};

};