what does this abstract and physical means ? and whys gaps are there in between methods bits.
parameter UVM_MACRO_NUMFLAGS = 17;
//A=ABSTRACT Y=PHYSICAL
//F=REFERENCE, S=SHALLOW, D=DEEP
//K=PACK, R=RECORD, P=PRINT, M=COMPARE, C=COPY
//--------------------------- AYFSD K R P M C
parameter UVM_DEFAULT = 'b000010101010101;
parameter UVM_ALL_ON = 'b000000101010101;
parameter UVM_FLAGS_ON = 'b000000101010101;
parameter UVM_FLAGS_OFF = 0;
see in uvm_object_globals.svh
Abstract and physical bits originate from the Transaction Level Modeling (TLM) in the SystemC standard, which likely borrowed the terminology from another networking protocol. These bits can be utilized at your discretion when implementing user-defined policies.
There are no gaps; it’s just that certain bits have a corresponding “NO” setting. See How to add UVM_NOCOMPARE to fields of extended class
In the UVM field macros, we often pass flags like UVM_DEFAULT or UVM_ALL_ON, which set the COPY bit to enable automatic copying of fields.
I’ve noticed that there are additional flags like UVM_SHALLOW
and UVM_DEEP
, and I initially assumed they control whether the copy operation is shallow or deep.
However, based on how the macros behave and the UVM source code, it seems like the UVM_COPY flag already performs a deep copy by default, even when UVM_SHALLOW isn’t explicitly set.
So my question is:
➤ When the COPY bit is enabled, what exactly do the UVM_SHALLOW and `UVM_DEEP flags represent?
➤ Do they truly control shallow vs. deep copy behavior, or are they related to some other internal mechanism?