UVM/UVMF Reference Model as a remote node in a point-to-point connection with a CODEC (DUT) to be verified

Hello Everyone,

I need your help for an unusual situation: I used to develop verification environments in which the DUTs could work “alone”, so I used to provide the same stimuli both to the DUT and the (un-timed) reference model I implemented (in the scoreboard or close to it) and then I used to compare the output transation from the DUT with respect to the ones from the golden model.

But now the situation is totally different: I have to verify a CODEC to be used as one of the two ends of a full-duplex, bi-directional, serial data link and I have no idea of how and where to implement it!
In other words, the DUT need to interact with the reference model as if the golden model were another DUT which participates to the initial handshake needed to establish the link and then, which decoded received data coming from the DUT, if any, and, when required by the test-case, sent encoded data to the DUT, which will decode that.

I would like to adopt an architectural solution which will allow to reuse the reference model, its drivers/monitors/sequences, and the DUT ones as Verification IP from block through chip to system level simulation.

Any idea?

Maybe, starting from the UVMF approach and scripts, I should create an agent and modify its driver (proxy and BFM) to make it a kind of reference model? Or, ignoring UVMF, I could implement the golden model extending the uvm_component or the uvm_driver? What do you think about that? Other/better solutions?

Thank you so much!

In reply to traf:

Could you please draw a block diagram to make your requirements more clear.

In reply to traf:
Hi Traf,
In order to maximize reuse I would separate the codec algorithm from the signaling aspect as well as the UVM component infrastructure. Separating the codec algorithm from the signaling aspect allows the algorithm creating the data stream or interacting with the other codec to be reused if the signaling used for data transfer is changed. Separating the codec algorithm from the UVM component infrastructure allows its use in a predictor independent from its use in a sequence. Complete isolation between the stimulus blocks, sequences, and analysis blocks, prediction, is necessary for vertical reuse of the environment where agents become passive because adjacent RTL replaced the active parts of an agent. If you define the model of your codec algorithm in a class that extends uvm_object then it can be used in a sequence as well as a predictor. The instance of your model in the sequence acts as an adjacent codec. The instance of your model in the predictor checks the data stream between the two codec blocks. The model in your predictor does not know if neither, either, or both of the codec blocks that are communicating are the model or rtl. If you place the class that defines your codec model in a package it will be easy to use, and reuse, wherever its needed.
-Bob