Specman: how to get var values ​​that are stored in another var

I saved the name var in another var and want to get the values ​​from the original var.

for ex:

var var_A: list of uint = {1,3,2};
var var_A_str:string = "var_A";

// Now I want to print the var_A list of values ​​using var_A_str. How can i do this?

print $var_A_str;
+3
source share
1 answer

This is called introspection or reflection. You must use Specman rf_manager. Find it in the docs. However, the documents do not show you all the methods that this unit has. If you really want to see all the methods, run this piece of code:

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

I'm not sure how to iterate through the elements of a list, but you can use this snippet to look at the methods for referencing members of an instance of an object (rather than a subroutine).

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) :

   ...    ...     rf_i = rf_field 'A',  7  @rf_test4   #   # RF_RFI   #     meth = rf_method 'get_type',   Specman     meth = rf_method 'is_physical',   Specman     met = rf_method 'get_svtp_pack',   Specman     met = rf_method 'set_svtp_pack',   Specman     meth = rf_method 'is_unenerated',   Specman     meth = rf_method 'is_const',   Specman     meth = rf_method 'is_unit_instance',   Specman     meth = rf_method 'is_port_instance',   Specman     meth = rf_method 'is_reference',   Specman     met = rf_method 'get_constrained_types',   Specman     met = rf_method 'get_deep_copy_attr',   Specman     meth = rf_method 'get_value',   Specman     meth = rf_method 'set_value',   Specman     meth = rf_method 'get_value_unsafe',   Specman     meth = rf_method 'get_all_when_value_unsafe',   Specman     met = rf_method 'set_value_unsafe',   Specman     met = rf_method 'set_value_const_reassign_unsafe',   Specman     met = rf_method 'get_interface_port_prefix',   Specman     met = rf_method 'get_interface_port_suffix',   Specman     meth = rf_method 'is_gen_intelligen',   Specman     meth = rf_method 'get_long_name',   Specman     met = rf_method 'get_implicit_constraints',   Specman     meth = rf_method 'make_path',   Specman     meth = rf_method 'make_element',   Specman     meth = rf_method 'make_list_size_path',   Specman     meth = rf_method 'is_unit_reference',   Specman     meth = rf_method 'get_id_name_for_port_type',   Specman     met = rf_method 'get_list_upper_bound',   Specman     meth = rf_method 'get_sv_typename',   Specman     meth = rf_method 'get_sv_name_under_when',   Specman     met = rf_method 'get_sv_size',   Specman     meth = rf_method 'sv_add_encode_lines',   Specman     meth = rf_method 'sv_get_decode_function_local_var_name',   Specman     met = rf_method 'sv_get_decode_function_local_var_decl',   Specman     met = rf_method 'sv_add_decode_lines',   Specman     meth = rf_method 'get_sv_field_name',   Specman     meth = rf_method 'get_sv_field',   Specman     met = rf_method 'sv_must_be_protected_field',   Specman     met = rf_method 'sv_add_get_set_field_functions',   Specman     met = rf_method 'sv_add_get_set_field_function_decs',   Specman     met = rf_method 'is_sv_exported_field',   Specman     meth = rf_method 'is_sv_determinant_field',   Specman     met = rf_method 'field_configured_to_svtp_pack',   Specman     meth = rf_method 'get_ovm_field_macro',   Specman     meth = rf_method 'is_internal',   Specman     meth = rf_method 'get',   Specman     meth = rf_method 'eanalyze_lnt',   Specman       .    ...

Checking is complete - 0 DUT errors, 0 DUT warnings.

, , , Specman.

!

+2

Source: https://habr.com/ru/post/1756481/


All Articles