OVM w/Cadence IUS

I’m looking for some opinions on how well cadence is supporting OVM (and the sverilog tb constructs in general) in ius. I’ve used ovm w/questa and rvm w/vera/vcs. Each had their problems but overall the library and language support was fairly good (ie. you could push the tools and they wouldn’t break or if they did, there were reasonable work arounds). Just getting into ius and I have to say that I’m off to a slow start. After filing 2 bug reports for internal errors in the last couple weeks, I’m wondering if it’s smart to carry on or do I put ovm on the shelf for a while and come back a few releases from now?

Neil

Hi Neil,
Make sure that you use the latest version of IUS. You can get the latest one, IUS06.20.007 from:
http://downloads.cadence.com

That’s what I heard from the support people as well and that’s no big deal. Problem though is today was my first attempt with 6.20.006, which was recommended to fix a previous issue. Tool upgrades are normal unless they happen frequently. That’s why I’m interested to see if others are having similar experiences.

Maybe mine was just bad timing?

Neil

Hi Neil,
IUS6.20.006 is fine; I was worrying that you used a really old version of IUS.
Phu

Hi Neil,

My experience with OVM is to follow OVM 1.0.1 to understand how to build verification architecture, the initial step is easy to build sequence_item, driver, sequencer, sequence library, monitor, agent, env, sve and so on. Well for virtual sequence/sequencer verification, it took several OVM Forum supports to get it work. For layered sequence/sequencer, I got much faster support from Cadence. I believe that Cadence/Mentor are pushing it hard. If Cadence/Mentor do a better job to have a detailed OVM User Library Manual, it will be great help. Just my experience with OVM. Thanks

weiping

Hi Neil,

My independent view as a user of IUS, Questa and VCS is that the current version of IUS has pretty good support for the SystemVerilog language as a whole and certainly supports all the parts of the language needed for OVM.

Cadence have produced a clear document that sets out exactly what language features IUS supports - see cdsdoc or sysverilog.pdf in your IUS doc\sysverilog install directory. I would strongly recommend reading this carefully.

Like every other SystemVerilog tool, IUS has some language issues that tend to catch new users out - the most common is probably disallowing variable initialisations (e.g. int v = 0; ) within tasks/functions but you soon get used to these and there are usually reasonably simple work arounds.

Regards,
Dave

I’ve got much the same view toward Questa… There is a path that works, but if you stray the tool will explode. It is very frustrating, it seems like all I do some days is file SR reports. It isn’t so much that the language support is lacking, but that the features don’t work 100% of the way they are supposed to, or crash when they are used in certain cases. As a simple example, there are certain cases where foreach doesn’t iterate over the right range. Fortunately MTI has been very good about squashing them and I have hope that the 6.4 series will not be so easy to break :)

Hi Neil,

below my experience on OVM with IUS
We are replacing the old verification environment in systemC with a new one in systemVerilog. We asked the help of Cadence for the start-up phase and now we are completely autonomous.
So far, to verify a data-intensive application, we have developed :
3 UVCs module based for block level testing
8 UVCs class-based for system verification

In particular some of the UVCs integrates C code (through DPI) and some other include system calls to external executable (C compiled code and Matlab) code
We have found some issues but nothing very blocking. The only annoying thing is the lack of support of the packages for parametric objects. This is something that will be recovered in the next release of the tool

Regards
Alberto

Neil,

Just to confirm you what Alberto said. For sure we did not try all the SV constructs neither did we implement all the OVM concepts but we have been working with OVM (IUS) for about 4 months and we have a pretty complex and complete class-based verification environment (several interface VCs + scoreboards + C++ ref. models). So far if it has been sometimes annoying it has never been blocking and we always found a decent way to workaround any limitation.

You can use IUS with OVM it works pretty well, and I have to say that for such a new library OVM is pretty mature.

Hope it helps,
Brice

Whether or not Systemverilog/IUS is ready for YOUR team, depends on your situation. Is management willing to invest the time & money to train the team to a competent level? Are you comfortable with doing a little of your own detective-work, to track down bugs and develop workarounds for your testbench (I’m sure you’ll need to do this from time to time)? Are you comfortable with Cadence’s application engineering support? Is your project nearing completion, with some looming deadline coming up, or is it still in the planning stages, with schedule flexibility? etc.

I had the (time) luxury to use my project’s “schedule slack” to investigate OVM (and by extension, Systemverilog.) I was/am the only full-time Systemverilog (SV) guy on my team, and I found it SV’s verification features, despite syntactical similarities with Verilog, were fundamentally different (in concept and semantics.) People with past E/VERA backgrounds are already familiar with transaction-level concepts and general programming abstraction, but hardware engineers tend to fight these all the way. (My coworkers still thing a variable-name “CSN” is preferable to ‘ChipSelect_’!) Therefore, I chose to start with a standalone testbench (without OVM), to get up to speed with the language.

Although I haven’t yet had a chance to really dig into OVM, I did learn quite a lot from architecting a standalone (non-OVM) block-level testbench project. Among the IUS (6.2s004) idiosyncracies that I’ve come across: no support for union; enum-declarations must be literals, can’t define them as (compile-time) constant expressions, const only partially implemented, Simvision’s source-code browser doesn’t ‘auto-expand’ variable-`define macros … I need Novas Verdi for that, IUS $cast operator is not as powerful as Questasim’s – can’t use it to spot-check a typecast-to-enum variable, etc.)

Despite that, I didn’t encounter a major showstopper. It’s fair to say I spent more of my time conquering my inexperience (in SV semantics and methodology), than dealing with tool-based issues. On the plus side, dealing with those ‘issues’ actually turned out to be a good mental-exercise! (…how to implement a ‘concept’ using 2 different language methods.)

Overall, I feel IUS’s Systemverilog is production-ready for ‘major development’ (example: transaction-level testbench for complex SoC ASIC.) The support engineers have workarounds for the tool’s shortcomings (which aren’t showstopping, compared to last year’s IUS 5.83.) With OVM on Cadence’s official roadmap, there’s a coherent, organizational commitment to solidifying SV support to a common-baseline (rather than just adding new language features in random combos, seemingly at random.)