• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. How to select all floating wires in a schematic (both connected...

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 143
  • Views 4444
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to select all floating wires in a schematic (both connected to terminals or not connected to a terminal)

tramt
tramt over 1 year ago

Hi

How to select all the floating nets in a cell at one time (including floating wires that already connected to a terminal or not connected to a terminal)

I read an article here but it only helps to delete floating nets that are not connected to anywhere

community.cadence.com/.../how-to-select-and-delete-all-the-floating-nets-in-a-cell

Thanks and regards

  • Cancel
Parents
  • AurelBuche
    AurelBuche over 1 year ago

    Here's the code that get the floating wires using schCheck

    tramt don't hesitate if you have questions about it as this can appear complex SKILL++ if you are not familiar with Scheme

    ;; `inScheme' used as this is SKILL++ file
    ;; if current file extension is .ils, this can be skipped
    (inScheme
    (let ()
    
      (defun get_floating_wires (cv)
        "Run `schCheck' to extract CV connectivity then return
     the list of wires having an associated 'floating' marker"
        (schCheck cv)
        (foreach mapcan marker cv->markers
          (and (pcreMatchp "floating" marker->msg (pcreGenCompileOptBits ?caseLess t))
               (forall obj marker->objects (equal "line" obj->objType))
               marker->objects
               )))
    
      (defun get_connected_wires (wire)
        "Return the list of wires connected to WIRE (including itself)"
        (let ((done_wires  (makeTable t nil))
              (to_do_wires (list wire))
              )
          ;; to_do_wires is a list of all wires whose neighbours have not been fetched yet
          ;; wires in this list are processed one by one until the list is empty
          (while to_do_wires
            ;; Fetch next wire to process, mark it as done immediately to avoid
            ;; reprocessing it
            (setq wire (pop to_do_wires))
            (setf done_wires[wire] t)
            ;; Add connected wires that have not been processed yet to to_do_wires list
            (foreach obj (dbProduceOverlap wire->cellView wire->bBox 0)
              (when (and (equal "line" obj->objType)
                         (equal obj->net wire->net)
                         (not done_wires[obj])
                         )
                (push obj to_do_wires)
                )))
          ;; Return the list of done wires
          done_wires[?]
          ))
    
      (defglobalfun ab_select_floating_wires ( @key  (cv (geGetEditCellView))
                                               @rest _
                                               )
        "Select floating wires in CV (this implies running `schCheck' which extracts connectivity)"
        ;; Make sure input cellview is a schematic one
        (assert (equal "schematic" cv->cellViewType) "Not a schematic view: %s/%s/%s"
          cv->libName cv->cellName cv->viewName)
        ;; Fetch and select floating wires
        (mapc 'geSelectFig (mapcan get_connected_wires (get_floating_wires cv)))
        )
    
      );closure
      );inScheme
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • AurelBuche
    AurelBuche over 1 year ago

    Here's the code that get the floating wires using schCheck

    tramt don't hesitate if you have questions about it as this can appear complex SKILL++ if you are not familiar with Scheme

    ;; `inScheme' used as this is SKILL++ file
    ;; if current file extension is .ils, this can be skipped
    (inScheme
    (let ()
    
      (defun get_floating_wires (cv)
        "Run `schCheck' to extract CV connectivity then return
     the list of wires having an associated 'floating' marker"
        (schCheck cv)
        (foreach mapcan marker cv->markers
          (and (pcreMatchp "floating" marker->msg (pcreGenCompileOptBits ?caseLess t))
               (forall obj marker->objects (equal "line" obj->objType))
               marker->objects
               )))
    
      (defun get_connected_wires (wire)
        "Return the list of wires connected to WIRE (including itself)"
        (let ((done_wires  (makeTable t nil))
              (to_do_wires (list wire))
              )
          ;; to_do_wires is a list of all wires whose neighbours have not been fetched yet
          ;; wires in this list are processed one by one until the list is empty
          (while to_do_wires
            ;; Fetch next wire to process, mark it as done immediately to avoid
            ;; reprocessing it
            (setq wire (pop to_do_wires))
            (setf done_wires[wire] t)
            ;; Add connected wires that have not been processed yet to to_do_wires list
            (foreach obj (dbProduceOverlap wire->cellView wire->bBox 0)
              (when (and (equal "line" obj->objType)
                         (equal obj->net wire->net)
                         (not done_wires[obj])
                         )
                (push obj to_do_wires)
                )))
          ;; Return the list of done wires
          done_wires[?]
          ))
    
      (defglobalfun ab_select_floating_wires ( @key  (cv (geGetEditCellView))
                                               @rest _
                                               )
        "Select floating wires in CV (this implies running `schCheck' which extracts connectivity)"
        ;; Make sure input cellview is a schematic one
        (assert (equal "schematic" cv->cellViewType) "Not a schematic view: %s/%s/%s"
          cv->libName cv->cellName cv->viewName)
        ;; Fetch and select floating wires
        (mapc 'geSelectFig (mapcan get_connected_wires (get_floating_wires cv)))
        )
    
      );closure
      );inScheme
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information