CAM Editor Reverse Engineering PCBs
Contents
This article looks at reverse-engineering a PCB layout directly from CAM files loaded into Altium Designer's CAM Editor (CAMtastic®).
After importing CAM data into a CAM document, you will notice that the Export to PCB option is grayed-out, regardless of the current CAM Editor mode (CAM or NC). This command allows you to reverse-engineer a PCB layout directly from CAM files. This does not follow a regular export-import process, but rather loads data directly into Altium Designer's PCB Editor.
The following sections detail steps to be taken to reverse engineer a PCB design from the CAM data - from initial import into a CAM document, through the required pre-export preparation and ultimately on to export of the design data to the PCB Editor.
Import Data
The starting point for the whole process is the loading of ODB++, or Gerber and NC Drill files, into a new CAM document. If you have an IPC netlist, you should import this as well when importing Gerber and NC Drill data. When importing ODB++, only import an IPC file if the netlist is not in the ODB++ directory. The IPC netlist will allow you to update the extracted nets with their original names, and differentiate between through-hole vias and free (non-component) pads.
The File » Import submenu commands all search for files with certain extensions within a given folder. When importing drill files, for instance, the specified directory will filter out all files except those with .DR*, .ROU, .RTE, *.NC* and *.TX* extensions. If you receive drill files with different extensions than these, you may extend this list on the CAM Editor - Miscellaneous page of the Preferences dialog ( DXP » Preferences ). From here you can alter any of the default extension lists associated with Gerber, Aperture, HPGL and Netlist files as well.
The CAM Editor - Import/Export page of the Preferences dialog lets you change the default import and export settings for Gerber files. For example, if you regularly receive CAM data generated using P-CAD, you might consider changing the coordinate precision format from 2:3 (Altium Designer defaults) to 4:4 (P-CAD defaults). If you don't you will still have the opportunity to change these settings from their default state each time you import a job.
Layer Type Assignments
Individual Gerber and Drill files are all assigned to individual layers. In addition, the CAM Editor looks at their names upon import, and tries to assign each one a layer type. It does this according to the information in the Layer Types Detection Template dialog ( Tables » Layer Type Detection ). This is a fully-customizable dialog that contains fragments of file names (extensions, keywords or both) that identify individual files as layer types, such as signal, negative plane, border, drill, and temporary layers (mechanical).
Altium Designer's PCB Editor, for example, differentiates between Gerber layers by their extensions, such as .gtl for the top layer and .gbl for the bottom. Other design programs might export a .top file for a top layer, and a .sol file for the bottom (solder) layer. Some of these programs, such as P-CAD, allow users to specify the Gerber output names themselves.
After importing any group of CAM files, you should open the Layers Table dialog and review the type assignments that have taken place automatically.
You may open the drop-down list for the type and modify any assignment. For example, you will notice that all drill files are automatically set to type Drill Top. You might want to distinguish between top, bottom and internal drill sets at this point. This is not required, however. Later on we'll discuss pairing layers to accommodate boards containing blind and/or buried vias.
If you customarily receive Gerber or drill files that are not automatically assigned to a layer type correctly, you should look over the file name for any distinguishing characteristics whereby the CAM Editor might identify them, and add them to the Layer Types Detection Template dialog.
ODB++ does not need to use the Layer Types Detection Template dialog because all the information needed to identify each layer is stored in the matrix file. However, it is good practice to check the layer type assignments after the loading process ends.
Board Stackup and Drill Sets
Layers that have been assigned as signal types (top, bottom or internal) or planes will now appear in the Create/Update Layers Order dialog ( Tables » Layers Order ). In most cases, the CAM Editor will be able to determine the stackup from the provided CAM data, but in some cases all that will be provided is the logical order (the order in which the layers were imported). It is your responsibility to make sure that the information in the Layer Physical Order column is correct, with number one being the top layer. Be careful not to assign the same order number to different layers. Once you have specified a valid stackup, the physical order column will take precedence over the logical list when this dialog is reopened and you will see the layers listed in their proposed stackup.
This same physical order will be reflected in the Create/Update Layers Sets dialog ( Tables » Layers Sets ), where you match drill files to layer sets. Consider a 6-layer board (four-signal, two-plane) with both blind and buried vias. The design might contain four separate drill files:
- one for the Top-Bottom pair (thru-holes)
- one for the Top-InternalPlane1 pair
- one for the MidLayer1-MidLayer2 pair
- one for the Bottom-InternalPlane2 pair.
Remember that you are determining a drill set, not just outermost pairs. For blind/buried drill layers, all layers that are drilled need to be in the layers set. For through hole drill layers, the start and end layers should suffice.
Netlist Extract
This step ( Tools » Netlist » Extract ) relies on the accuracy of the steps preceding it. You can't do it at all unless you've got a layer type assignment for every layer in your board (you should set mechanical layers to Temporary).
The CAM Editor will trace connectivity from one layer to another, consulting the NC drill files to make layer to layer connections. For this reason, the layer stackup you defined in the Create/Update Layers Order dialog, and the drill pairs you selected in the Create/Update Layers Sets dialog, are critical precursors to extracting an accurate netlist from the CAM data.
If you have included an IPC netlist file with your imported Gerber and NC Drill files, you may restore the original net names ( Tools » Netlist » Rename Nets ) and differentiate between through-hole vias and free pads in your new PCB file. But much more importantly, an IPC netlist gives you a reference with which the extracted netlist can be compared ( Tools » Netlist » Compare ).
For IPC netlists generated from Altium Designer's PCB Editor, you will notice that the CAM Editor's compare function will usually find a series of "missing nets" without names. This is because the PCB Editor's IPC format includes single-pin nets - the CAM Editor, on the other hand, disregards pads without any copper connections as far as the netlist is concerned. In fact, its DRC has an option to remove non-functional pads.
Borders and Planes
When the CAM Editor exports a PCB to Altium Designer's PCB Editor, a board outline will automatically be generated. To do this intelligently, it requires a closed polyline to be present upon a Border-type layer. If no closed polylines can be found on this layer, or if multiple layers have been designated as borders in the Layers Table dialog, you will probably not get the board shape you desire.
Any splits on your internal planes must also be defined by closed polylines. To determine whether a polyline is closed, query it ( Q key then click on the line). Check to see if the whole polyline becomes highlighted and if it is reported as a closed polyline on the Info tab of the CAM panel. If not, then you can convert what you have into a closed polyline with the Join command (in the Edit » Objects submenu).
Split plane sections may require some additional work, since each split needs its own "bubble" enclosure, much like Protel PCB designs prior to Altium Designer. So while island planes may be joined as described above, split planes that share their outlines with other splits or with the border polyline must be redrawn. To draw your own closed polyline, right-click after selecting its final vertex, and choose Close .
Nested planes (islands within split planes) are not currently supported.
Exporting Polygons
The CAMt Editor - Import/Export page of the Preferences dialog provides additional options to handle how polygons in the CAM document are exported to the PCB document. If the polygons are rectangular in shape, they can be created as fills on the PCB document. For non-rectangular polygons, you can create polygon pours on the PCB - either Hatched or Solid. Access to options dialogs for these two polygon pour types are provided, giving greater control over how the exported polygons will be handled on the PCB side.
When enabling the option to Create Hatched Polygons , the CAM Editor will use a single grid size and a single track width to fill all of the polygons in your file. Should your CAM data include very small polygons, then you should make sure that the export options are calibrated down to that level.
The Polygon Options dialog (accessed by clicking the associated Hatched Polygon Options button), allows you to modify the grid size, track width and minimum primitive length for your polygons. If you want your polygons to be completely filled with high accuracy, then these values should all be kept within a tight range around the smallest requirements on your board. Otherwise, you might risk blank spaces within your polygons, hatching patters instead of complete fills, or even entire polygons left out upon export.
These values, on the other hand, will apply to all exported polygons, so very small values will increase the bulk and related management issues (such as redraw speed) pertaining to the exported file. Accordingly, you should always use the largest values possible that will still yield the required accuracy for all of the polygons on your board.
When enabling the option to Create Solid Polygons , each polygon will be filled with one or more solid copper regions. The number of copper regions used depends on the number of individual areas created inside the polygon by existing net objects, such as tracks and pads.
The Solid Polygon Options dialog (accessed by clicking the associated Solid Polygon Options button), allows you to determine how copper islands and narrow copper nets are handled, and also pour behavior when poured over net objects belonging to the same net as the copper pour:
- Pour Over All Same Net Objects
- choose this option if you want a polygon pour to automatically connect to all objects on the same net as the pour - Pour Over Same Net Polygons Only
- choose this option (default) if you want the polygon pour to automatically connect to only polygon pour objects inside its boundary, and which are associated to the same net - Don't Pour Over Same Net Objects
- choose this option if you specifically do not wish the polygon pour to connect to any other net objects
- either belonging to the same or different parent net as itself.
If either of the first two options are chosen and the polygon pour is assigned to No Net, it will pour around all objects regardless of their net assignments.
Export to PCB
After a netlist has been extracted from your CAM data, the File » Export » Export to PCB command becomes enabled, provided you have a license for your Altium Designer software that enables access to, and use of, the PCB Editor. Executing this command after all necessary steps have been taken will create a PCB document containing a board design that appears very much like the original.
To truly rebuild a board will still take some additional effort, such as replacing component primitives with footprints (you might do this by copying and pasting groups of primitives into a PCB library, then replace the originals with the new footprints). Altium Designer's PCB Editor will not create drill-pairs automatically from the Layer Sets information in the CAM document; you will have to redefine them manually in the Layer Stack Manager dialog.