I’ve been using UVM/OVM since its beginnings a few years back and I have come up with several solutions that augment UVM/OVM’s standard methodology to support designs that are not inherently transaction based, specifically microprocessor core verification at core and unit level. I am now looking for some feedback from the community and the UVM designers/specialists.
I have found that in the designs I work with that generation of stimulus using transactions can often times create more overhead. An example being trying to drive pure control signals, which have no temporal transaction based nature. I want to have some top level sequence(virtual sequence) to control these signals, but there is a large overhead of allocating a transaction,assigning variables, sending the transaction to driver, just to have the driver take the transaction variables and directly assign them to the interface to be driven into the DUT. There are cases where transactions do make sense for the designs I work with, but my gripe with UVM/OVM’s methodology and examples are there aren’t any that showcase issues of control based signal designs like I have described above.
Along the same lines, the monitor/scoreboard concept also creates a massive overhead. Creating transactions that essentially assign interface signal values directory to transaction variables and sending that transaction through a TLM channel to a scoreboard is a huge performance killer. This also creates an issue in trying to determine when to do the modeling in the scoreboard if the correctness of the modeling depends on receiving transactions from multiple monitors which are received at different time by the scoreboard over the same delta cycle, conversely there could be one monitor which samples all the signals, but that isn’t ideal either. Since the design is not really transaction based, control signal input sent in every cycle can directly affect control signal output which has to be checked by the scoreboard every cycle.
As such, in our environment, we still use transactions to send control signal information to the drivers even though its not very efficient. However, we adopted a different methodology for our scoreboards. Since our scoreboards are in essence models of the DUT, each scoreboard is directly tied to this DUT and only that DUT, therefore trying to abstract away the scoreboard from the DUT by the use of monitors and TLMs doesn’t make sense. For that reason we decided to remove the monitors and tlm and let the scoreboard directly view all the signals going into and out of the DUT via a virtual interface. The scoreboard starts in the run phase and has a ‘forever @(posedge clock)’ nature where each cycle the modeling/checking is performed by sampling the signals of the virtual interface.
So my question is this.
Is there a better way to do this which which is more UVM centric?
My question to the UVM designers/specialists.
UVM is great for transaction based designs, can we get some focus and examples on other types of designs?
Any feedback would be greatly appreciated.