I’m getting a error for following code of uvm_driver, Can you help on this.
begin
sequence_item req;
@ (MDPORT.cb);
seq_item_port.get_next_item(req); // Gets the sequence_item
MDPORT.cb.lframe <= 1; // Start of frame
for(int i = 0; i < 8; i++) begin // Send nibbles
@(MDPORT.cb);
MDPORT.cb.data <= req.data[3:0];
req.data = req.data >> 4;
end
MDPORT.cb.lframe <= 0; // End of frame
seq_item_port.item_done(); // Indicates that the sequence_item has been consumed
end
ERROR:Unresolved hierarchical reference to “seq_item_port.get_next_item./0/” from module “\package my_pkg.ac_lpc_driver” (module not found).
You have declared seq_item_port as analysis port and trying to use built in methods of seq_item_port. Analysis port doesn’t have these methods and hence you are getting above error.
You can remove the below line as seq_item_port is implicitly declared in uvm_driver. Hope it helps.
I will tell you what I understood from your question. Correct me if I am wrong.
“sequence_item” is a class extended from “uvm_sequence_item”.
You have written the “sequence_item” class definition inside a file. That file should be included in a package so that it gets compiled. The inclusion order should be for example
seq_item_port is already declared in base class uvm_driver which you are extending from. So no need to declare it again in your ac_lpc_driver class.
Also you have declared it as analysis_port which is causing the error. get_next_item is a built in method of seq_item_port and not of analysis_port.
it’s compiled now, but with fatal error shown below,
code: if (!uvm_config_db#(virtual ac_lpc_if)::get(this, “”, “vif”, vif)) begin
`uvm_fatal(“ac_lpc_agent”, “No virtual interface specified for this agent instance”)
Error: uvm_test_top.env.agent [ac_lpc_agent] No virtual interface specified for this agent instance
It seems there is no uvm_config_db set command from the toplevel module of your UVM testbench or you are limiting the access by specifying a wrong hierarchical Path in the set Command.
If you want to retrieve a value from the config_db using the get command, you have to perform a set command to the config_db, to make sure there is a corresponding value in the config_db.
For the virtual interface the set will be done in the toplevel module of your UVM testbench.
You are getting this error because for every uvm_config_db get, there must be a corresponding set from the higher hierarchy. Looks like you have missed to set this interface from your TB Top. Please check for similar set code in your TB top:
Also you can refer to some examples of set-get and complete UVM environment from below links. I would suggest you to go through these examples and videos.
Can you try after changing
uvm_config_db#(virtual ac_lpc_if)::set( this, “env”, “vif”, vif);
to
uvm_config_db#(virtual ac_lpc_if)::set( this, “*”, “vif”, vif);
Giving * will make sure all the below hierarchy components can get from higher hierarchy.