• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Blogs
  2. Verification
  3. Linking C and e: The Co-Verification Link
teamspecman
teamspecman

Community Member

Blog Activity
Options
  • Subscribe by email
  • More
  • Cancel
Specman
HW/SW
C
e
ISX
Incisive Enterprise Simulator (IES)
Jason Andrews
IES

Linking C and e: The Co-Verification Link

2 Feb 2009 • 3 minute read

[Join Team Specman in welcoming guest blogger Jason Andrews.  Jason is a recognized hardware-software co-verification expert (he's written books on the subject!) and a fellow blogger]


One of the long-time features of Specman is "CVL". It stands for "Co-Verification Link", but is somewhat misnamed. CVL connects a host compiled C program to Specman via a network socket. This feature enables e methods calling C functions and C functions calling e methods over the socket. We have used CVL many times in the context of ISX to provide a connection to a host-compiled program or another type of simulator that cannot be directly linked to Specman.

Debugging a host compiled program is normally done with gdb. Because CVL operates over a socket connection with Specman, one of the following can happen:

• Specman is running and the host-code program is blocked waiting for data
• The host-code program is running and Specman is blocked waiting for data

This blocking creates a problem during interactive debugging with gdb, because gdb waits for commands when you stop execution. When you try to activate Specman to inspect the state of the verification environment Specman is frozen because of the blocking operation on the socket.

The good news is this blocking problem is solved using custom gdb commands you can use to transfer control from the gdb prompt to Specman, do some Specman commands, and then return back to the gdb prompt.

The good news is that no modifications to gdb are required because gdb has a feature that allows the user to create custom commands for the debugger. Specman is shipped with a .gdbinit file that implements this capability. The path to the file is
$SPECMAN_HOME/sn_lib/vr_gsa_sw_debug/cvl/.gdbinit

For the real curious engineer, here is the code that "wakes up" the Specman prompt from gdb You can include this also as a "code fragment".

#
# Activate the Specman prompt
#
define sn  
    if (sn_is_cvl_connect())       
        if (sn_is_cvl_safe())
            call specman_command("specman")
        else
            echo CVL request already in progress\n
            echo Issue sn_safe first\n
        end
     else
        echo CVL is not connected\n
     end
end


To activate the custom gdb commands, do one of the following:

1. Copy the file to the directory where you invoke gdb
       o gdb automatically reads a .gdbinit file in the current directory
2. Copy the file to your home directory
       o gdb automatically reads a $HOME/.gdbinit file
3. Manually source the file from the gdb prompt

gdb does not allow environment variables, so you must provide the full path:
(gdb) source <path to SN Home>/sn_lib/vr_gsa_sw_debug/cvl/.gdbinit

To see if gdb now understands your custom commands use:
(gdb) help user

Now, how to use it. If you are running a test and sitting at the gdb prompt and you need to do something in Specman use the sn command:
(gdb) sn

This transfers control to the Specman prompt. After you are done with Specman stuff you can just hit return at the Specman prompt and you will get back to the gdb prompt.  Check out the screenshots below for an example.

 

Specman CVL Step 1

 

Specman CVL Step 2

 

If you want to try all this out, there is a simple example that ships with Specman -- use sn_which.sh to find it.

% sn_which.sh ex_gsa_simple

As always, there are more details in the Specman User Guide about the custom gdb commands and running the simple example.

Happy bug hunting!


P.S. You might ask, “What’s the difference between CVL and Incisive Software Extensions (ISX)”?  The answer to that is coming in a future post …

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information