rakeshanigundi Posted June 21, 2012 Report Share Posted June 21, 2012 (edited) Hello, I am a new user to UVM who is trying to convert Vera Test Bench to UVM. I have a simple SV interface as interface core_if ( input core_client_clk , input core_config_clk); bit core_client_reset; bit core_config_reset; . . . . In my top_tb.sv file I am trying to register this interface (to be used in my tb_env) core_if core_intf ( .core_client_clk (core_client_clk), .core_config_clk (core_config_clk) ); uvm_config_db#(virtual vmidmt_if)::set(null, "*core_if", "core_if", core_intf) ; But I get compile error when using the "uvm_config_db" as described above Importing package quvm_addons_pkg ** Error: ../top_tb.sv(94): near "(": syntax error, unexpected '(', expecting "::" PLease advise, I tried to cross check my usage of uvm_config_db.. but could not figure out what I am doing wrong Edited June 21, 2012 by rakeshanigundi Quote Link to comment Share on other sites More sharing options...
lisakb1963 Posted June 22, 2012 Report Share Posted June 22, 2012 1.In your top tb you need to declare you need to use you interface name to be associated with a virtual interface interface core_if core_intf // is what you decleared 2. This is why you are getting an error around your set -- the compiler doesn't know what vmidmt_if is. 3. You configuration is wrong. The Path should be at the tb level not at the core_if (2nd argument) uvm_config_db #(virtual interface core_if)::set( null, "*.tb.vmidmt.*","core_vif", core_intf); // I a made up your tb path The 3rd argument should be reflective of a vif style name. This is for string look up purposes: Path Field Value "*tb.vmidmt.*" "core_vif" core_intf The arguments work like this: 1. The first is context -- which is null , top_tb.sv is the parent 2. The second is an instance call to all the UVC sub-components (both the agent's driver and monitor need to get the vif from the database) 3. The third is vif field name. 4. the fourth is the actual instance of the interface. lkb Quote Link to comment Share on other sites More sharing options...
KathleenMeade Posted June 22, 2012 Report Share Posted June 22, 2012 Hi there - One other thing you need to do is make sure the uvm_config_db() command is inside an initial block. Kathleen Quote Link to comment Share on other sites More sharing options...
rakeshanigundi Posted June 22, 2012 Author Report Share Posted June 22, 2012 LKB, thanks a lot for the reply My Bad.. I think I made a mistake while I was typing out the message, the line in my top_tb.sv which is giving the error looks like below uvm_config_db#(virtual interface core_if)::set(null, "*core_if", "core_if", core_intf) ; NOT uvm_config_db#(virtual vmidmt_if)::set(null, "*core_if", "core_if", core_intf) ; So by specifiying uvm_config_db#(virtual interface core_if) , the compiler should now know that core_if is virtual interface which has been included in my top_tb.sv Snippet from my top_tb.sv `include "uvm_macros.svh" `include "core_if.sv" `include "core_sv_defines.sv" `timescale 1ns/1ps module tb_top; import uvm_pkg::*; import quvm_addons_pkg::*; import core_test_pkg::* ; . . singal declarations . . // core_if is a virtual interface which is included in the file core_if.sv core_if core_intf ( .core_client_clk (core_client_clk), .core_config_clk (core_config_clk) ); // Register the interface with factory uvm_config_db#(virtual interface core_if)::set(null, "*core_if", "core_vif", core_intf) ; Above line is giving me the error as ../ top_tb.sv(82): near "(": syntax error, unexpected '(', expecting "::" Regarding your comments on the parameters to uvm_config_db.. You notice that I have the second parameter as *core_if.. I was thinking "*" wild character takes care of actual path specification.. Could you please let me know what I am still missing. Quote Link to comment Share on other sites More sharing options...
KathleenMeade Posted June 22, 2012 Report Share Posted June 22, 2012 Hello there, I think your "*core_if" is going to be an issue unless that is the name of a "component" in the TB. You may just want to use "*" for that argument. And as I mentioned, you will need to put the uvm_config_db() command inside an initial begin/end block. I've been doing this: initial begin uvm_config_db#(virtual core_if)::set(null, "*", "core_vif", core_intf); run_test(); end Kathleen Quote Link to comment Share on other sites More sharing options...
rakeshanigundi Posted June 22, 2012 Author Report Share Posted June 22, 2012 Hi Kathleen, Thanks a tonne.. You suggestion of making initial begin uvm_config_db#(virtual core_if)::set(null, "*", "core_vif", core_intf); run_test(); end Worked for me.. -Rakesh Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.