Valid and Invalid method() calls post lock_model()

Hi All ,

In my Testbench the Environment creates the top-most register block and then calls lock_model() .

However in the main_phase() of my test just before startting hw_reset_seq I observe that for certain volatile fields , set_compare( UVM_NO_CHECK ) is called .

The function makes the volatile fields act as non-volatile thus flashing uvm_error incase a mismatch is observed in default value of registers with volatile fields
( made non-volatile in main_phase later on )

I was wondering how is it possible since lock_model was called in build_phase() of environment itself .

Why is it that the UVM allows change after calling lock_model ?

Which method calls are considered valid although lock_model() has been called ?

On the flip-side which methods are considered illegal once lock_model() has been called .

One scenario I though of is Dynamic Address Mapping
Eg : Can I call set_base_addr for register map after lock_model()