How to extend UVCs in UVM

Hello all,

  I have a UVC which is driving an interface. There is a second, very similar interface that only differs from the first by a couple signals. I'd like to extend the first UVC to implement this second interface. 

However it is not clear to me how drivers/monitors can be extended, since SV does not support task/function override with different parameters types (e.g.: I wouldn’t be able to override methods in the parent driver accepting the sequence item as parameter, since the sequence item would be of a different type in the second UVC, although this type would be a child of the first).

Since I think this is not a rare use case, is there any best practice/paradigm for doing this?
Any hint would be much appreciated.

Thanks,
Stefano.

In reply to sesposito:

uvm factory is defined for exactly this kind of applications. Just check for uvm-factory applications, you will get some idea.

In reply to sesposito:

Hello all,
I have a UVC which is driving an interface. There is a second, very similar interface that only differs from the first by a couple signals. I’d like to extend the first UVC to implement this second interface.
However it is not clear to me how drivers/monitors can be extended, since SV does not support task/function override with different parameters types (e.g.: I wouldn’t be able to override methods in the parent driver accepting the sequence item as parameter, since the sequence item would be of a different type in the second UVC, although this type would be a child of the first).

If you say your second interface differs in a few signals this means you need also a different driver and monitor. The factory does not solve this problem, because there is no inheritence for static constructs like the SV/virtual interface.
You have to implement the corresponding agent seperately.