I was reading about the use of uvm_void from the Accellera forum,LINK where it is mentioned that it “destroys type safety” by acting like a universal base class, similar to void* in C++. However, I am not able to fully understand what this means.
What exactly is “type safety” in this context, and how does uvm_void affect it? Why is having a universal base class considered unsafe?
Also, in UVM, components exist for the entire simulation, while transactions (objects) exist only temporarily. So what is the purpose of using something like uvm_void? Is it related to destroying objects, or does it serve some other purpose entirely?
Could someone explain the practical use case of uvm_void and why it is needed?