Out-of-the-box UVM experience with modern day EDA tools

It surprises me often how many young engineers (read "fresh graduates/Recent College Graduates") struggle when it comes to the UNIX/GCC/Makefiles etc. I still recall our old IIT days when we did Yahoo/Altavista (Google wasn't around back in 1996) search to resolve most of such issues and of-course use some common sense. 


Coming to the recent experience, as we were preparing for our recent demo at SNUG India 2013 DCE booth, I asked some of our young team members to run few UVM tests. When it came to the 11th hour preparations I got several error reports from these young engineers with various errors related to gcc/PATH etc. In our regular UVM training sessions the Makefiles exist so not much challenge in this regard. But when you ask these folks to create Makefile on their own to run UVM, things start getting interesting. A recent error message showed to me was:


 



recompiling module apb_subsystem_top
All of 30 modules done 


g++ -w -pipe -O -I/home/student/tools/eda/synopsys/vcs-mx_VE-2011.03-SP1-2/include \


-c /home/student/tools/uvm-1.1c/src/dpi/uvm_dpi.cc
/home/student/tools/uvm-1.1c/src/dpi/uvm_hdl.c: In function ‘int uvm_hdl_set_vlog(char*, \
t_vpi_vecval*, PLI_INT32)’:
/home/student/tools/uvm-1.1c/src/dpi/uvm_hdl.c:235: error: ‘vpi_release_handle’ was \
not declared in this scope

make[1]: *** [uvm_dpi.o] Error 1



 


A quick check with them revealed they were NOT really behind any custom UVM base library/version, any recent one would do. That led us to a much simpler fix - use the out-of-the-box UVM that gets shipped along with the modern day  EDA tools. For the starters, here are the 3 most popular tools and their options to run UVM out-of-the-box:


Cadence: IUS



irun -uvm -f file_list_with_your_src_files



The -uvm option will take care of all the include-dir and the DPI stuff needed to get UVM base-lib visible and usable for your code.


Synopsys: VCS



  vcs -ntb_opts uvm -f file_list_with_your_src_files 



The option -ntb_opts uvm takes care of the UVM base class for you! BTW, NTB stands for "Native TestBench" in VCS lingo.


Mentor: Questa



qverilog -f file_list_with_your_src_files



If you are wondering who takes of the "UVM" here - your most friendly EDA simulator does that "automatically" for you - the moment it "detects" uvm_pkg in your code. 


Sure you will need to learn how to use "customized UVM-lib" at times, but the above can well be a good start. Please note that the version of UVM could be different in different tools and even among different versions of the same tool (say IUS), but assuming you are just a beginner these details shouldn't matter much to you to start with.


Good Luck with your UVM voyage!


TeamCVC


 

Comments

Popular posts from this blog

Smart one-liner for bit inversion in SystemVerilog

SystemVerilog Soft constraints usage in `uvm_do_with macro

Easier PLI integration with MPSim