Search the Community
Showing results for tags 'driver'.
Hi, I started to play around with the basic scoreboard example provided in the uvm-systemC 1.0 beta 2 release. I was trying to enhance the example by adding a clock and a reset signal in the sc_main. Then I wanted to modify the vip_if to add a reset and clock signal. My goal was to implement a driver/monitor run phase that drives/samples the sig_data signal on the rising edge of the clock. I am struggling to do so... Is there such an example that exists or that someone could share ?
I have a DUT which will require multiple BFMs to handle the pin-wiggling of different sets of pins of the DUT. What I am wondering is whether it is possible to write just one driver class (monitor may be a different story), but then instantiate it for each of the BFMs. I have explored the technique of Polymorphic Interfaces to allow Drivers to hold a handle to the base abstract class for which each BFM interface will instantiate a "concrete" class inheriting from the abstract class in order to be type compatible. The uvm_config_db could be used to help each Driver "get" their respective "config", which will be set properly by the environment so that each Driver is talking with a different interface, but the same Driver code can be used for each instance of the agent. The goal of all of this is to make the agent/driver/monitor "generic" enough so that I don't have to write a new agent/driver/monitor class for each BFM. Assuming I can get the handle of the BFM to the Driver, then the only other problem to reconcile is how to send transactions. I could make every transaction (to all of the interfaces) a child of a parent "sequence_item" class so that the method could take in an entire Transaction of type "sequence_item" and then have each BFM cast the transaction to their child-type of sequence_item, but I don't know if BFMs are supposed to have the scope of sequence_items... In my case I would need the Driver to call the send_op() command and have each BFM override that command to process the incoming signals appropriately for their respective interface. Is any of this possible? I apologize if I have confused terms, please let me know if I can clarify what I mean on any of this.
Hi, I am implementing multiple reset inside UVC componenets (sequencer, driver, monitor and etc). When reset is asserted between get_next_item() and item_done(), the following error is issued. UVM_ERROR (SEQREQZMB) The task responsible for requesting a wait_for_grant on sequencer '....' for sequence '...' has been killed, to avoid a deadlock the sequence will be removed from the arbitration queues. I guess this error is caused that queue for sequence item already gets a item to transfer into driver. How can I fix this problem? How can I remove current item from the arbitration queue? My UVC is using run_phase(). I don't use main_phase(). So, I would like to control it using run_phse(). Thanks & Regards,