• 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. DRC, LVS, parasitic extraction using SKILL

Stats

  • Replies 7
  • Subscribers 143
  • Views 1094
  • Members are here 0

DRC, LVS, parasitic extraction using SKILL

HN20250717689
HN20250717689 1 month ago

Hello everyone,

I am trying to use SKILL script to run DRC, LVS and parasitic extraction for a layout design. Do you have any suggestion on how to make this work?

Thank you very much!

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

    Which DRC, LVS and parasitic extraction tools are you using? What does your script look like at the moment, and what isn't working?

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • HN20250717689
    HN20250717689 1 month ago in reply to Andrew Beckett

    Hello Andrew,

    Thank you for your reply.

    I am using Calibre to do DRC, LVS and parasitic extraction. 

    First I am testing my commands in the CIW of the Cadence Virtuoso tool to see if it is working as expected or not. When I run the command system("calibre -drc lna_raw_drc_runset &") from the CIW, the output is "*Error* eval: undefined function - calibre". Then I tried with the command "system("which calibre")" from the CIW, the output is 1 and I don't receive any valid path (the output is supposed to be a valid path for calibre I guess). 


    I check in the kit.tsmc65nm_gp.1.0c.csh file of the tsmc65nm process, there is a line with the command "source $CMC_HOME/scripts/mentor.calibre.2020.4_34.17.csh". I source the kit.tsmc65nm_gp.1.0c.csh file and then use "virtuoso &" everytime I start the tool but I am not sure why I cannot use the Calibre's command from the CIW. 

    Is that the case that Calibre is only integrated into the tsmc65nm pdk itself instead of being installed into the Cadence Virtuoso tool (so I cannot use the Calibre command from the CIW)?

    Do you have any suggestion for my issue? My final plan is to automate the process of doing DRC, LVS and parasitic extraction using SKILL script instead of doing manually. 

    Thank you very much!

    Hoang

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 1 month ago in reply to HN20250717689

    There's a limit to how much advice I can give on Calibre since it's not a Cadence tool (it's from Siemens EDA, formerly Mentor), but a few notes:

    HN20250717689 said:
    First I am testing my commands in the CIW of the Cadence Virtuoso tool to see if it is working as expected or not. When I run the command system("calibre -drc lna_raw_drc_runset &") from the CIW, the output is "*Error* eval: undefined function - calibre".

    This can't be what you've done if it gives that error. You'd get that error if you entered:

    calibre -drc lna_raw_drc_runset

    in the CIW, because the evaluator would think that you are trying to run a SKILL function called "calibre". If you called system, then any output that command produced would appear in the terminal in which you started virtuoso - so for me (because it's not in my path) I get (in the terminal):

    sh: calibre: command not found

    (not surprising, since I don't have access to Calibre).

    HN20250717689 said:
    Then I tried with the command "system("which calibre")" from the CIW, the output is 1 and I don't receive any valid path (the output is supposed to be a valid path for calibre I guess).

    You'd get the path (or an error) in the terminal, and system would return the exit status in the CIW. Since the exit status is 0, then calibre is not in the path. I get 1 as well, and in the terminal:

    which: no calibre in (/export/home/apps/IC618_isr/bin:/export/home/apps/IC618_isr/tools/bin/64bit:/export/home/apps/IC618_isr/tools/bin:/export/home/apps/IC618_isr/tools/dfII/bin:/usr/local/bin:/bin:/usr/bin:.:/export/home/apps/SPECTRE231_isr/bin:/export/home/apps/PVS231_latest/bin:/export/home/myuser/lib:/usr/local/libexec/cssc:/export/home/apps/sbcl-1.1.16/bin:/usr/local/go/bin)

    Before running virtuoso, try "which calibre" in the terminal window to see if it's found.

    HN20250717689 said:

    I check in the kit.tsmc65nm_gp.1.0c.csh file of the tsmc65nm process, there is a line with the command "source $CMC_HOME/scripts/mentor.calibre.2020.4_34.17.csh". I source the kit.tsmc65nm_gp.1.0c.csh file and then use "virtuoso &" everytime I start the tool but I am not sure why I cannot use the Calibre's command from the CIW. 

    That script is something set up at your site - it's not provided by the foundry. So you should check with whoever developed it. Check too with the terminal test that I suggested above - and then try to figure out where Calibre is installed (maybe Calibre isn't installed in the right place or something is going wrong in this setup script - hard to know because it's nothing standard.

    HN20250717689 said:
    Is that the case that Calibre is only integrated into the tsmc65nm pdk itself instead of being installed into the Cadence Virtuoso tool (so I cannot use the Calibre command from the CIW)?

    No. It's just a matter of the UNIX path being set up properly.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • HN20250717689
    HN20250717689 1 month ago in reply to Andrew Beckett

    Thank you very much for your reply.

    Andrew Beckett said:

    You'd get the path (or an error) in the terminal, and system would return the exit status in the CIW. Since the exit status is 0, then calibre is not in the path. I get 1 as well, and in the terminal:

    which: no calibre in (/export/home/apps/IC618_isr/bin:/export/home/apps/IC618_isr/tools/bin/64bit:/export/home/apps/IC618_isr/tools/bin:/export/home/apps/IC618_isr/tools/dfII/bin:/usr/local/bin:/bin:/usr/bin:.:/export/home/apps/SPECTRE231_isr/bin:/export/home/apps/PVS231_latest/bin:/export/home/myuser/lib:/usr/local/libexec/cssc:/export/home/apps/sbcl-1.1.16/bin:/usr/local/go/bin)

    Yes for this part I also get an error in the terminal as below:

    which: no calibre in (/CMC/tools/cadence/IC06.18.120_lnx86/bin:/CMC/tools/cadence/IC06.18.120_lnx86/tools/bin/64bit:/CMC/tools/cadence/IC06.18.120_lnx86/tools/bin:/CMC/tools/cadence/IC06.18.120_lnx86/share/oa/bin:/CMC/tools/synopsys/wv_vQ-2020.03/wv/Q-2020.03/bin:/CMC/tools/mentor/ixl_cal_2020.4_34.17/bin:/CMC/tools/cadence/QUANTUS20.12.000_lnx86/tools.lnx86/bin:/CMC/tools/cadence/QUANTUS20.12.000_lnx86/bin:/CMC/tools/cadence/SPECTRE20.10.155_lnx86/tools.lnx86/dfII/bin:/CMC/tools/cadence/SPECTRE20.10.155_lnx86/tools.lnx86/bin:/CMC/tools/cadence/SPECTRE20.10.155_lnx86/bin:/CMC/tools/cadence/EXT19.13.000_lnx86/bin:/CMC/tools/cadence/EXT19.13.000_lnx86/tools/bin:/CMC/kits/local/bin:/CMC/tools/cadence/IC06.18.120_lnx86/tools/dfII/local/bin:/CMC/tools/cadence/IC06.18.120_lnx86/tools/dfII/bin:/home/qmnguyen/python39/bin:/home/qmnguyen/.local/bin:/CMC/tools/synopsys/syn_vD-2010.03-SP4/bin:/CMC/tools/synopsys/syn_vD-2010.03-SP4/amd64/syn/bin:/CMC/tools/synopsys/syn_vD-2010.03-SP4:/CMC/tools/cadence/XCELIUMMAIN20.03.008_lnx86/tools.lnx86/bin:/CMC/tools/cadence/XCELIUMMAIN20.03.008_lnx86/tools/bin:/CMC/tools/cadence/XCELIUMMAIN20.03.008_lnx86/bin:/CMC/tools/cadence/MMSIM_07.20.109_lnx86/tools/dfII/bin:/CMC/tools/cadence/MMSIM_07.20.109_lnx86/tools/bin:/CMC/kits/local/bin:/CMC/tools/cadence/IC5141USR5_lnx86/tools/dfII/local/bin:/CMC/tools/cadence/IC5141USR5_lnx86/tools/dfII/bin:/CMC/tools/cadence/IC5141USR5_lnx86/tools/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/local/bin:./)

    Andrew Beckett said:
    Before running virtuoso, try "which calibre" in the terminal window to see if it's found.

    I also tried with "which calibre" in the terminal as you suggested and this output:

    calibre: Command not found.

    Yes for sure I will try to figure out if my Calibre is being set up properly. I think the problem might be due to this setup. 

    Thank you so much for your suggestions!

    Have a great day!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • HN20250717689
    HN20250717689 1 month ago in reply to HN20250717689

    Hello Andrew, 

    I think I already set the path properly as you suggested. Now when I run the command "which calibre" from the terminal (before running virtuoso), I got the output as below:
    /CMC/tools/mentor/aoi_cal_2020.4_34.17/bin/calibre

    However, when I run the command "calibre -drc -runset /home/qmnguyen/tsmc65nm/hoangtn/lna_raw/layout/lna_raw_drc_runset &" from the terminal, the output is as below and seems to be not responding for a long time. I think it is just printing out its environment, licensing, and usage information.

    Is that because I did something wrong? Do you have any suggestion on this?

    The content of my lna_raw_drc_runset (which I saved from the manual DRC procedure using Calibre) is as follows:

    *drcRulesFile: /CMC/kits/tsmc_65nm/CRN65GP/PDK/Calibre/drc/calibre.drc
    *drcRunDir: /home/qmnguyen/tsmc65nm/hoangtn/lna_raw/layout/lna_raw_drc
    *drcLayoutPaths: lna_raw.calibre.db
    *drcLayoutPrimary: lna_raw
    *drcLayoutLibrary: hoangtn
    *drcLayoutView: layout
    *drcLayoutGetFromViewer: 1
    *drcResultsFile: lna_raw.drc.results
    *drcSummaryFile: lna_raw.drc.summary
    *drcDFMDefaultsResultsFile: lna_raw.dfmDefaults.db
    *cmnSlaveHosts: {use {}} {hostName {}} {cpuCount {}} {a32a64 {}} {rsh {}} {maxMem {}} {workingDir {}} {layerDir {}} {mgcLibPath {}} {launchName {}}
    *cmnLSFSlaveTbl: {use 1} {totalCpus 1} {minCpus 1} {architecture {{}}} {minMemory {{}}} {resourceOptions {{}}} {submitOptions {{}}}
    *cmnGridSlaveTbl: {use 1} {totalCpus 1} {minCpus 1} {architecture {{}}} {minMemory {{}}} {resourceOptions {{}}} {submitOptions {{}}}
    *cmnFDILayoutLibrary: hoangtn
    *cmnFDILayoutView: layout
    *cmnFDIDEFLayoutPath: lna_raw.def

    Thank you very much!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • HN20250717689
    HN20250717689 1 month ago in reply to HN20250717689

    [1] 90065
    [qmnguyen@cadclass3 ~/tsmc65nm]$ // Calibre v2020.4_34.17 Tue Dec 1 16:11:11 PST 2020
    // Calibre Utility Library v0-10_13-2017-1 Wed Jun 3 07:42:12 PDT 2020
    // Litho Libraries v2020.4_34.17 Tue Dec 1 16:11:11 PST 2020
    //
    // Copyright Siemens 1996-2020
    // All Rights Reserved.
    ...
    //
    // MemTotal: 495267868 kB
    // MemFree: 462286468 kB
    // MemAvailable: 483890660 kB
    ...
    WARNING: Please enable "throughput-performance" profile for best performance
    WARNING: Please increase max process limit (4096) to system limit (1933665)
    WARNING: Please increase descriptors limit for best performance (1024)
    //
    // Processor AMD EPYC 7513 32-Core Processor [2511] (4th generation)
    // CPU Info: Cores = 64, SMT enabled with 64 additional virtual processors
    // Max file descriptors: 1024
    // 64 bit virtual addressing enabled
    // Running aoi_cal_2020.4_34.17/pkgs/icv/pvt/calibre -drc -runset /home/qmnguyen/tsmc65nm/hoangtn/lna_raw/layout/lna_raw_drc_runset
    // Process ID: 90065
    //
    // Starting time: Sun Jul 20 22:34:04 2025
    //

    --- CALIBRE_* ENVIRONMENT VARIABLES:

    CALIBRE_ATOMIC_LVHEAP=0
    CALIBRE_CMD_LINE='/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv/pvt/calibre -drc -runset /home/qmnguyen/tsmc65nm/hoangtn/lna_raw/layout/lna_raw_drc_runset'
    CALIBRE_HOME=/CMC/tools/mentor/aoi_cal_2020.4_34.17
    CALIBRE_INITIAL_CMD_LINE='/CMC/tools/mentor/aoi_cal_2020.4_34.17/bin/calibre -drc -runset /home/qmnguyen/tsmc65nm/hoangtn/lna_raw/layout/lna_raw_drc_runset'
    CALIBRE_READDB_LD_LIBRARY_PATH=/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv/julia/0.6/lib/julia:/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv/julia/0.6/lib:/CMC/tools/mentor/aoi_cal_2020.4_34.17/shared/pkgs/icv/tools/calibre_client/lib/64:/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/calibre_base/lib64:/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv_lib/lib64:/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv_qt5_comp/plugins:/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv_oa/22.41p004/lib/linux_rhel68_gcc44x_64/opt:/CMC/tools/mentor/aoi_cal_2020.4_34.17/pkgs/icv_oa/22.41p004/lib/linux_rhel61_gcc44x_64/opt:/lib64:/usr/lib64:/lib:/usr/lib::/CMC/tools/cadence/MMSIM_07.20.109_lnx86/tools/lib:/CMC/tools/cadence/SPECTRE20.10.155_lnx86/tools.lnx86/lib
    CALIBRE_SKIP_OS_CHECKS=

    Usage: calibre [ -lvs { [ { -tl || -ts } <cnet_file_name> ]
    [ -nonames ]
    [ -dblayers "name1,..." ]
    [ -bpf [no-extents] ] [ -nl ] [ -cb ]
    } || { [ -hier [ { -automatch | -genhcells[=tvf_script] } ] ] } || { [ -flatten ] }
    [ -ixf ] [ -nxf ]
    ]
    [ [ -spice <spice_file_name> ] || [ -layout <spice_file_name> ] ]
    [ -hcell <cell_correspondence_file_name> ] [ -xcell <xcell_file_name> ]
    [ -siggen ]
    [ -nowait | -wait n | -lmretry <retry_args> ]
    [ -lmconfig <licensing_config_file_name> ]
    [ { { -turbo [ <number_of_processors> ] [ -turbo_all ] [ -lvs_supplement [ <number_of_processors> ] ] }
    } [ { -remote <host,host,...> || -remotefile <filename> || -remotecommand <filename> <count> } [ -remotedata [ { -recoveroff | -recoverremote } ] ] ] [ -hyper [ pathchk ] [ remote ] [ cmp ] ] ]
    [ -cmp_host <hostname> | -cmp_remotefile <filename> ]
    [ -waiver <waiver-setup-file-name> ]
    [ -E <svrf_output_from_tvf> ]
    [ -tvfarg <tvf_argument> ]
    [ -recon -si[=all|pg|io|db|tvf_script] ]
    <rule_file_name>

    calibre -recon -si[=all|pg|io|tvf_script]
    [ -turbo
    [ { [ <number_of_processors> ] || -turbo_all } ]
    [ { -remote <host,host,...> ||
    -remotefile <filename> ||
    -remotecommand <filename> <count> } ] ]
    {-svdb <svdb_dir>}

    ...

    calibre -version

    calibre { -lfd -hier [ { { -turbo [ <number_of_processors> ] [ -turbo_all ] }
    || { -turbo_litho [ <number_of_processors> ] }
    || { -turbo [ <number_of_processors> ] [ -turbo_all ] -turbo_litho [ <number_of_processors> ] }
    } [ -remote <host,host,...> || -remotefile <filename> || -remotecommand <filename> <count> ] [ -hyper ] ]
    <rule_file_name> [ -nowait | -wait n | -lmretry <retry_args> ] [ -lmconfig <licensing_config_file_name> ]
    }

    calibre -3dstack { [-turbo [ <number_of_processors> ] ] [-system <GDS | OASIS>] [-create_assembly <assembly-name] [-use_assembly <assembly-file-path>]
    || -cs [count] } [-run_dir <directory-name>] <rule_file_name>

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 1 month ago in reply to HN20250717689
    HN20250717689 said:

    Is that because I did something wrong? Do you have any suggestion on this?

    As I said earlier, Calibre is not a Cadence tool, so I can't really advise on how to use it (I don't have access to it). You should ask this question to Siemens EDA (maybe via their support, or via a forum on their web site).

    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