• 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. Trigger for refreshing technology information

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 143
  • Views 13619
  • 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

Trigger for refreshing technology information

Adrian Nistor
Adrian Nistor over 9 years ago

Hi,

We are using incremental techfiles, for some technical reasons we can not use leSetLSW to set the order of the layers, so we have the problem that the layer order is not anymore the needed one.

That's why we made a function to fix the layer order and we run that function on virtuoso startup.

The new problem is that if the user is doing a "Close Data" including the techfile, or if he's doing from Library Manager, View - Refresh and he checks also: "Refresh all in memory technology files" , then the order of the layers is again lost, and we need to re-run the sorting function.

So the question:

Is it possible to register a trigger for Refreshing the technology information, or at least for the menu entries: "Close Data" and LibMgr-View-Refresh ?

Thank you,

BR

Adrian

  • Cancel
Parents
  • dmay
    dmay over 9 years ago

    We have done this very thing with a bit of a Skill hack.

    First, we replaced the Close Data menu item with our own command. Our command simply manipulates the Cadence form to call our custom callback. Our custom callback calls the original callback, but then reloads techfile settings that we need.

    procedure(myddCloseData()
     let((port)
      port = outfile("/tmp/ddsCloseData.il")
      fprintf(port "ddsHiCloseData()\n")
      fprintf(port "ddsCloseDataForm->_doneAction = \"my_ddCloseDataCB()\"")
      close(port)
      load("/tmp/ddsCloseData.il")
      sh("rm -f /tmp/ddsCloseData.il")
    )); proc

    The above hack works and was written a long time ago. When that code is loaded, it successfully modifies the _doneAction on the form after the form is invoked. If you did this in Skill, the command to change the _doneAction wouldn't happen until after the form was dismissed. However, you can use hiRegTimer to do the same thing. I think the following two lines of Skill will accomplish the same thing (untested).

    hiRegTimer("ddsCloseDataForm->_doneAction = \"my_ddCloseDataCB()\"" 1)
    ddsHiCloseData()

    Finally, your callback:

    procedure(my_ddCloseDataCB()
     let((libList libInitFile libName selItems)
      ;pre-process the form
      selItems = ddsCloseDataForm->CDCV->value
      foreach(i selItems
        libList = MSutUniqueList(cons(car(nth(i ddsCloseDataForm->CDCV->choices)) libList))
      )

      ;Call the original callback  
      ddsCloseDataFormCB()

      ;Add your post processing next
      ;Maybe you need to see if your techfile is in the libList
    )); proc

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • dmay
    dmay over 9 years ago

    We have done this very thing with a bit of a Skill hack.

    First, we replaced the Close Data menu item with our own command. Our command simply manipulates the Cadence form to call our custom callback. Our custom callback calls the original callback, but then reloads techfile settings that we need.

    procedure(myddCloseData()
     let((port)
      port = outfile("/tmp/ddsCloseData.il")
      fprintf(port "ddsHiCloseData()\n")
      fprintf(port "ddsCloseDataForm->_doneAction = \"my_ddCloseDataCB()\"")
      close(port)
      load("/tmp/ddsCloseData.il")
      sh("rm -f /tmp/ddsCloseData.il")
    )); proc

    The above hack works and was written a long time ago. When that code is loaded, it successfully modifies the _doneAction on the form after the form is invoked. If you did this in Skill, the command to change the _doneAction wouldn't happen until after the form was dismissed. However, you can use hiRegTimer to do the same thing. I think the following two lines of Skill will accomplish the same thing (untested).

    hiRegTimer("ddsCloseDataForm->_doneAction = \"my_ddCloseDataCB()\"" 1)
    ddsHiCloseData()

    Finally, your callback:

    procedure(my_ddCloseDataCB()
     let((libList libInitFile libName selItems)
      ;pre-process the form
      selItems = ddsCloseDataForm->CDCV->value
      foreach(i selItems
        libList = MSutUniqueList(cons(car(nth(i ddsCloseDataForm->CDCV->choices)) libList))
      )

      ;Call the original callback  
      ddsCloseDataFormCB()

      ;Add your post processing next
      ;Maybe you need to see if your techfile is in the libList
    )); proc

    Derek

    • 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