//Function: get_registers_filtered_by_address////get the registers filtered on the basis of address range specified by user `ifdefUVM_REG_ENABLE_ADDRESS_EXCLUSIONexternvirtualfunctionvoidget_registers_filtered_by_address(refuvm_regregs[$],inputuvm_hier_ehier=UVM_HIER);`endif// Function: get_fields//// Get the fields//// Get the fields in the registers instantiated in this block.// If ~hier~ is TRUE, recursively includes the fields of the registers// in the sub-blocks.//externvirtualfunctionvoidget_fields(refuvm_reg_fieldfields[$],inputuvm_hier_ehier=UVM_HIER);
//This config class basically sets user defined address range for inclusion and exclusion of registers`ifdefUVM_REG_ENABLE_ADDRESS_EXCLUSIONclassuvm_reg_address_configextendsuvm_object;`uvm_object_utils(uvm_reg_address_config)functionnew(stringname="uvm_reg_address_config");super.new(name);endfunctiontypedefstructpacked{uvm_reg_addr_tmin;uvm_reg_addr_tmax;}uvm_reg_addr_range_t;uvm_reg_addr_range_texc_range[$],inc_range[$];functionbitadd_address_exclude_range(uvm_reg_addr_tbegin_addr,uvm_reg_addr_tend_addr);
`ifdefUVM_REG_ENABLE_ADDRESS_EXCLUSION//This basically include or exclude registers on the basis of address range defined by userfunctionvoiduvm_reg_block::get_registers_filtered_by_address(refuvm_regregs[$],inputuvm_hier_ehier=UVM_HIER);uvm_reg_addr_tblock_addr;uvm_reg_addr_treg_addr;uvm_regtemp_regs[$];uvm_reg_address_configcfg_obj=null;uvm_reg_address_config::uvm_reg_addr_range_texc[$],inc[$];intdelete_reg_ind[$];get_registers(regs,hier);if(uvm_config_db#(uvm_reg_address_config)::get(null,{"REG::",this.get_full_name()},"UVM_REG_EXCLUSION_ADDRESS_RANGE",cfg_obj))beginexc=cfg_obj.exc_range;inc=cfg_obj.inc_range;foreach(regs[i])beginreg_addr=regs[i].get_offset();foreach(inc[j])beginif((reg_addr<inc[j].min)||(reg_addr>inc[j].max))begin