Team Specman has been doing a great job supplying nifty tech tips and other useful information about using Specman. Recently, they sent us R&D types a request for new topics to cover. I quickly took them up on it and supplied a post about how to interactively debug when using the Specman Co-Verification Link. Joe asked if I would follow up to clarify the differences between CVL and ISX. These two things are slightly related, but there are many differences.
CVL provides a way to connect any C program to Specman using a network socket. Once the network connection is made, CVL provides the ability to call C functions from e and e methods from C. This makes CVL useful to establish connections to Specman in situations when the Specman C interface cannot be used. Examples include:
- C programs that cannot be linked directly to Specman using the C interface because they must be run in a separate process
- C programs that must be run on another machine or another operating system
Incisive Software Extensions (ISX) has a small overlap with CVL. ISX contains a Specman adapter that connects e ports to a software program. For a review of ports go back to another post by Team Specman. Ports are the preferred method to connect a verification environment to the "thing to be verified". The beauty of Specman is the "thing to be verified" is cleanly separated from the verification environment using ports. The method port is one port type that provides the ability to call C functions from e and e methods from C in a similar way to CVL, but the overlap pretty much stops here. The ISX adapter provides much more than method and function calling and includes many more advantages (and I'm probably forgetting something):
- ISX runs in any simulation environment and with any kind of processor model. CVL is only applicable when the software can use a network socket to talk to Specman. This means software compiled on the host. It could also be software compiled on another machine with an OS such as a Windows, but it won't work in verification environments that use Virtual Platforms, HDL simulation, or emulation with RTL CPU models. ISX is built to work the same way in every environment and does not depend on the processor model type.
- ISX supports method ports, simple ports, and event ports to provide access to C variables as well as C functions.
- ISX supports complex data types like C structures and enumerated types and provides automatic type conversion. CVL supports only simple integer types as function arguments and has limitations on return values.
- ISX provides automatically created coverage for software programs.
- ISX utilizes Incisive Verification Builder (ivb) to automatically generate a complete eRM based verification environment for the software program and can be added to existing verification environments to create mixed hw/sw verification with complete control over both the hardware and the software.
Given all these advantages you might ask why I even mentioned the nifty tip related to CVL, good question. For some situations CVL is used as plumbing under ISX to provide memory access functionality between the verification environment and the target software program being verified. A simple case is a host-compiled program. Instead of using CVL directly, users can have all the features of ISX and the ISX plugin for ivb has an option to automatically generate code to use CVL as the underlying connection between e and C. The user doesn't even see this connection as they use ports directly to communicate with the C program, but when it comes time to debug they need some understanding of how Specman is connected to the C program and how to debug. This is where the tech tip becomes important. Of course, if you don't insert bugs like I do then you probably don't need to know as much about removing bugs..
Overall, ISX has greatly improved the original concept of CVL to make it more generic, more automated, and more powerful for any mixed hw/sw verification task. If you are using CVL it might be time to take a closer look at ISX.