Jump to content

Versatile UVM Scoreboard 1.0.3.0


About This File

A generic UVM Scoreboard architecture supporting multiple models, packaging abstract queues and compare methods.


What's New in Version 1.0.3.0   See changelog

Released

We have gone through years of improvement with hours of implementation and discussions within the company. Now we can proudly release version 1.0.3.0 of our UVM scoreboard. It should be close to backwards compatible (not 100%, but maybe 95% :-)), it should work with the major simulators and be compatible with UVM 1.1d, 1.2 and IEEE.

From the release notes:

###############################################################################
# RELASE NOTES for UVM scoreboard version 1.0.3
#
# August 9 2022
#
###############################################################################
This file contains information about the 1.0.3 release of the SyoSil
UVM Scoreboard. The file is structured as follows

* [1]: New features and bug Fixes
* [2]: Known limitations
* [3]: Compatibility list

###############################################################################
# [1]: New features and bug Fixes
###############################################################################
As it has been several years since the scoreboard was last updated, features and
bug fixes have been merged into one list.
The major points of interest for this release include:

  * The scoreboard now supports UVM 1.1d, 1.2 and IEEE.
  * Added no items inserted-check.
  * Add convenience functions for factory overrides in cl_syoscb, making
    configuration simpler.
  * Add XML printer and XSLT files to transform XML into HTML or GraphML.
  * Add orphan dump to file or STDOUT when queues are not empty at the end of sim.
  * Add scoreboard wrapper and filter transforms to automate instantiation
    of multiple similar scoreboards.
  * Added hash queues for *much* faster OOO comparison.
  * Add IO-2HP comparison, which is an in order comparison optimized for
    scoreboards with only 2 queues.
  * Add config knob max_queue_size, generate an error if limit is exceeded.
  * Add config knob max_search_window controlling number of entries in each
    queue that are considered for OOO comparison on STD queues.
  * Queue index and insertion index metadata added to cl_syoscb_item.
  * Miscompare tables showing failing items side-by-side to make debugging
    simpler.
  * Fix IO-based compares to work correctly on MD5 queues. Could previously
    find matches that were not in order.
  * Breaking API Change: Changed implementation of queue iterators to match
    the ListIterator interface from Java.
    * Removed iterator.is_done and iterator.get_idx
    * Changed semantics of iterator.next and iterator.previous. Will now
      advance/reverse the iterator and also return the next/previous item.
    * Made iterator.get_item_proxy private, as iterator.next/iterator.previous
      now returns the next object while operating on the iterator.
    * Added iterator.has_next, iterator.has_previous, iterator.next_index,
      iterator.previous_index methods.
  * General: Add many more tests and extensively update all documentation.

In addition to the changes listed above, several bug fixes and minor
optimizations have been implemented.

###############################################################################
# [2]: Known limitations
###############################################################################
  * The uvm_xml_printer does not handle nested arrays well. This is because
    there are no field macros for nested arrays and the underlying uvm_printer
    datastructure does not represent these.

###############################################################################
# [3]: Compatibility List
###############################################################################
The UVM scoreboard has been developed and tested with the following tools:

  * Centos Linux release 7.9
  * Make version 3.82
  * UVM version 1.1d, 1.2 and IEEE
  * Synopsys VCS® version 2022.06
  * Siemens EDA® Questasim® version 2021.4
  * Cadence® Xcelium® version 21.09.003


User Feedback

Recommended Comments

It was a tar/gzip combo. Use:

 

tar xzf <file>

 

to unpack it on Linux. On Windows 7-Zip can do it but then you need to do it two times. The first time it will turn the .tgz into a .tar file which then has to be unpacked.

 

/JSA

Link to comment
Share on other sites

Hi Guys!

Two items I struggled with:

  • Didn't override cl_syoscb_queue and then add_item creates a error message saying that add_item must be overridden. cl_syoscb_queue is a abstract class and you shouldn't be able to create a instance at all. Since abstract keyword and UVM is not compatible, maybe this is possible by adding a `uvm_fatal in the new function?
  • An example with uvm_tlm_generic_payload and analysis port would be nice. I needed to change my analysis ports to uvm_sequence_item to not create a compile error when connecting monitor with the scoreboard (parameterized class type mismatch). But often it is not possible to change the already existing monitor...

Best Regards,

Thomas

 

Link to comment
Share on other sites

Your DVCon paper discusses the use of UVM Connect with the scoreboard and reference models, but the code and documentation that is the part of your download makes no mention of UVM Connect.  Is there any example code available that demonstrates the application of UVM Connect in conjunction with the scoreboard?

Link to comment
Share on other sites

Please consider a different body font for the PDF user guide that displays clearly from a full page view (Consolas, Arial, etc.).  Also, shrinking the margins a little will permit more content when viewed at full width.  It would also be nice to have a navigation pane supporting the PDF, not sure if this is possible with the Doxygen generation or not.  I attempted to solve these issues, but am unable to copy the text from the PDF for some reason.  I just get Doxygen looking syntax.

Thanks for the much needed basic scoreboard solution.  Not sure why Synopsys didn't donate VMM's Datastream Scoreboard, at least as an extended class from uvm_scoreboard (?).  No matter, you guys have filled the gap.

Best Regards,

Cory

Link to comment
Share on other sites

Some comments/answers....

@Thomas T:

Adding a uvm_fatal in the constructor is of course possible but the compilers should catch it. Some do and some don't. I do not see this a s a big issue. When we toss backwards compatibility then it can be turned into an abstract class now as UVM IEEE should support this in the factory.

More examples are always nice 🙂 The scoreboard is delivered as an end-point you can say. All the infrastructure leading upto the scoreboard is your own responsibility.. Now, you are right that you need a component which basically does a type cast on the AP in e.g. a monitor as otherwise you cannot connect it to the subscriber returned by the get_subscriber method in the scoreboard. It is not possible to return different subscribers with different types so we use the lowest common denominator which is uvm_sequence_item.  We typically call this component a filter which is a subscriber with an AP in it. Then it is daisy chained to between the monitor and subscriber coming from the scoreboard. Also note that UVM has a compare error when comparing two UVM TLM GPs. There is a +define you can set in the scoreboard to work around this bug.

@dave.burgoon

The scoreboard provided can of course work together with UVM Connect and we have done this many times. However, it is not a part of the UVM scoreboard release to show how to do this kind of integration. That is out of the scope. Again, more examples would be nice but crafting a test bench with UVM connect and using the scoreboard is at a different level which we of course can help you to accomplish.

@corydearing:
We have done some PDF tweaks in conjunction with another release and will consider carrying that over to the UVM score board also. We actually did a VMM version of this scoreboard before the VMM datastream was invented and used it successfully. Then the VMM datastream was added to VMM and people started using it. Then when we saw that the uvm_scoreboard class was empty then we revived it 😉 This scoreboard is also superior to the vmm datas tream which relies on the fact that you can compute the expected result in zero time etc. This implementation is agnostic to this since it doesn't care when the transactions are arriving due to the architectural separation as explained in the DVCon paper. 

@ALL:
We have a new version for the SCB coming up. It includes a lot of new stuff:

* Backwards compatible
* UVM IEEE compliant
* Tons of new configuration options
* Full scb dump output to HTML for browsing the transactions in a browser
* Easier setup through methods instead of factory overwrites
* Inclusion of the filters mentioned above
* Scoreboard wrapper in case you need to instantiate many scoreboards. Have been tested with 1000+ instances.

You can get this new beta release if you write to my mail: jacob AT syosil DOT com as it is too big for attaching it here.

Thanks, JSA

Link to comment
Share on other sites

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.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...