• 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 Design
  3. automating schematic to post layout simulation flow

Stats

  • Locked Locked
  • Replies 12
  • Subscribers 126
  • Views 6879
  • 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

automating schematic to post layout simulation flow

supriyo1985
supriyo1985 over 1 year ago

Hi, 

I need some help automating a flow that takes a schematic as input, calls the automatic placer and router in Layout Suite GXL, extracts parasitics using Calibre PEX, and then runs a post-layout simulation.

I was planning to use Ocean Script for this purpose. I noticed that when I executed the above steps manually through GUI, all the commands and outputs were printed on the Virtuoso main window. For example, the automatic router invoked the following commands and several others.

**************************************************************

*                                                            *

*    Begin Min-Spanning-Tree Routing Flow for Normal Nets    *

*                                                            *

**************************************************************

REPORTING_STATS | Elapsed Time: 0.0 Secs | Mem: "Current: 2369.00" Mb | Cmd: initialize_partition -set sel:4654ce30

[::ia:: INFO] Sourcing /usr/local/packages/cadence_2021/IC618/share/cdssetup/dfII/ia/tcl/checkRoutability/flow.tcl

**************************************************************

*                                                            *

*    Begin Check Routability Flow                            *

*                                                            *

**************************************************************

route_optimize -set sel:4fda8f80 -route_over_pins true -truncate_at_pins false -allow_wrongway true -make_only_net_spec_vias true -uniform_taper_to_first_via true

However, when I manually executed the above command, the tool failed to recognize it.

*Error* eval: undefined function - route_optimize. 

How do I go about this problem? Could anybody help? I have attached a figure so that it is easy to understand what I am doing. 

Regards

Supriyo

  • Cancel
Parents
  • supriyo1985
    supriyo1985 over 1 year ago

    Basically, I want to know how to call the auto placer and auto router from the command line. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • supriyo1985
    supriyo1985 over 1 year ago

    Basically, I want to know how to call the auto placer and auto router from the command line. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • RobMan
    RobMan over 1 year ago in reply to supriyo1985

    Please see...

    Virtuoso Layout Suite SKILL Reference (cadence.com)

    Specifically Virtuoso Layout Suite SKILL Reference -- vcpfeRunCustomDigitalPlacer (cadence.com)

    ... and associated functions.

    Virtuoso Layout Suite SKILL Reference -- Space-based Router Functions (cadence.com)

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to RobMan

    Thank you. So far, I have successfully executed the following 3 steps using the SKILL code. 

    1. Generate from schematic

    2. modgen creation (my old post helped a lot, https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/38265/skill-command-for-layout-execution)

    3. automatic placement

    for routing, I am calling the following function 

    rteOptimizeRoute(
    ?cv (geGetEditCellView)
    ?critic t
    ;?checkAntenna t
    ;?detailCritic t
    ;?excludeNet ""
    ;?excludePowerGround ""
    ?reduceVias t
    ;?region ""
    ;?set t
    ;?useDoubleCutVias t
    )

    But it does not seem to be routing anything.

    ****************************************************************************
    INFO: Router used all 32 hierarchy levels for loading the layout data.
    ****************************************************************************
    === interpreted: -check_rule { minarea minedge minenclosedarea minwidth samenet samenet_crossing }
    Begin droute...
    Begin clean...
    ### attempted 0; success 0; guides 0;
    End clean 0.0s (kernel), 0.0s (user), 0.0s (elapsed), 2294.0MB vm, 2294.0MB peak vm
    Begin critic...
    End critic 0.0s (kernel), 0.0s (user), 0.0s (elapsed), 2294.0MB vm, 2294.0MB peak vm
    End droute 0.0s (kernel), 0.0s (user), 0.0s (elapsed), 2294.0MB vm, 2294.0MB peak vm
    Begin critic...
    0 routes were changed.
    End critic 0.0s (kernel), 0.0s (user), 0.0s (elapsed), 2294.0MB vm, 2294.0MB peak vm

    Am I missing something?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to RobMan

    Thanks. Is this the function to use for routing the nets?

    rteOptimizeRoute()

    It does not seem to be routing anything.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to supriyo1985

    After the routing, I also need to create labels for the pins; otherwise there is LVS mismatch. Could you also share how to automate the label creation process? 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to supriyo1985

    I have had some success in automating the flow, but I need help to move further. Here are the details of what I have done so far and what is missing. I am sharing this through a Google Drive link as I have been unable to post the content here. 

    https://docs.google.com/document/d/1qRC95SYJFRmwyvdZ9grFzQ8W-OvS8G0U/edit?usp=share_link&ouid=101268368332665463426&rtpof=true&sd=true

    I am also trying to reach Cadence online support through a university representative. 

    Any help is highly appreciated. 

    Regards

    Supriyo

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AB_1718115862799
    AB_1718115862799 over 1 year ago in reply to supriyo1985

    If you get the cellview data object for the layout, you can iterate through the terminals, pins, and figures to add a label at the center box of terminal pin figure.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AB_1718115862799
    AB_1718115862799 over 1 year ago in reply to supriyo1985

    Routing is tough. I see you're using IC6.1.8. There's a number of ways to route, I'll mention a couple here:

    1. you can use the Wire Assistant to create a routing preset. Then call the preset like this:

       vsrLoadPreset("myPresetName")
       _iaAutomaticExecuteCmd('autoRoute 'all nil)

    You can also do 'selected instead of 'all.

    2. The more complex way, find the Cadence Space Based User Guide, and the Command Reference. You'll write a routing script in TCL syntax and call it in SKILL with:

    rdeSource("/path/to/my/tcl.script" t t)

    Unfortuantely, you really need to understand the concepts of constraints, constraint groups, and constraint precedence to even become functional with this approach. It's very powerful but very tough to use and harder to debug.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to AB_1718115862799

    Thanks a lot. I am trying solution 1 now, which gives better results than lxSelectedRoute. However, I still have to keep the GXL editor open for Solution 1 to work. Otherwise, I get the following error, although the preset file exists in the dir. 

    *Error* (IA-30123): Unable to load preset file autoDeviceRouting.preset from directory /home/local/eda11/sm84275/workspace/****/.cadence/dfII/ia/presets.

                        This is because directory /home/local/eda11/sm84275/workspace/****/.cadence/dfII/ia/presets does not exist.

                        Ensure that the specified directory is exist.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to supriyo1985

    There seems to be some issue with the nclAnalogAutoPlaceCB(layout_view 3) function. If I call this (load "") after step 1 from within the same file, placement looks different (right figure) than if I execute it directly from CIW (left figure). The left figure result looks correct to me as all components are contained within the PR boundary. It seems that modgen creation in step 1 is affecting nclAnalogAutoPlaceCB’s behavior. 

    Please help. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • supriyo1985
    supriyo1985 over 1 year ago in reply to supriyo1985

    I was able to get around the nclAnalogAutoPlaceCB issue. Basically, I deleted the old PR boundary, created a larger boundary and set the lower left corner to (0,0), moved the cells inside the boundary, and then did nclAnalogAutoPlaceCB a couple of times. 

    I have updated step 2 in Google Docs for reference. 

    I now have an automated flow that can run from schematic to PEX. Thanks for help. 

    I am having some problems running the ocean script inside CIW but I am working on it. 

    • Cancel
    • Vote Up 0 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