Design CIS (Capture)
Design HDL (Concept)
PCB Editor (Allegro)
Known Issues
Memory Monitor
 IDA Pro

Destubifier Documentation

home » programs » cadence » pcb-editor » destubifier » docs

WARNING: You need to understand The Destubifier is designed to *DELETE* problems from your board. Of course, it will ask for confirmation before changing anything but realize if you use it incorrectly, there will be no way to "undo" the changes.

Documentation Sections:

The Basics

When The Destubifier first loads, you will see "Progress Bar" that displays the current progress of the design analysis. As you would expect, on small designs the analysis happens very quickly but on super huge 60 layer boards, the analysis might take a while to complete. Eventually, you are greeted with The Destubifier user interface:

(Click On Image To See Larger View)


The Destubifier is very specifically designed to NEVER modify your design database without your expressed permission. This includes the obvious things like deleting the selected objects as well as the not so obvious things like adding properties, assigning properties and even changing colors.

You can open a design database, run The Destubifier, browse around the problems with it, close it and then close PCB Editor (Allegro) without being asked to save the design database because NOTHING in your design has been changed.


Let's face the truth; every designer on the planet has their own set of preferred colors and they have countless excuses why their opinion is the best. I can't say I'm any different. If you want to see a board designer absolutely livid, just go messing with "*THEIR*" colors. There are a few reasons why the user is asked to set their own "Temporary Highlight" and "Permanent Highlight" colors.

  • The first, and possibly more important, reason is changing the highlight colors actually changes the design database itself because your highlight choices are saved within the database. According to our safety rules about modifying the design, it is best that you consent to and do the modification.

  • The second reason is because most designers have specifically chosen their colors because it makes things easy for them to see. Messing with their color choices, even if it's just temporarily adjusting the highlight colors, is a good way to anger most designers.

  • There is a somewhat related third reason; Though it is possible to programatically set both the "Temporary Highlight" and "Permanent Highlight" colors, this is done by a number that indicates a position in your color pallet. Since there is no way to know what your personal color pallet is, there is no way to know to what colors the highlights are being set. The only way around this is to load a color pallet but then, once again, I've just angered countless designers since all of their layer colors have just changed to what "*I*" think the best colors should be. In other words, it's a "No Win" situation.

Assuming you're using the typical light colored objects on black background in PCB Editor (Allegro), you should set your "Temporary Highlight" color to something extremely bright and noticable like bright pink or bright yellow. You will also need to set your "Permanent Highlight" color to a fairly dark gray. You can set these colors through the PCB Editor (Allegro) menu item "Display" pick "Colors/Visibility" and then in the "Group" drop down box select "Display" to find the highlight settings.


You can click on either one of the Grid SpreadSheet rows or on one of the items in the Tree View to make a particular problem your currently inspected item.

(Click On Image To See Larger View)

By clicking on an item the Destubifier will make your PCB Editor (Allegro) zoom and highlight the current item in your design.

(Click On Image To See Larger View)

If you click on the checkbox on either the Grid SpreadSheet row or the checkbox on the Tree View, that item will become Selected For Deletion within the Destubifier and it will change the color of the item from green to red. In the image below, I changed the current item only so you can see the color change on item number 220.

(Click On Image To See Larger View)

Once you have selected all the problem items that you want to delete, simply click the "Delete Selected" button. After a confirmation, the Destubifier will delete all the offending objects.

Now let's just imagine you found a problem that can't be solved by simply deleting an object and fixing it is going to require more action from you. Normally, The Destubifier will put your PCB Editor (Allegro) view back exactly the way it was when you started the Destubifier. You can over-ride this behavior and keep the current zoom and position in the PCB Editor (Allegro) by checking the "Keep Zoom" checkbox before closing The Destubifier.

Please Note: On some systems the DOT icons in the left side "Tree View" are show as a redish pink rather than as pure red. This is due to the Allegro color limitation on some platforms which allow only 4-bit color.

How It Works

The Destubifier works on logical analysis of every object in your design database. You can think of it as a rule based checking system where a tested object is either marked good or bad. You need to understand a bit about how the Cadence PCB Editor (Allegro) works before how The Destubifer works will make much sense. I'll explain them in parallel.


A NET is comprised of branches and when a NET is fully connected, it has a single branch. This is how Allegro keeps track of if a board is fully routed. If you have a NET that consists of three pads that need to be connected, before any routing, the net consists of three branches:
"X" is a pin
"-" is a trace

    X       X       X

Now if you connect the first two padstacks with a trace, your NET now has only two branches.

    X-------X       X

If you connect the second and third padstacks with a trace, your NET is now fully connected and only has one branch.


As you would expect, when you have a NET that has more than one branch, then you can mark it as "BAD" because you know something is wrong.


Surprisingly enough, BRANCHES can also be "BAD" and this happens when a BRANCH exists but it is not assigned to a NET. This may seem impossible but it really does happen, often during revision-rolls or other times when you bring a new netlist into an existing board that is at least partially routed. Cadence calls these bad BRANCHES, "Lonely Branch" and there ways of finding them.


A "PATH" is synonymous with the Cadence term "LINE" and is really nothing more than a set of connected line segments ("CLINES" in Cadence parlance). The reason why I use the term "PATH" is because that is really what they are called internally inside the Allegro program itself.

It may seem like common sense but a PATH must have two connections to other kinds of objects like padstacks/pins, vias, shapes, and tees (-yes, a "tee" really is a separate type of object). If a PATH has less than two connections, we can mark it as BAD.


Classifying PINS as "BAD" or "GOOD" is problematic at best mainly because nobody wastes their time to fully quallify and classify the PINS in their designs (i.e. marking them as "NO CONNECT" and/or stating their use). More importantly, since PINS are tied to the netlist and hence the schematic, it is a very bad idea to delete PINS for any reason. Erroneous PINS are normally a netlist/schematic problem and should be fixed at that level.

For these reasons, problematic PINS (i.e. those that have no connection) are not shown by default in the Destubifier but if you want, you can change the Destubifier filter settings to view them. More importantly, you can not delete PINS even if you select them for deletion.

When we get to the discussion of Destubifier features like adding specialized Properties to various objects, you'll see how having the option of viewing PINS could be very helpful. In short, you can mark all your no-connect and mechanical pins with a property so they won't be displayed. This allows you to see a short(er) list of unconnected/unused PINS that might really be problems.


Shapes are actually fairly simple to classify as good or bad, althoug we rely on what some may consider an over-simplification. The short answer is if a shape has less than two (2) connections, it's marked as bad. There are some outstanding issues regarding islands in dynamic shapes. Although we do show these as bad, we do not try to delete them since doing so would make a mess of your dynamic shape. The correct answer is at the end of your design, use the "remove islands" feature already built into the Cadence PCB Editor.

Due to a bug/oversight in the axlDBGetConnect() function in Cadence SKILL, Allegro versions 15.0 and earlier ignore shapes completely since we are unalbe to accurately get a count of the connections to the shape. Versions 15.1 and newer do not have this problem.


The world of VIAS contains few different posibilities for various types of mistakes. In general, the logic used is as follows:

  • VIA Has No Connections
    If a VIA has no connections to other objects (traces, shapes, and etc.), then we mark it "BAD" since it really is doing nothing but taking up routing space on your design.
  • VIA Has One Connection
    • Usually, when a VIA only has one connection, it is a mistake and is marked as BAD.
    • If the VIA is a TestPoint, then it is normal for it to only have one connection, so it is not marked as BAD.
  • VIA Has Two or More Connections
    • Usually, when a VIA has two or more connections, it is correct and is marked as GOOD.
    • If all the connections to the VIA are on a single layer and the VIA is not a TestPoint, then there is obviously a problem and it is marked as BAD.


The idea behind CHAINS is in essence starting at a BAD object and walking your way back to a known GOOD junction. The reason is we want to prevent forcing the user to make countless runs of the Destubifier to remove all the problems. For example if a via has two connections and one of them is a BAD dangling trace that doesn't connect to anything else, once you delete the BAD trace, the via itself is now BAD because it only has one connection (and is not a test point).

A CHAIN basically walks from the BAD trace, through the via, to the second object connected to the VIA, ad infinium, until it finds a technically GOOD object where it can stop.
"X" is a pin
"O" is a via
"-" and "|" are a traces


In the case above the portion below is actually a CHAIN of four BAD objects (two traces and two vias) which can be safely removed rather than requiring you to run the Destubifier four different times.


At the moment, the logic used to identify CHAINS is fairly simple, so it can not handle complex cases such as the intersection of CHAINS with other BAD objects (including other CHAINS). In other words, something like the below example would require more than one run of the Destubifier to remove all of it.

    |    |
    |    |

Sooner or later I'll improve the logic to handle these corner cases better and prevent the need for multiple runs of the tool. It's on my "ToDo" list along with ending world hunger, world peace and entirely replacing the EDA industry by myself.


The Destubifier has a lot usability features, many created from user suggestions over the last year, and they allow the user to quickly get the job done and done right. The goal for usage is really speed, not just the time it takes to run but also the time you spend interacting with the program. If you come up with any more good ideas, let me know.


You are able to set special Cadence Properties on any of the design objects listed and these will allow you to filter out the stuff you don't want. The most classic example is when you do a fan-out to through board vias on an entire BGA because you want to be able to test the device from the opposite side of the board with a "bed-of-nails" or "clam-shell" tester.

In this situation, you really do want some vias with only one connection (a trace to the BGA pad). Though this would normally be show as an error condition (i.e. "BAD"), you can easily select one or all of them and put a "DT_FANOUT" (or if you prefer a "DT_IGNORE") property on all of them. By default settings of the Destubifier filters, these vias will not be shown in the list of problems -the result is one (ore more) less thing for you to waste your time looking at.

Grid Spread Sheet

There are both some common and uncommon features built into the Grid Spread Sheet on the "Display" tab. The first thing to remember is this program is written entirely in Cadence SKILL, which means there are some very serious limitations on what can be done in the way of a user interface. It is simply not possible (as far as I know) to create typical grid spreadsheet operation (like row single/group selection by holding down shift/control keys). The grid spreadsheet, like all all elements in a Cadence SKILL user interface is based on a formatted text file called a "form." Everything in a form is based on the width and height of a single character on *your* system and thereby forms work across a very wide range of hardware and operating systems. This fact is the reason most people think SKILL programs look like crap (the same is true for Java applications) when compared to the super slick system/graphic/hardware dependent applications they normally run which written in compiled systems programming languages like C and C++.

Column Sorting
If you right-click on any of the column headings, you'll get a popup menu which will allow you to sort all the rows in the grid by that column. It can do both ascending and descending sorting.

(Click On Image To See Larger View)

Show Element
When you're trying to figure something out and need more information on an object, most designers do a "Show Element" (F5) on the object to get the information they need. Just by right clicking on any row, you can select the "Show Elemement On Current" menu item to get the familar text information on the element.

(Click On Image To See Larger View)

Setting Properties
As you can see from the image above, you can also set either the DT_FANOUT or the DT_IGNORE property on the individual item in the current row.

Creating Groups Of Rows
You can create a group of rows (i.e. "Temp Group" in Cadence parlance) by right clicking on a starting row, and choosing "Temp Group Start Row"

(Click On Image To See Larger View)

Then as you left click on another row all the rows between your start row and your current row are marked:

(Click On Image To See Larger View)

Then you can right click on the last row of your group and choose "Temp Group End Row"

(Click On Image To See Larger View)

Whoops! you missed one. Probably because it was not part of the contiguous set of rows. The answer is to just left click on it, then right click and choose "Temp Group End Row"

(Click On Image To See Larger View)

Finnaly, you need to choose what you want to do with your Temp Group, so right click and choose one of the "Finish*" options:

  • Finish/Select Temp Group
  • Finish/Unselect Temp Group
  • Finish/Show Element Temp Group
  • Finish/Set DT_FANOUT Temp Group
  • Finish/Set DT_IGNORE Temp Group
  • Cancel Temp Group

(Click On Image To See Larger View)

If you chose "Finish/Select Temp Group" all of the items in your Temp Group would now be marked as selected:

(Click On Image To See Larger View)

In combination with column sorting, the Temp Groups allow you to easily do bulk operations like assiging DT_FANOUT to all the VIAS on a BGA device.

Tree View

Since objects exist in some degree of hierarchy, a Tree View is a useful, organized way to look at them. For example, a branch consists of one or more etch objects (paths, pins, shapes, tees and vias) and a net consists of one or more branches:

(Click On Image To See Larger View)

Clicking on a higher level directory in the tree that contains sub-items will zoom and highlight all of the sub-items:

(Click On Image To See Larger View)

You may want to note how a higher level directory can also contain "GOOD" items as well as "BAD" items. The "GOOD" items are marked in blue rather than green. In the above example, all of the branches within the current net obviously have a net assigned to them, so technically they are therefore "GOOD" items (we defined a bad branch above as having no net assigned).


The available filters are very extensive and allow you fine grained control over what is shown on the "Display" tab. All of the filtering options can be set by the user on the "Filters" tab of the user interface. The various filtering options are fairly self-explanitory:

(Click On Image To See Larger View)

Copyright © 2006 DesignTools.org