5 Replies Latest reply on Mar 26, 2010 4:17 AM by Andreas.Schaefer

    Check for modified vias on components




      I have to find out by automation, if a via, wich is placed in a package cell, was replaced by another via padstack with padstack processor.


      We have added the vias in Cell Editor to the package and placed underneath the center pad, to ensure a good ground connection of the LGA.

      But in some cases we have seen, the those vias were replaced interactively by a layouter with padstack processor, although the replacement via padstack is not allowed to be used here.


      The following solution approaches are not working here:

      • setting the via type as allowed via in CES for this specific net (the same net has other defaoult vias somewhere else)
      • drawing a rule area around the LGA and setting th evia as via type for the net in this specific rule area (too much effort of drwaing and maintaining new rule areas constraints around LGAs)
      • locking the via in Cell Editor (does not help; via can be changed anway)


      So I would like to know, if someon has an idea to find out, if a via on a component in the design is different to the via defined on the cell in the cell database.

      We checked the vias component and saw, that the replacemnt via also belongs to the component. This relationship has not been lost by padstack processor.

      But the padstack is not modified in any way.

      What we are looking for is such a functionallity, wich tells my if the design elements of a cell are modified compared to the original one in the design cell database.


      kind regards,


        • 1. Re: Check for modified vias on components

          Hi Andreas,

          The via object has a method called IsPadstackModified that checks if the padstack for the via was modified compared to the original padstack. It also has a CurrentPadstack and OriginalPadstack property that if not equal would tell you that the via padstack was changed. However, I think this would be relative to the local cell library and would not tell you if the user changed the local cell. I think what you would need to do is to examine the Cell via the Central Library (not local library) and compare it with the instance of the cell on the board.



          • 2. Re: Check for modified vias on components

            Hi Al,


            I think you misunderstood something.

            The package cell is not change din the local cell database. Al we dis was to run padstack processor, wich changed the vias in the design.

            Those vias were part of the package befor the padstack processor run and also afterwards.

            The IsPadstackModiefied does not help, because the padstack was replaced but not modified.


            What I would need is a IsCellModified (compared to local/central library). SO you are right, I have to compare the cell vias in the design with the local library.


            But we have no clue yet. How can we access the local cell database by automation, open the cell here and have a look into it by automation ( no GUI please!)?


            Do you have any idea?


            kind regards,


            • 3. Re: Check for modified vias on components

              Hi Andreas,


              Here is a script that gets the cell document from the local database, and compares the via padstack names:


              Set pcbDoc = ActiveDocument

              Set celled = pcbDoc.CellEditor
              Set celldb = celled.ActiveDatabase

              For Each comp In pcbDoc.Components(epcbSelectSelected)
                   For Each cellpart In celldb.Partitions
                        For Each cell In cellpart.Cells
                             If cell.Name = comp.CellName Then
                                  Set celldoc = cell.Edit
                                  For I = 1 To celldoc.Vias.Count
                                       Set cellvia = celldoc.Vias.Item(I)
                                       Set compvia = comp.Vias.Item(I)
                                       If Not compvia.CurrentPadstack.Name = cellvia.OriginalPadstack.Name Then
                                            MsgBox "On component " & comp.Name & ", cell via " & cellvia.OriginalPadstack.Name _

                                               & " differs from component via padstack " & compvia.CurrentPadstack.Name
                                       End If
                                  celldoc.Close False
                             End If
                   Set celldb = Nothing
                   Set celled = Nothing


              You can see that the local cell database is accessible from the PCB Document object through the CellEditor property.  From there, get the active database, and iterate over the partitions and cells to find the right cell object, then call the Edit method to open the cell document.  I'm sure this will need work to meet your requirements, but I think it gives some clues on how to get there.



              • 4. Re: Check for modified vias on components


                Looks like John was able to get you a sample. FYI: in your MentorGraphics Install directory under release (eg 2007.8EE\docs\pdfdocs\) there is a PDF - "library_editors_auto.pdf" -  that should help you with automation for library manager and it's Editors (Cell, Padstack and Part Editor).


                • 5. Re: Check for modified vias on components

                  Hi Al,

                  We already have an prototype wich works quite good.

                  The hardest piec of work now will be to test it a little bit more intelligent than John described.

                  Instead of yust counting the vias we will have to do a comparison of coordinates (local library cell vias and design cell vias)

                  relative to the cell origin / side /rotation.

                  This will take quite a while to implement.