• 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. Similar tool / script like "size" for resizing of MPP ?...

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 143
  • Views 1255
  • 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

Similar tool / script like "size" for resizing of MPP ??

Laurentz
Laurentz over 3 years ago

Hi,

I am using Vituoso IC 6.1.8 for layout and I searching for a tool like "size" for resing of MPP guardrings.

I have the issue that the guardring is too close to some resistor and generates  drc errors and to fix them I have to stretch the guardring to outside in all directions by some distance. It would do the same thing like "size" comand is doing for rectangles or polygons.

Does somebody have a script for this purpose ?! Or can you give me an idea ?

I want to select a MPP guadring and then by calling a function with the Spacing as argument the guardring should be stretched in all directions. The argument can be positive or negative AND the shape of MPP can be a rectangle or polygon kind.

Best regards,

  • Cancel
  • AurelBuche
    AurelBuche over 3 years ago

    Hi,
    You might try something like this, it works but it is not bulletproof

    (inScheme
    (let nil

      (defun closed_polygon? (points)
        "Return t if POINTS describe a closed polygon, nil otherwise"
        (let ((p0 (car points))
              (p1 (car (last points)))
              )
          (destructuringBind (x0 y0) p0
            (destructuringBind (x1 y1) p1
              (and (nearlyEqual x0 x1) (nearlyEqual y0 y1))
              ))))

      (defun close_polygon (points)
        "Return a closed list of POINTS"
        (if (closed_polygon? points) points
          ;; Here we close the polygon in the middle of a segment
          ;; This avoids many issues with path enclosures (happening at corners)
          ;; Adding a check to make sure this segment is either horizontal or vertical could be a good (necessary?) idea
          (let ((mid_pt (centerBox (list (car points) (car (last points))))))
            (cons mid_pt (append1 points mid_pt)))))

      (defglobalfun size_mpp_gr (@key (ring (css)) size (snap_mode "orthogonal") @rest _args)
        "Grow or shrink MPP RING, increasing it by SIZE"
        (assert ring                          "Nothing selected")
        (assert (equal ring->objType  "path") "Selection is no path")
        (assert (rodGetObj ring)              "Selection is not an MPP")
        (assert (numberp size)                "Please provide a valid size")
        (letseq ((cv     ring->cellView)
                 (points ring->points)
                 (closed (closed_polygon? points))
                 )
          (setq points (pcGrowPoints points size))
          ;; This did not work properly as I'm not sure how to use `geClosePolygon'
          ;; (it seems to only return the list of missing points)
          ;; And `geCompressPointArray' closes the polygon on a corner
          ;(when closed (setq points (geCompressPointArray cv (append points (geClosePolygon cv points snap_mode)) nil)))
          (when closed (setq points (close_polygon points)))
          (setf ring->points points)
          ))

      ));SKILL++ closure

    Cheers,

    Aurélien

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Laurentz
    Laurentz over 3 years ago in reply to AurelBuche

    Aurelien, this is great !Slight smile

    Your tools works very good, as long the enclosure subpaths of the MPP do not have offsets.

    Thank you !Wave

    Best regards,

    Laurent

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel

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