• 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. Generation Debugging With "IntelliGen" (With Video)
teamspecman
teamspecman

Community Member

Blog Activity
Options
  • Subscribe by email
  • More
  • Cancel
IntelliGen
Specman
e
Incisive Enterprise Simulator (IES)
IES

Generation Debugging With "IntelliGen" (With Video)

14 Jan 2009 • 3 minute read

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.

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

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