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
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:
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:
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
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.