Home > Community > Blogs > Functional Verification > generation debugging with quot intelligen quot with video
Login with a Cadence account.
Not a member yet?
Create a permanent login account to make interactions with Cadence more convenient.

Register | Membership benefits
Get email delivery of the Functional Verification blog (individual posts).


* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

Generation Debugging With "IntelliGen" (With Video)

Comments(0)Filed under: IES, Incisive Enterprise Simulator (IES), e, Specman, IntelliGen

You might have seen the Generation Debugger of Specman's new Generation Engine IntelliGen in presentations or blogs (like Corey's blog on the testcase utility).  Let's go a little bit beyond the pictures and high level descriptions and have a look at the details of this new debugger.

First, a few words on the general concepts of Generation Debug:

  • We first need to collect generation debug information
    • This needs to be enabled (by default nothing is collected for performance reasons)
  • The debugger is a tool that presents this information to a user and enables the user to quickly and easily find the information she/he is interested in
    • Debugger GUI is used for visualization of information
    • There is a lot of data, so the focus of the GUI is to:
      • Organize the data and give right level of detail to the user
      • Enable users to navigate/filter through the data
  • The debugger enables users to step through the generation process (step/next etc.) and observe changes for the generated fields

Now to the specifics of IntelliGen. To enable collection of generation debug information you have the following choices:

A - Use one of the new 'break on gen *' commands
This command enables collection of generation debug information and stops at the specified point (depending on the command options)

B - Use the new "gstep" command to step into generation debug mode
The new Generation Debugger is closely linked with the Source Debugger of Specman. This has the benefit of being able to 'interrupt' source debugging and switch into Generation Debug mode on-the-fly.

Note: the 'collect gen' command only works for the old generator "PGen", but not for IntelliGen.

For the visualisation of the debug data there is a new Generation Debugger GUI. In the video below I'll explain how to  navigate this new GUI and how to use it for generation debugging.

In general there are 2 reasons for using the generation debugger. Lets look at both cases and the detailed steps you need to follow in order to collect generation debug information and view it in the new debug GUI:

1 - You need to debug a contradiction

  • When you get a contradiction, the tool prints an error message with details on the fields and all the related constraints. In simple cases you can analyze the contradiction and deduce the problem by just looking at those details
  • If you want to use the debugger (to get more details), use the following command sequence:
    • reload
    • break on gen error       // break at the next contradiction
    • test                   // + run simulation if the contradiction happened on-the-fly
  • This will collect debug information and open the generation debug GUI

2 - You want to find out why a specific value has been generated

  • To debug on-the-fly generation, do the following steps
    • Set regular source break points and step to the 'gen' or 'do' statement you want to debug
    • Issue 'gstep' in the source debugger (this will enable collection of generation debug information and open the debugger GUI)
    • In the debugger GUI issue 'gfinish' (this will finish the generation action and allow you to navigate to any field generated in this action)
  • To debug what has been generated under sys (pre-run generation), use the following sequence:
    • Issue the 'break on gen' command (this will stop at the next generation action and then start collection of debug information)
    • Issue the test command (this will open the generation debugger GUI)
    • In the debugger GUI issue 'gfinish' (this will finish the generation action and allow you to navigate to any field generated in this action)

The generation debug GUI organizes the data according to the generation process. This process looks like this:

  • A gen or do statement in the e-code results in a generation action and the generator is called
  • IntelliGen groups the fields of the generation action into CFSs (connected field sets)
    • A CFS is a group if fields which are related via constraints. It can contain fields from different hierarchies, different list elements etc. Any field is only part of one CFS in a generation action.
    • IntelliGen does the grouping of fields into CFSs and orders the CFSs if required
  • Next, the generator does the actual generation of the field values
    • It goes through a number of reductions, backtracks and assignments (generation steps) until all fields of a CFS are solved

To really appreciate the benefits of the new debugger I always find it best to look at examples. The following video introduces the generation debug GUI. It shows how all the data is organized and presented and how one can navigate between different windows to get to the desired information.



I hope this gave you a good introduction to the new generation debugger in IntelliGen. For more information have a look in the documentation or ask your local AE for a more detailed training.

Until the next time!

Hannes Froehlich
Senior Product Engineer
Cadence Design Systems, Inc.


Leave a Comment

E-mail (will not be published)
 I have read and agree to the Terms of use and Community Guidelines.
Community Guidelines
The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.