Tutorial - Reverse Engineering _Getting Gerber back to your CAD by wuyunqing


									                          Tutorial - Reverse Engineering
                        Build a CAD Database from Gerber Files
                                        (CAM350 version 6.0 and up)
                                            (Richard Nedbal)
Reverse Engineering is the process of starting with Gerber files, then adding information such that an intelligent
CAD database can be exported to a CAD system. In addition to the Gerber data, the exported database contains
components and a complete netlist. Reverse engineering is done in cases where the original CAD database doesn't
exist, yet CAD edits must be made, to keep a board in production. It is also used when a company has older
"legacy" designs and needs to archive CAD data rather than Gerber files where possible.

Reverse Engineering Summary:

The steps are pretty easy:
* Import the Gerber files and prepare them.
* Extract a netlist.
* Build the components (parts) using the silkscreen as a guide.
* Place the parts.
* Check the results and export the CAD database.

These are the 5 basic steps, but of course, there is a lot of checking and verification that needs to be done as you go.
This tutorial will guide you through the process and share with you the "tricks of the trade".

You've been told:
                "Regardless of how well you understand this process, you will still screw up
                your first reverse engineering job".

Detailed Reverse Engineering Procedure:

1) Prep 1: What have you got?:

First, make sure that you know what you have. It really helps is you have a fully assembled board to refer to. The
silkscreen often does not contain enough information about component shapes and outlines, and the component pins
are not always easy to recognize. An example is a part such as a transformer that has mounting lugs. Are these lugs
electrical? Because if they are, they are considered a pin and must be defined as such. How about an edge
connector with mounting holes that are not electrical? These must be drilled using nonplated drills.

Do you have - or can you get - a bill of materials (BOM)? This helps when naming the components and the BOM
provides a list of parts, their reference designator and quantity. Yellow lining each refdes on the BOM as you go
helps to make sure that you didn't miss any parts.

How about pin numbering? Do you know the sequence of the pins on parts such as edge connectors? The pin
numbering sequence doesn't really matter to the process, unless you have a prior schematic or some other document
that much match when you're done. Obviously comparing the reverse engineering result to a netlist that is reference
designator and pin number based, requires that the pin numbering match. In many cases you just don't know or it
doesn't matter. Take, for example, a resister. Which pin is pin #1 and which is #2? If you get them backwards
(which is likely) will it matter?

If the silkscreen layer is incomplete, then get a fabrication drawing, BOM or some other method to determine each
ref/des. If all ref/des are not known, you can make them up as you go, but here again, it won't match a prior
2) Prep 2: (Load and clean up the data):

To completely reverse engineer a set of Gerber files requires the generation of parts or components. The parts
become the footprint library for a design. The Utility command called QuickPart allows the assigning of reference
designators and pin numbers to each part location, but it does not build a part library. Therefore, you do not use
QuickPart in the reverse engineering process.

2a) Import the Gerber files and check the layer alignment. The layers MUST be aligned for anything else to work.
    Use Edit/Layers/Align to move the data a layer at a time.

     Note:    Sometimes layers such as the silkscreen will not have any fidutials or alignment
              marks to use as snap points for Edit/layers/Align. In this case, I just turn on only
              the silkscreen layer, do an Edit/Move/Select All, then I turn on the appropriate Top
              or Bottom layer and place the silkscreen as best I can. Make sure you have the
              "Snap Box" turned off (S Hot Key) or the data may snap to something, and not end
              up where you want.

     I strongly suggest that you have and use an NC-Drill file if possible. This layer would be tagged NC Data and
     it clearly defines the layer to layer connectivity. Without a drill layer the system has to "deduce" connectivity
     from the pad type and this is a guess at best. If all you have is a Gerber file that graphically represents the drill
     data (this is NOT an NC-Drill layer), then select Tools/NC Editor… from the main menu, then Utilities/Gerber
     to Drill. This command looks at the size of the flashes that are on the Gerber layer, builds a matching NC Tool
     Table and creates a new layer that becomes the actual NC-Drill layer. Upon returning to the CAM Editor you
     should remove the original Gerber layer.

2b) You should have a border layer that contains ONLY the outline of the board. If the Gerber data set didn't
    include one, then I look at the others layers to see if the data exists. Then I add a new layer and copy ONLY
    the outline to this new layer. This layer will be tagged as a "Border".

2c) Set the draw and flash colors differently. Setting the draw color different from the flash color makes
    identification of drawn pads much easier. I recommend using noticeably different colors. This is done using
    the controlcolor.scr script or interactively via Tables/Layers or the Y hot key.

2d) Tag the layers properly (Tables/Layers) and put them in order (Edit/Layers/Reorder). No system can know
    what the function of each layer is. “Tagging” each layer tells the software how to process the electrical data.
    Only electrical layers are looked at, so masks and graphic layers are superfluous and should be removed from
    the data set. "Tagging" is critical especially for internal planes. Most internal planes are tagged as “Negative
    Plane” because the actual copper would be the reverse image of what is displayed. Use the N hot key to
    visualize. After tagging, use Edit/Layers/Remove to remove any layers that are not required. You can then use
    the layerord.scr or the controlcolor.scr macros to set the correct layer order.

     Note:    The term "negative plane" refers to it's image polarity and has nothing to do with
              the polarity of the voltage that will be used. Tagging the VCC power plane as a
              positive plane, and the VSS ground plane as a negative plane may feel right but it'll
              only create chuckles when you call me later.

3)   Perform the draw-to-flash (Utilities/Draw to Flash) conversion as required. The step is required because netlist
     extract defines the end of a net as where a draw ends at a flash. In addition, component pins must be flashed.
     Although not required, I convert thermals on negative planes too! You should also consider converting vector
     filled areas to "real" polygons since large vector filled areas do not go back to PADS very well, and the amount
     of data slows down the process and makes the database larger.

4)   Run Utilities/Netlist extract. This process will compute net connectivity based upon the previous steps. Nets
     will be numbered ($net1, $net2, etc.). A small "plus" will be displayed on the through-hole padstacks. (These
     padstack markers can be turned off under Settings/View Options.) No padstack marker means the pad was
     processed as SMT. If you have composite layers, refer to the white paper entitled "Composite Layers.doc"
     Tip: PADS Power-PCB only understands a net as a pair of pins. Because of this you should NOT extract a
          netlist with "single point nets" checked.

5)   It’s a good idea to save the .CAM database at this point.
     The CAM database stores all the information, and since you have gone through several steps it’s a good idea to
     save it at this point. The original Gerber files are no longer needed.

     Tip: You are entering an area where you will be wanting to switch back and forth, between different layer sets.
          For example, for net checking you may want to have all the electrical layers on, and later during part
          building you may want only the Top and the silkscreen layers on. Using the layer bar to turn layers on
          and off can become tedious. Now is a good time to set up the user layer sets you are likely to want to
          switch between. I typically have 3 sets: All the electrical layers, all related Top layers and all related
          Bottom layers. Go to Table/Layer Sets/User. Hot key 1 becomes all electrical layers, hot key 2 becomes
          all top layer, and hot key 3 becomes all bottom layers.

          Now from the CAM editor hit the number 1 key, then the 2 key, then the 3 key. You should be
          instantaneously switching views without have to touch the layer bar. Notice also, that I always include
          the Border layer for reference.

6)   Hit the #1 key (all electrical layers) and run Analysis/Net Check. Each net will be flashed as it is checked and
     the process will find floating traces, locations where D2F should have been run, or nets that it may consider as
     open. This is a required step, do it. If errors are found, Net Check will create a new “netcheck” layer tagged as
     a temporary layer. Turn on that layer by itself to see the errors (if there were any).

     Note:    The default color for this new temporary layer is color #1, which is typically dark red, which makes it
              hard to see. I go to File/Setup/Colors and change the lower left color to white.

         Color #1
Note:   PADS wants the traces to touch the center of pads. The Gerber data may have traces that touch pads
        but do not share a vertex. Netlist Extract will process this condition correctly because as far as the
        copper is concerned they're connected. But this will cause errors when going back to PADS.

        To find this condition, run Analysis/Net Check with "Center Line" checked rather than "True Shape"
        which is the default. Net Check will show flight lines, also called ratsnests, for each net where this
        happens. I close my eyes when I run this because some old designs never seem to worry about trace
        ends hitting the center of a pad and I've seen hundreds of rats nests. It does NOT make your day. To
        correct this condition you use Edit/Move Vertex on the line end and snap it to he center of the pad, or
        delete vertex to remove overshoots. Then you rerun Net Check/Centerline until this errors disappear.

                                      You DON'T want to see THIS

                                                                                       Ratsnest line
          Line vertices
          missed pad
                                                                                       Example of net
                                                                                       check problems
                                                                                       (centerline) with
                                                                                       Fill mode toggled
          Small extra
          segment                                                                      to outline mode
          under pad

        Another cause of ratsnests is small line segments that overshoot the pad center. You have to toggle
        the fill mode (F hot key) to see these, and they must be eliminated (Edit/Delete Vertex).
     In cases where there are a lot of edits required to clean up line ends, you will find yourself switching back and
     forth between Edit/Move Vertex and Edit/Delete Vertex. This can really slow you down, so I program those
     two commands to function keys F4 and F5. I also program Add/Wire to F8 because sometimes it's easier to
     just delete the offending segment(s) and reenter the wire from scratch. I use Add/Wire NOT Add/Line,
     because I want the net connectivity checked as I make the entry. Here's the Macro/Assign/Function Keys
     dialog box from my system:

                                                        Example of my Macro/Assign/Function Keys
                                                        dialog box.

                                                        I also us F3 and F7 for two scripts that I use a
                                                        lot but I deleted their entries from this picture
                                                        to reduce confusion.

                                                        Also note that F1 and F10 are not available
                                                        because they have preassigned tasks by

     PS: Don't forget to remove the temporary layer after you get "Net list is OK"

     Note:    If you have negative plane layers that contain splits, you should do an Info/Query/Net and select
              inside each area. Only thermals inside the split area should highlight. This verifies that the nets are in
              fact segregated by the split lines.

              Example of an
              Inside an isolated
              negative plane area.

Since you may have spent quite a bit of time fixing up the connectivity, it's a good idea to save the database at this
point, perhaps under a different name to preserve previous edits.
7)   Run Utilities/Build Part.
     As ref/des and part outlines become part of the components, they will be placed on new layers called refdestop
     and refdesbot. The original silkscreen layer is left untouched. This is so you can overlay the silkscreen layer
     and the appropriate refdes layer to verify that you have not missed any parts.

     Tip: Since you probably created Layer Sets in step 5 above, add the refdes layers to the appropriate layer set.
          Hot key #1 will remain unchanged but 2 and 3 will have the new layers added. For example:

          1 = Top, all internals and planes, Bottom and Border
          2 = Top, Silktop, Refdestop, and Border
          3 = Bottom, Silkbot, Refdesbot and Border

     The build part process is as follows:
          a) Turn on only the Top layer set (Hot Key 2) and zoom into a component.
          b) Run Utilities/Build Part. "REF" is attached to the cursor. Now is the time to check the button bar to
               make sure the ref/des text height and orientation is correct. I use 50 mils for most text heights. "T"
               turns the REF text 90 degrees and "M" flips it to the other side.
          c) Click the REF where you want the default ref/des location to be - usually directly over the current
               reference designator. This can be changed on an instance by instance basis later. If the "REF" text
               overlaps anything else on the silkscreen layer it will be highlighted also. In cases like this I just
               select an area nearby where other data won't be selected.
          d) You will then be prompted to window around the outline of the part. The cursor is a "crossing
               window" so only portions of the outline need be selected. If no outline information is present, you
               may just enter two points in a blank area to skip this step.
          e) You are prompted to enter the pin sequence. The button bar shows the starting pin # and the "inline
               pins" check box is defaulted ON. The pin numbering will start with pin #1, and you only have to
               select the end pins that are in a row. The system will automatically number the intermediate pins.
     Note: The next pin number will always be displayed on the button bar and, if desired, you can change the
             pin # in this field to another number, or even an alphanumeric (A1 will increment to A2, etc.).
          d) End the pin entry sequence with the right button. After pressing the right button you will get a
               dialog box that allows you to go back and change anything that you did. Assuming everything is
               correct just select OK.
          e) The next dialog box will allow you to enter the footprint name. This dialog box also tells you what
               side the system is building the part from. Make sure you're building from the correct side! Enter
               the “Footprint Name”. This is the name that the system will use to store the part in the internal part
               library. For example, a 16 pin DIP might be called Dip16. Do not enter any spaces in this name,
               and do not enter something like 7400. This is the footprint name, NOT the device name! You only
               need to build one footprint for each unique part (part and footprint are synonymous).

     Note 1: If you miss a part you can always come back and create it later. It is recommended that, while you are
             learning the process, you do only one part at a time until the process feels comfortable. Also, you
             only need to build one part, regardless of the orientations used.

     Note 2: Until I get comfortable, I usually cancel Utilities/Build Part and go directly to Add/Part. You will see
             that there is one footprint in the project library (the external library is used when a list of parts exist in
             a separate file). I select the part and place it over the data I just built it from. Everything should
             match up and now the new refdestop layer has been automatically created. Specific details of the
             Add/Part process follow in #9 below.

     Note 3: Once a library has been created, you can always go to the Part Editor and export the library (.plb
             extension) for use in other reverse engineering jobs.

8)   This may be a good time to go to Tools/Part Editor and see how the footprints are stored, how they can be
     edited in the Part Editor, how the library can be exported, where the origin of a part is (it's always pin #1), etc.
     Note:     Only the pin locations are stored as part of the footprint - pads shapes are not! This is done so that
               when Add/Part is run later, the same footprint can be used even if the pad shapes are different from
               location to location. The Add/Part process will use whatever pad shapes are present as long as their
               locations match with the pin locations.

A few comments on the process:
I usually stay at step #7 for a while. I pan around the design, building one part at a time adding it to the library, then
going to Add/Part to add it to the design, and I may even switch to the backside to build a few parts from there, and
watch the refdesbot layer get created. This way I can watch the project library grow, saving the database
periodically, and watch the silkscreen slowly get overdrawn with the appropriate refdes layer. Soon it becomes
apparent that the refdes layer drawing over the silkscreen is a good way to check that all the parts have been built
and placed - at least on that side. To aid me in this, I change the color for the refdes layer to something noticeably
different from its related silkscreen layer. This is really the only way to check that a reference designator hasn't
been missed because the system will allow missing reference designators in the sequence, and those little decoupling
caps or small resistors are easy to overlook. You will also start to notice that the system will draw a thin white box
around each part, using dotted lines for parts on the backside.

9)   The process of ADDING A PART.
     Select Add/Part…
     a) Select a footprint and press OK
     b) You will be asked to enter a Device Name and Reference
          Designator. Only the ref/des is required and that's the only field I
          ever use.
     c) Note also, that this is where you could go to an external library and
          load a part from there. Any part loaded from an external library
          gets copied into the current project library.

           Add/Part is the process of actually instantiating each component. Add/Part replaces the data on the
           silkscreen layer with a part. A white box is drawn as a visual indicator that there is a part there rather
           than just Gerber graphics. A solid white line is used for top-side parts and a dotted white line is used for
           bottom-side parts.

     c)    Pin #1 of the selected part becomes attached to the cursor. The object snap is automatically turned ON so
           that the part snaps to the selected pad. It’s a good idea to turn off the grid snap (S key) during this
           function. If you want to rotate the part before you place it, just press the T (Turn) key. If you want to
           place the part on the back side of the PCB, press the M (Mirror) key (all graphics and Ref/Des will
           mirror). Once the part is placed, you press the right button to commit and the pins become part of the
           appropriate nets. You are now prompted to select the Ref/Des and move it on top of the silkscreen
           Ref/Des. Here again, you can use the T and M keys to rotate or mirror the ref des as required. After
           placing the Ref/Des, you hit the right button to commit, and the part is instantiated, the Ref/Des is
           automatically incremented, and you are ready to place the part in the next location. You can change parts
           while in the Add/Part command by selecting the part pulldown on the button bar. The next Ref/Des
           number is always displayed on the button bar. If you are not doing the placement in Ref/Des order, you
           can change the Ref/Des on the button bar at any time just by typing it in. The system will not allow
           assigning the same Ref/Des again, and the next time you come back to this part, the next unused Ref/Des
           will automatically be selected as the default.

     Note 1: The instantiated component's Ref/Des and outline information is placed on a NEW layer which is
             automatically tagged as refdestop or refdesbot. This is done so that the original silkscreen layer
             remains untouched and can serve as a visual check so that no parts are missed. If I have access to a
             Bill of Materials I also yellow line each refdes as I go to make sure I don't miss any.
     Note 2: I suggest selecting Settings/View Options and set the part outlines to "draw after graphical data" at the
             bottom of the dialog box. This will make the part outlines more visible.

     Note 3: I also suggest that you view part outlines for each side separately. Even though the part outlines on
             the top are shown as solid, and on the bottom as dotted, it can get crowded on a dense board when
             both are shown. (One of those scripts I mentioned above in step # 6 switches the part outlines on and

9)   Proceed with steps # 7 and 8 until all parts have been built and added. Check your work often, save it often, but
     feel free to take a break at any time. All information becomes part of the .CAM file you save, so opening the
     database later will take over where you left off. No information is lost.

     When you think you have completed the process, look at the silkscreen layer(s) and see if there is any other
     information - not related to parts - that should eventually exist in CAD the database. If there is, copy this data
     to the appropriate refdes layer. Then when you're sure - remove the original silkscreen layer using
     Edit/Layer/Remove and reorder the layers putting the refdes layer(s) where the silkscreen layers were in the
     layer sequence.

     Then after the final save, select File/Export/CAD Data and choose the target CAD system.

     There - wasn't that easy?

Special Notes and Considerations

Building parts from the backside.
     If you build a part from the backside, the system should detect this automatically, and show you that the part is
     on the backside in step 7E above. Regardless of the side the data was built from, the system will always store
     the part in the library as if you built it from the topside. This makes the overall process more reliable because
     parts are always stored the same way, independent of how they were built and how they are instantiated. I also
     use View/Backside to make reading of the reference designators easier. With View/Backside I often forget
     that I'm actually working on the backside.

Adding parts to the backside.
    You hit the M key to flip the part for the placement on the backside. Although not required, I use
    View/Backside again. This does not automatically mirror the data, or in any way affect the database, it just
    changes the view of it by effectively "flipping the board over". Parts can be added to the backside without
    changing the view. Some people leave the view in the normal front side mode, which makes it easy to see that
    the part has been mirrored when the M key is pressed.

Building double-sided parts
     An example of a double-sided part would be an edge connector that has SMT connections on both sides of the
     PCB. CAM350 can handle this, as long as your target CAD system can. We suggest turning ON only the
     topside when the topside pins are being selected then, while still in the Build/Part command, turning ON the
     backside when selecting those pins. Also, if there are multiple rows of pins, you can use inline pins for each
     row, but remember to uncheck the Inline Mode when you select the first pin of the next row. Some edge
     connectors have a pin sequence that are not in rows and require that you point at each pin.

Checking your Padstacks before you get started
    CAM350 displays a black cross on every through-hole padstack. Before you get started, make sure that SMT
    pads do not have a padstack marker and that through-holes do.

Exploding Nets
     If the netlist extraction was incorrect for any reason, such as you forgot to do draw-to-flash conversion, you
     can use Edit/Change/Explode Netlist to remove the net connectivity. Alternatively, you can just run the netlist
     extract again and let it automatically explode the nets. This can be done at any time even after the build part -
     add part process.
Exploding Parts
     If you notice that you made a mistake after you've already added the part and moved on to another command,
     you must explode the incorrect part before trying to add another part. If you try adding a part on top of another
     part you'll be sorry at the mess you have to clean up when explode results in redundant data all stacked up.

Netlist Extract note
     As stated in 2a above use drill files to assure proper layer to layer connectivity. This is very important for all
     boards, and absolutely required for boards that contain blind and buried vias. If no drill file is present, the
     system will assume that round or square pads that are coincident on both sides on the PCB, are through-holes.
     If this case exists, the netlist extract process may be incorrect.

Add Part note
    Add/Part will verify that the pin locations match the Gerber data before it will allow the part to be added. It
    uses a 2 mil tolerance to handle pads that are not perfectly aligned. Nevertheless, the overall pin count must
    match exactly and placement should match. If they don't you will get a warning message that some pins don't
    match. DO NOT PLACE THE PART if you get this message. Find out what's wring - fix it - and then move

To top