• 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. Cadence Virtuoso Layout SKILL placement of multi point 45...

Stats

  • Replies 1
  • Subscribers 143
  • Views 47
  • Members are here 0

Cadence Virtuoso Layout SKILL placement of multi point 45 degree wire (not path) that passes off-grid DRC

AleksandrV
AleksandrV 1 hour ago

Hi everyone,

I'm trying to automate some layout segment synthesis in Cadence Virtuoso using SKILL programming language.

1) The goal:
Create a multi-point trace with 45 degree bends using SKILL that passes DRC.

2) The problem:
The created path using dbCreatePath command for the top (no. 1 on the figure below) trace doesn't pass DRC check because of off grid errors in the parts where the path bends - specifically the outer points the value of which I can't edit. The track start, intermediate and end points are on grid, ex. (0 0) -> (1 0) -> (2 1) -> (3 1). The code example is given below (the synthesis part works fine, the coordinates here are just a bunch of variables, their value doesn't really matter...).


myPathSeg1n = dbCreatePath(cellID list(metalBot "drawing") list(startXn:startYn (midPointX - offsetX):startYn (midPointX + offsetX):stopYn (stopXn + singleViaSize):stopYn) trackWidth_um "squareFlush")


There is also a command to manually create a shape called Geometric wire (create-shape-geometric wire. The path to the command is different for new IC version, I believe it's just called Wire), which is the bottom trace (no 2 on the figure above). In this figure, this wire is has been created by hand and consists of multiple path segments (there was also an old post where Andrew Beckett mentioned that the layout wire is just a set of straight paths...), which are obviously chamfered (green arrows in the above figure). As far as I know, there is no direct SKILL command synthesize this the shape called "Wire" or "Geometric Wire" (in older versions), whereas LeHiCreateGeometricWire() simply calls up the geometric wire tool in the layout window to the mouse pointer (the placement is further done by hand).

I've also tried to recreate the a single bend of a drawn by hand geometric wire with two SKILL code lines for creating separate path segments
dbCreatePathSeg(cellID "M1" 0:0 0:1 .85 "variable" "variable" list(0 0))
dbCreatePathSeg(cellID "M1" 0:1 1:2 .85*sqrt(2) "chamfer" "chamfer" )

I managed to get the result in the figure below, but the chamfer is not flush with the edge of the first segment. The width of the chamfered segment is the same as the first one, the multiplication by sqrt(2) is required for 45 degree bent traces as mentioned in the documentation...

3) The question(s):
3.1) Maybe anybody dealt with synthesizing 45 degree traces in Cadence Virtuoso SKILL and avoiding the off grid error on the edges where the trace specifically bends?
3.2) Or maybe there is a way to recreate a wire placement using a specific SKILL command?
3.3) Or maybe there is a solution on how to make the chamfer in the second figure be flush with the track?

Any intake might help, as no further ideas on how to deal with this according to the available command description in the documentation and the problem actually feels like it's trivial...

  • Cancel
  • Sign in to reply
  • Andrew Beckett
    Andrew Beckett 1 hour ago

    Creating the pathSegs correctly so that everything lines up can be a little challenging, so if you're OK with using an le* function (i.e. you're not trying to do this within a PCell), then I suggest that the simplest approach is to start by drawing a path (your code), since this is simple to construct:

    myPath = dbCreatePath(cellID list(metalBot "drawing") list(startXn:startYn (midPointX - offsetX):startYn (midPointX + offsetX):stopYn (stopXn + singleViaSize):stopYn) trackWidth_um "squareFlush")

    and then convert this to pathSegs:

    myPathSegs = leConvertShapeToPathSeg(myPath)

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • 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