• 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. Multipart path

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 125
  • Views 18015
  • 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

Multipart path

frogconsultant
frogconsultant over 15 years ago

 Does someone know of the best way to load automatically the custom multipart path? Please can I have an example as well the procedure? I think we could do either through skill loading but the PDK I am using is uncripted so I am not sure I could add a line to be loaded automatically or through bindKey.

 Thanks in advance for your help.

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    Bonjour!

    The simplest way would be to Create the multipart path interactively, and then on the Create Multipart Path form, use the "Save Template" and choose to save to an ASCII file.

    You should then be able to use this in your .cdsinit:

    load("~/gpdk090.mpp.templates.il")

    or whatever the file got called.

    There's no need to modify the PDK to do this - it will load an initialize the PDK, and then extend it to add your additional MPPs saved in this file.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • frogconsultant
    frogconsultant over 15 years ago

     Thanks.

    As I will need to use this automatic load in a debug proceed while I am building the multipart path, is it possible to reload by perhaps bindkey after I am already under VLE?

    Cheers

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    OK, if you are changing the file by hand, then:

    hiSetBindKey("Layout" "<Key>F7" "load(\"~/gpdk090.mpp.templates.il\")")

    (change the key to whatever you want, and the file path to what you want. If you're editing the MPP definition through the Create MPP form, then there's no need to do this of course.

    Or you could use this function - load it and then call abLoadCodeGUI("/path/to/where/your/il/files/live")

    The code may look strangely familiar ;-)

    /* abLoadCodeGUI.il

    Author A.D.Beckett
    Group Custom IC (UK), Cadence Design Systems Ltd.
    Language SKILL
    Date Nov 23, 2006
    Modified
    By

    Main entry function is abLoadCodeGUI("pathname")

    Gives a form to make it easy to load SKILL code under
    development

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

    SCCS Info: @(#) abLoadCodeGUI.il 11/23/06.12:02:58 1.1

    */


    /***************************************************************
    * *
    * abLoadCodeGUICreateForm () *
    * *
    * Create the form the for code loading interface *
    * *
    ***************************************************************/


    (defun abLoadCodeGUICreateForm ()
    (let (files)
    (setq files
    (hiCreateListBoxField
    ?name 'files
    ?choices nil
    ?multipleSelect t
    ?doubleClickCB "abLoadCodeFilesCB(hiGetCurrentForm())"
    ))
    (hiCreateAppForm
    ?name 'abLoadCodeGUIForm
    ?formTitle "Load Code"
    ?fields (list (list files 0:0 500:400))
    ?attachmentList (list
    hicLeftPositionSet|hicTopPositionSet|
    hicRightPositionSet|hicBottomPositionSet
    )
    ?initialSize 500:400
    ?buttonLayout '(OKCancel
    (Load abLoadCodeFilesCB)
    (Refresh abRefreshCodePathCB)
    )
    ?callback 'abLoadCodeFilesCB
    )
    )
    )

    /***************************************************************
    * *
    * abRefreshCodePathCB (form) *
    * *
    * Callback for the refresh button *
    * *
    ***************************************************************/


    (defun abRefreshCodePathCB (form)
    (let (files currentValue)
    (setq currentValue (getq (getq form files) value))
    (setq files
    (sort (rexMatchList "\\.il[s]*$"
    (getDirFiles (getq form codePath)))
    'alphalessp))
    (putpropq (getq form files) files choices)
    (setq currentValue
    (setof value currentValue
    (member value files)))
    (putpropq (getq form files) currentValue value)
    )
    )

    /***************************************************************
    * *
    * abLoadCodeFilesCB (form) *
    * *
    * Callback for the Load or OK buttons - also double click *
    * *
    ***************************************************************/


    (defun abLoadCodeFilesCB (form)
    (let (codePath fullPath)
    (setq codePath (getq form codePath))
    (foreach file (getq (getq form files) value)
    (setq fullPath (strcat codePath "/" file))
    (printf "loading code for %s\n" fullPath)
    (loadi fullPath)
    )
    )
    )

    /***************************************************************
    * *
    * abLoadCodeGUI (path) *
    * *
    * Main Entry point *
    * *
    ***************************************************************/


    (defun abLoadCodeGUI (path)
    (unless (boundp 'abLoadCodeGUIForm)
    (abLoadCodeGUICreateForm))
    (putpropq abLoadCodeGUIForm path codePath)
    (abRefreshCodePathCB abLoadCodeGUIForm)
    (hiDisplayForm abLoadCodeGUIForm)
    )

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • frogconsultant
    frogconsultant over 15 years ago

     I think I will go with the first approach for the time being. I am not so used to defun ...

    Subject closed

    Thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • frogconsultant
    frogconsultant over 15 years ago

    btw is there a translator from defun function to procedure function?

    Regards 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    Note that you don't need to change the code I appended - it's a general purpose SKILL file loading utility (not very fancy, but it does the job).

    To convert from defun to procedure, and to output in C-like syntax, you can use pp()

    newFile=outfile("newCode.il")
    pp(abLoadCodeGUI newFile)
    pp(abLoadCodeGUICreateForm newFile)
    ; etc
    close(newFile)

    You lose all the comments by doing this, and the formatting is not that pretty, but it looks more C-like than LISP-like.

    Regards,

    Andrew.

    • 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