Confusion regarding Volatile argument of configure() method for uvm_reg_field

Hi all ,

(I) Consider a register REG with field2 as SW access as “RW” and HW access as “RW” ::


field2.configure(this,  8,  0, "RW", 0, 0, 1, 1, 0) ; // Volatile argument is 0 !!
   

Lets say we do a write on this register followed by a read . So if the read value doesn’t match ( due to Hardware write ) the written value , we get mismatch error .

(II) If we modify the above code to ::


field2.configure(this,  8,  0, "RW", 1, 0, 1, 1, 0) ;  // Volatile argument is 1 !!
   

So in this case even if there is a mismatch between read value the value written into it , there would be no error since Volatile argument is set .

My question is does the volatile have significance only if the field is writable ( for SW ) ?

Now let’s say field2 above has SW access as “RO” and HW access as “RW” OR “WO” .

[QA] So during hw_reset_seq for for register containing field2 is the default value doesn’t match , will it still be an error if volatile argument
is high ?

[QB] During bit_bash or random write followed by read test on the register REG , the value expected on read would be same as default value ( as REG is RO ) . In case the HW changes the value ( other than default value ) prior to the read , we would get mismatch error on performing read operation .
So in this case if we set the volatile arg. of field2 as 1 should we get an error on mismatch ( due to HW write ) ?

In reply to ABD_91:

There is no such thing as SW versus HW access—it’s all hardware.

This might answer your question.