Building an Electronic Design Automation (EDA) tool using Tcl/Tk and object oriented programming.

John Hughes

This paper discusses how a powerful debugging, and design analysis, tool was created in the Design-For-Test (DFT) division at Mentor Graphics Corp. This tool is called DFTVisualizer and is a quantum leap forward from the old environment. The old environment will be covered briefly for comparison purposes.

This paper will describe the reasons why Tcl/Tk was chosen and how the Tcl code interacts with the C/C++ "kernel" code. It will also cover the object oriented techniques used to build the tool and the various packages used in the implementation.


DFTVisualizer is a new application within the Mentor Graphics DFT tool suite that seeks to improve user productivity. The overall goal is to have a simple, easy and clear process to debug problems in the customer design and to present circuit data in any easy to analyze format. DFTVisualizer is not a stand alone tool, but works in conjunction with the ATPG tools produced by the DFT Division.

The old tool, called DFTInsight, only contained features for debugging design problems and all data analysis was done by looking at textual reports. DFTVisualizer contains multiple windows that allow the user to debug, analyze, navigate, and view the details of their chip design.

The multiple windows are contained inside a parent window, or framework, that prevents window explosion on the desktop. The framework uses the MTI Panemanager Widget that was presented at the 2005 Tcl/Tk conference. This widget allows opening/closing of child windows, rearranging of windows, and docking/undocking of the child windows. Drag-n-drop capability between the various windows was also added.

Since a framework containing "child" windows was built, incrTcl was used to build a child window class that is used to implement standard features for all windows, like cross selection and drag-n-drop. A class was created for the framework that manages communication between the windows and the C code in the kernel of the ATPG tool. I will present much of the design of these classes and how they help meet our goal of an easy to use tool.