Jump to content

Florin Oancea

Members
  • Posts

    2
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Florin Oancea

  1. >You said that had no compilation issues, yet later you said you got a type-mismatch error by using UVM_HIGH instead of UVM_INFO Actually there is no issue in UVM 1.2. The issue is in UVM 1.1d. The problem was in my code and UVM 1.2 fixed it.
  2. Introduction Couple of days ago I watched a presentation of UVM1.2 by Tom Fitzpatrick, UVM evanghelist at Mentor, and I thought to give it a try and port one of our environments based on UVM1.1d. Bellow is the story I've been through. 1. Download UVM 1.2 I started by cloning UVM1.2 on my local machine: git clone http://git.code.sf.net/p/uvm/code uvm-code This will make a clone of uvm code on your computer from >>sourceforge.net<<. The clone is on branch master so you have to switch to branch UVM_1_2. cd uvm-code git checkout UVM_1_2 Or the short way : git clone http://git.code.sf.net/p/uvm/code uvm-code -b UVM_1_2 2. VE I experimented with a VE that was complex enough to make the porting interesting; it features: 3 different agent instances (passive and active) for 3 different protocols includes configuration registers, including RC registers includes virtual sequences there was a regression with fixed number of tests that we run (or rerun with same seeds) has a regression with fixed number of tests that I can run (or rerun with same seeds) and that gets 100% coverage I compiled and run individual test using NCSIM, QUESTA and VCS and I run regressions using NCSIM and QUESTA. 3. Using NCSIM Compilation stage was done by setting two flags in irun : -uvmhome=/path/to/new/uvm -uvmnoautocompile Individual test runs indicate a negligible difference : the log has identical size the test duration is about the same (+/- 5 sec for a 2..7 min test) Regressions results : regression duration was about the same for a one hour regression (+/- 3 min); for both uvm versions I used the same regression. I also run different regressions for each uvm version but with the same number of tests (50,100,200,300). The collected coverage was about the same but still worth mentioning that for UVM 1.2 was slightly lower by 1-2%. Negligible but recurent. the number of runs to reach 100% functional coverage is a bit larger in case of UVM1.2 4. Using VCS Compilation stage was done by changing uvm path : export VCS_UVM_HOME=/path/to/new/uvm Individual test runs indicate a negligible difference : the test duration is about the same (+/- 5 sec for a 2..7 min test) log has the same dimension for both versions (I was getting a number of warnings in both UVM1.1d and UVM1.2 that I didn't bother to fix) 5. Using QUESTA Compilation stage requires a little bit more effort, but it's not a chore. Basically I had to precompile and get a shared object "uvm_dpi64.so" : export UVM_HOME=/uvm-code/distrib vlib work vlog +incdir+$UVM_HOME/src $UVM_HOME/src/uvm_pkg.sv cd $UVM_HOME/examples export MTI_HOME=/mentor/10.2a-64bit/questa_sim make LIBNAME=uvm_dpi64 BITS=64 -f Makefile.questa dpi_lib cd - To run a test in "run.sh" I used the shared object: vsim -sv_lib $UVM_HOME/lib/uvm_dpi64 Individual test runs indicate a negligible difference for log size and test duration. 6. Conclusions : Migrating to UVM 1.2 it's easy and there is no compilation issues. Results indicate pretty similar behavior for all 3 simulators when it comes to performance, log size or random stability. Results collected in the regression were aligned with what I've seen in the individual runs. Although there are new features added to UVM1.2 those were not impacting in a visible way the VE. I think the new macro `uvm_info_begin|end is nice and quite useful add: implementing messages it's easier and they are more readable than before. task task_name (); ..... `uvm_info_begin("ID", "MSG", verbosity) .... `uvm_message_add_object(my object) .... `uvm_message_add_int(my int, UVM_DEC) .... `uvm_info_end .... endtask UVM 1.2 signaled an error which UVM 1.1d didn't: set_report_severity_id_action_hier(UVM_INFO,"RTR_SCOREBOARD",UVM_NO_ACTION) UVM1.1d did not signal that I used UVM_HIGH instead of UVM_INFO. Probably because in UVM 1.2 these are real enums and the type mismatch can be seen. The VE does not use the phasing mechanism, thus some of the features of UVM1.2 were not exercised. I also uploaded this guide on AMIQ's Blog page so you can check there for more updates as well.
×
×
  • Create New...