Jump to content
Sign in to follow this  
Robert.g.Liu

uvm_object::set_int_local for static integer array

Recommended Posts

In a transaction sub-class we have a simple integer array like int my_data[2]; Then we can declare the field automation like `uvm_field_sarray_int(my_data, UVM_ALL_ON).

If we call set_int_local("my_data", 'h0123456789abcdef) on that class object, we get nothing into the my_data array. 

After going through the class reference manual we can't see the expected result of this function call. And checking the body of the `uvm_field_sarray_int macro, I think the UVM_SETINT case branch appears very strange. 

 

Share this post


Link to post
Share on other sites

Here my code:

 

package pkg;
 
import uvm_pkg::*;
`include "uvm_macros.svh"
 
`define rob_field_sarray_int(ARG, FLAG) \
  `uvm_field_sarray_int(ARG, FLAG) \
  begin \
    case (what__) \
      UVM_SETINT: \
        begin \
          __m_uvm_status_container.scope.set_arg(`"ARG`"); \
          if(uvm_is_match(str__, __m_uvm_status_container.scope.get())) begin \
            if((FLAG)&UVM_READONLY) begin \
              uvm_report_warning("RDONLY", $sformatf("Readonly argument match %s is ignored",  \
                 __m_uvm_status_container.get_full_scope_arg()), UVM_NONE); \
            end else begin \
              ARG = { << $bits(ARG[0]) {$bits(ARG)'(uvm_object::__m_uvm_status_container.bitstream)} }; \
              __m_uvm_status_container.status = 1; \
            end \
          end \
        end \
    endcase \
  end
 
class set_int_local_class extends uvm_pkg::uvm_object;
 
    int data[2];
 
    `uvm_object_utils_begin(set_int_local_class)
        `rob_field_sarray_int(data, UVM_ALL_ON)
    `uvm_object_utils_end
 
    function new(string name = "set_int_local_class");
        super.new(name);
        $display("$bits(data) = %0d", $bits(data));
    endfunction: new
 
endclass: set_int_local_class
 
endpackage
 
module test;
 
pkg::set_int_local_classmy_inst = new;
 
initial begin
    longint unsigned data_val = 'h1234_5678_9abc_def0;
    my_inst.set_int_local("data", data_val);
    my_inst.print();
end
 
endmodule

The appended UVM_SETINT branch in rob_field_sarray_int macro is what I would like to have.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×