We need to implement a UVM TB for an IP that will be shipped out in two sets of features: F1 and F2.
F2 has all that F1 has and some additional features.
The test bench needs to adapt the stimulus largely, and to a limited extent the structure according to F1 or F2. What is a better way to approach this:
1. Maintain common code files for both F1 and F2 with a lots of `ifdefs that change which code is included/excluded for F1/F2, or,
2. Write base classes for F1, extend specific classes for F2 which require additional/different code. The extended classes will contain method and data property overrides wherever required.
Request your inputs on the pros and cons of both approaches, or your recommendation with reasons.