Pre_read() callback class

Hi,
I wantto read register reg_a as zero when I have an execute access (Hprot[0] = 0)
I used as code :


  virtual function void add_callbacks();
    execution_read_zero_cbs        execution_read_zero_cb	         = execution_read_zero_cbs::type_id::create("execution_read_zero_cb", this);
    execution_read_zero_cb.env			 = this;
    regmodel.reg_a.get_fields(reg_a_fields);
	foreach (reg_a_fields[i])   begin
	  uvm_reg_field_cb::add(reg_a_fields[i], wr_ignored_to_sregcr_cb);
          uvm_reg_field_cb::add(reg_a_fields[i],execution_read_zero_cb);		
	end	
  endfunction : add_callbacks
class execution_read_zero_cbs extends ip_base_callback;
  `uvm_object_utils(execution_read_zero_cbs)

  bit check_enable;
  function new(string name = "execution_read_zero_cbs");
    super.new(name);

  endfunction: new

  
  virtual task pre_read (uvm_reg_item rw);

	bit 	   hexecute_access;  
	
	hexecute_access    = env.ip_reg_filter.last_access_is_exec;
  
    if (rw.kind == UVM_READ) begin
      if(hexecute_access == 1)
        begin
          foreach(rw.value[i]) rw.value[i] = 0;
        end
      
    end     
  endtask: pre_read 

endclass: execution_read_zero_cbs

but it does not work, could you please tell me if sthg is wrong or missing ?

best regards