• 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 access the auto calculation command or function of...

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 143
  • Views 4228
  • 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 access the auto calculation command or function of some devices' second-order parameters (e.g., SCA), better in command line form?

Alex Liao
Alex Liao over 8 years ago

Hey smart guys,

As you know, if you change the w, l and nf, and enable the WPE effects for lower-than-CMOS90nm technology MOSFET device, you can see the SCA/SCB/SCC are auto-calculated and reflected through the device property window. And if you change w and nf, the SCA dynamically updates. That means, when you change the w and nf, a black box function is called to do the calculation of such second-order parameters. If you only calculate couples of SCA based on few different w and nf, you can let the property window do it for you manually (i.e., GUI-based approach). If you have 1000 test cases, how can you do this? Is there a command line based approach that when you specify a change of w and nf in a netlist maybe, and you proceed to call a certain command or a function to do the calculation of SCA and then get the SCA value back annotated to the netlist to have the netlist consider the WPE effect?

Because the device property window have such dynamics, so behind the GUI, there must be a function called. Or I guess it kind of finds the corresponding SCA value through the foundry provided model. In this case, the Cadence must have a search or map function operated on the foundry model to be dynamic in terms of SCA calculation.

Any knowledge is appreciated.

Thanks,

Alex

  • Cancel
Parents
  • Alex Liao
    Alex Liao over 8 years ago

    Hello Andrew,

    Thanks for your knowledge. I have searched few application notes and understood the callbacks.

    One drawback of the CCSinvokeCdfCallbacks.il is that it seems it requires a UI-based operation. When executing the CCSinvokeCdfCallbacks("MyLib" ?callInitProc t ?useInstCDF t ?order list("l" "w")), it will proceed to detect an mouse click. Your CCSCdfCallback.il is decent to fix this problem. It enables to run in a batch mode, but takes a lot of time given a large size of cells and views.

    So is there a neat way that can specify which library’s which cell’s which view’s all instances’ CDF parameters that I am going to update through the callbacks? Just like those CCSReportInstProp.il and CCSchangeParam.il that enable specifying of cellview path. (e.g., CSchangeParam("testLib" "testCell" "schematic" "cap" "model" "CAP").

    Based on the idea from CSchangeParam.il, I did the following modification and named them accordingly (e.g., CCSinvokeCdfCallbacksMy.il and CCSinvokeCdfCallbacksMy.il)  and hope it could work.

    But when I call via: CCSCdfCallbackMyLib("MyLib" "MyCell" "schematic")

    it says:

    *Error* CCSinvokeCdfCallbacksMy: extra arguments or keyword missing - (("l" "w" "nf")).

    So I guess I did not do it completely due to my less knowledge on SKILL language.

    Could you update your code to another version and enable a user to specify such path details? Or if it is simple you can directly put it here. Thanks.

    B.T.W, is it easy to call those CIW-based command like load(“xxx.il”) and  xxx("MyLib" "MyCell" "schematic") in linux prompt or embedded in a system call, or C++ call? Because I need to update them iteratively and I cannot put them in the CIW window and execute 1000 times. Thanks.

    My Adaption of Codes:

    In my CCSCdfCallbackMyLib.il:

    procedure(CCSCdfCallbackMyLib(library cellname viewname)

    let((cv)

    unless(libName=ddGetObj(library) error("Library %s does not exists\n" library))

    ; cv = dbOpenCellViewByType(library cell~>name "schematic" "schematic" "a")

    cv = dbOpenCellViewByType(library cellname viewname "schematic" "a")

    /* Run CDF Callback.*/

    CCSinvokeCdfCallbacksMy(cv ?order list("l" "w" "nf"))

    ;Run schematic heck and Save

    schCheck(cv)

    dbSave(cv)

    ) ;let

    ) ; procedure

    In my CCSinvokeCdfCallbacksMy.il:

    (procedure (CCSinvokeCdfCallbacksMy cellname viewname @key (debug nil)

    (order nil)

    (callInitProc nil) (useInstCDF nil)

    (addFormFields nil))

     (let ((success t))

          (when debug

        (printf "Invoking callbacks for all instances in cell '%s'\n"

        (dbGetq viewname cellName)))

          (foreach instance (dbGetq cellname~>viewname instances)

    (unless

    (CCSinvokeInstCdfCallbacks instance

      ?debug debug

      ?order order

      ?callInitProc callInitProc

      ?useInstCDF useInstCDF

      ?addFormFields addFormFields

      )

    (setq success nil)

    )

    ) ; foreach

          success

          )

     ) ; procedure

    Kind Regards,

    Alex

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Alex Liao
    Alex Liao over 8 years ago

    Hello Andrew,

    Thanks for your knowledge. I have searched few application notes and understood the callbacks.

    One drawback of the CCSinvokeCdfCallbacks.il is that it seems it requires a UI-based operation. When executing the CCSinvokeCdfCallbacks("MyLib" ?callInitProc t ?useInstCDF t ?order list("l" "w")), it will proceed to detect an mouse click. Your CCSCdfCallback.il is decent to fix this problem. It enables to run in a batch mode, but takes a lot of time given a large size of cells and views.

    So is there a neat way that can specify which library’s which cell’s which view’s all instances’ CDF parameters that I am going to update through the callbacks? Just like those CCSReportInstProp.il and CCSchangeParam.il that enable specifying of cellview path. (e.g., CSchangeParam("testLib" "testCell" "schematic" "cap" "model" "CAP").

    Based on the idea from CSchangeParam.il, I did the following modification and named them accordingly (e.g., CCSinvokeCdfCallbacksMy.il and CCSinvokeCdfCallbacksMy.il)  and hope it could work.

    But when I call via: CCSCdfCallbackMyLib("MyLib" "MyCell" "schematic")

    it says:

    *Error* CCSinvokeCdfCallbacksMy: extra arguments or keyword missing - (("l" "w" "nf")).

    So I guess I did not do it completely due to my less knowledge on SKILL language.

    Could you update your code to another version and enable a user to specify such path details? Or if it is simple you can directly put it here. Thanks.

    B.T.W, is it easy to call those CIW-based command like load(“xxx.il”) and  xxx("MyLib" "MyCell" "schematic") in linux prompt or embedded in a system call, or C++ call? Because I need to update them iteratively and I cannot put them in the CIW window and execute 1000 times. Thanks.

    My Adaption of Codes:

    In my CCSCdfCallbackMyLib.il:

    procedure(CCSCdfCallbackMyLib(library cellname viewname)

    let((cv)

    unless(libName=ddGetObj(library) error("Library %s does not exists\n" library))

    ; cv = dbOpenCellViewByType(library cell~>name "schematic" "schematic" "a")

    cv = dbOpenCellViewByType(library cellname viewname "schematic" "a")

    /* Run CDF Callback.*/

    CCSinvokeCdfCallbacksMy(cv ?order list("l" "w" "nf"))

    ;Run schematic heck and Save

    schCheck(cv)

    dbSave(cv)

    ) ;let

    ) ; procedure

    In my CCSinvokeCdfCallbacksMy.il:

    (procedure (CCSinvokeCdfCallbacksMy cellname viewname @key (debug nil)

    (order nil)

    (callInitProc nil) (useInstCDF nil)

    (addFormFields nil))

     (let ((success t))

          (when debug

        (printf "Invoking callbacks for all instances in cell '%s'\n"

        (dbGetq viewname cellName)))

          (foreach instance (dbGetq cellname~>viewname instances)

    (unless

    (CCSinvokeInstCdfCallbacks instance

      ?debug debug

      ?order order

      ?callInitProc callInitProc

      ?useInstCDF useInstCDF

      ?addFormFields addFormFields

      )

    (setq success nil)

    )

    ) ; foreach

          success

          )

     ) ; procedure

    Kind Regards,

    Alex

    • 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