ESL Verification Languages. What will it be based on?
![]() |
4.0 (2) |
In the early days of RTL verification, the Verilog language was perhaps the most likely language to be found being used as a verification language as well. Others preferred the C language because of the additional flexibility it gave them and its ability to inject some degree of randomization. But it was soon realized that this was not enough and a new breed of languages was developed, primarily represented by Vera and the e language. These languages gave birth to the new verification methodologies that are now common place in the industry, namely, constrained random test pattern generation. Those languages, while great for what they do, did not seem to fully please the industry in that they started to call for a single language that could cover both design and verification. It is not clear if this really was a user driven call, or if it was a call concocted by the EDA companies to try and displace the market leaders. Whatever the reason, SystemVerilog came along to fill that need and it would appear as if this is quickly rising as a popular RTL verification language, even though it appears to have had less success with adoption as a design language.
Now, as we move to ESL, the market has responded quite loudly to the fact that SystemVerilog is not the language of choice for abstract design. The most popular languages right now fall into three camps. The first is C and C++. There are lots of people who know how to program in these languages, they are heavily used in the software domain and the systems engineers seem to quite like them. Second, there is SystemC – an extension of C++ that includes hardware specific concepts. I put this in a different camp because I believe it does significantly change the mindset of the solution space and the types of people that are likely to use it. This language allows hardware datatypes to be defined and has explicit control over concurrency. The downside is that it is a new language that must be learned even though at its heart it is still C++. Finally, there are the dataplane people who usually start in MATLAB, and find the M-language the best suited for their needs. No-one that I know of, is using SystemVerilog as a system level language and no vendor has released tools that support it above the RTL level except for inclusion of a few extensions that have made it into RTL synthesis tools.
So the question is – what will eventually happen in the verification languages space for ESL? In figure 1, we take a look at the languages that are prime candidates for adoption as an ESL design languages. There are high-synthesis tools on the market today that support all three of these. However, none of them presuppose a suitable verification language.

Figure 1: Design and Verification Languages
The C, C++ languages were deemed unsuitable for verification many years ago. This is because it leaves too much work to the verification environment developer and does not define consistent interfaces that could be used to support a 3rd party verification IP community. Just because the design flow is now potentially using them does not automatically make them the right choice for verification. Attempts were made some years ago to create a set of classes that would make it possible for SystemC to be used as a verification language. There are some people who have adopted this and it is in use in some companies, but there are severe limitations with this when compared to the capabilities provided by languages such as Vera, e or SystemVerilog. So, while we can expect to see SystemC used as a reference model, and potentially for some other parts of the verification environment, it is unlikely to become the exclusive language for the entire environment. Finally, there is the M language, and while I am not fully conversant in this language, I do not believe it provides anything that could be considered as a modern verification language. It is possible to provide a few directed test cases, but this is the extent of its capabilities.
Now we have to add into the mix that there is a strong need for a single language to be used at all levels for verification. Unlike design where there is a synthesis process that can transform from one language to another, there is no such equivalent for the verification flow. The testbench created for functional verification at the ES level must be the same testbench that is used to verify functionality in the implemented RTL model. Plus we need to have the ability to incrementally add to the verification suite, without having to go back and modify the original source. This is in effect, the same requirement as exists for the design flow such that many implementations can be derived from a single source without having to re-verify that original source file. We need to ensure that the testbench is not damaged in any way just because we wish to add additional capabilities to it to include added functionality or features that come in during the design process.
SystemVerilog caused the creation of two methodologies that attempt to encapsulate verification components into building blocks – namely OVM and VMM. Perhaps these are the key to the next generation of verification language. These methodologies create a transaction level interface between the components and this becomes suitable for both ESL and RTL verification needs. OVM is also multi-language capable, supporting SystemC and e in addition to SystemVerilog. This, in my mind, gives OVM a distinct advantage. In addition, Accellera has recently decided that this is the best base on which to move forward with the development of a standard verification methodology library. In addition, the choice of OVM also makes the e language a contender again. There are many companies who are still committed to e, and its aspect oriented features make it better at dealing with incremental capabilities than SystemVerilog.
Another possibility is to look at some of the new verification companies that are being formed these days that use more declarative languages for the verification environment. Will these languages evolve into the next generation of verification language?
I would love for you to weight in with your opinions on this, and find out what you think are the most important requirements are for the next generation verification languages.
-----------------------------------------------
Brian Bailey - keeping you covered
User reviews
Average user rating from: 2 user(s)
Good article
Brian, I wonder about the verification issues you bring up quite a bit. This is not an official Cadence statement, but I can share some personal thoughts.
I have been working on functional verification of embedded software for a few years using methodologies based on hardware verification. When the "thing to be verified" is not RTL you have to ask yourself about tools and languages that should be used for this kind of verification. As always it depends on what you are trying to do. Generally, I think OVM is a good solution for any serious verification problem that is beyond what simple scripts or directed tests can do. A lot of the simulation being done with Virtual Platforms uses nothing more than simple tcl scripts for the hardware stimulus and checking and I think there a lot of holes that can be improved to get more verification value from a Virtual Platform environment, but there is always the constraint to run very fast and not bog down performance. Some SystemC users will continue to use SystemC verification for a SystemC model even if it doesn't have all the power of e or SV for verification.
A lot seems to depend on reuse. If the plan is to reuse verification from ESL to RTL you have a different situation compared to just doing verification at ESL. ESL does have the potential for big verification savings, but the details of how to maximize this saving are still emerging. Constructing reusable verification across ESL and RTL is feasible, but does take some planning and skill.
I don't have anything against SystemVerilog, but I find it hard to propose it for abstract ESL verification because it feels a bit heavy to apply an HDL simulator to abstract verification.
I have a 5 part (with more to come) blog series on Android System Verification in which I use Specman for Verification of Android. Although OVM is mostly the same in e or SV, I feel better about e since it just does verification and from the start it was constructed to be separate from the "thing to be verified" so it works the same if applied to SystemC, embedded software, or in my case the Android emulator (which is based on qemu).
The first post is at:
http://www.cadence.com/Community/blogs/sd/archive/2009/11/09/android-system-verification.aspx
Another interesting thing I found is that when I talk to embedded software people, they are quite open to something like e, it looks very cool to them. It's only people that have been around EDA that have lots of bias about language wars between e, SC, and SV.
Jason Andrews
Different descriptions are essential for good verification
In the spirit of the New Year of a new decade....
I've long been an advocate of declarative languages - declaring an intent / requirement as a "specification" which tools can convert to executable code seems an elegant and efficient solution, particularly where two or more abstractions of the same model will be required. The problem comes with verification - you can obviously do some formal checks on the "specification" but that's not enough to know that your network adaptor or co-processor or whatever will actually do the job required. Related to this there are also serious doubts in my mind about the value of automatically creating tests to achieve coverage goals unless you can guarantee independence.
When you strip away all the noise it seems like verification is really a comparison of two or more representations of the same model, hoping that the same mistake won't be repeated in all representations. That suggests the description of 'design' and 'testbench' ought to be as widely different as possible and written by two groups from different backgrounds.
One model I see evolving amongst customers at present is the use of system-level models as the core of a block-level 'testbench' and/or reference model. This has a lot of value because it's the same model that's used for early / parallel software development in an era where > 50% of the functionality is now software determined. The problem with this is it's often not exhaustive enough to achieve good coverage of the RTL.
It seems to me therefore that the logical conclusion a decade down the road is a combination of a declarative description of the functionality from which the implementation (RTL?) is automatically converted / generated together with an enhanced system-level test derived from models used by software groups.
As I've said several times before I feel SystemVerilog is an expensive distraction on a path to solving the real problem. It doesn't have either the declarative nature or the real Object Orientation to handle either of these roles.
I do, however, expect the more abstract aspects of SystemC, particularly the TLM spec. to be developed and to achieve the status amongst software & hardware engineers that, say, STL containers have today - SystemC isn't the solution - it's basic building blocks from which application-specific solutions can be built.
Finally, from what I've seen, I can't re-implement my transactor tests environments in OVM, and have had a similar amount of trouble with VMM. It seems to me that these only work if you have the same style of application as the model that was in the mind of the authors when they wrote the spec for the library. As such they seem to fit a couple of application areas but don't seem universal enough for a broad range of applications so I predict either a limited life or a major overhaul.





