• 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. Deleting Schematic instance and instantiating another device...

Stats

  • Locked Locked
  • Replies 19
  • Subscribers 143
  • Views 25446
  • 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

Deleting Schematic instance and instantiating another device on the same origin

archive
archive over 13 years ago

Dear All,

I am looking to do the following thing using SKILL

1. Open a schematic and look for a specific instance.

2. Delete the instance.

3. Instantiate another cell at the same origin (Both the symbols match in pin locations.)

 

I am not able to identify, how I can get the origin of the original instance before deleting it. Any kind of help is much appreciated.

 

Please help!

 

Thanks,

Vijay

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    Vijay,

    You'll want instId~>xy to get the location of the existing instance. You will also want instId~>orient to get the orientation of the instance too (so the new instance has the same rotation).

    To find the existing instance, if you know the name, you can use dbFindAnyInstByName, and it would be dbDeleteObject to delete it.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 13 years ago

    Hi Andrew,

     

    Thank you for your quick and accurate response. I have to find specific devices and copy over some of the existing parameters to the new instantiations. 

    I am planning to use dbOpenCellViewByType and use dbCreateInst to create the instance. And then update the specific parameters with the parameters I had saved previously.

    One quick question I have is, will the call-backs be triggered if I do the step mentioned above? Or should I open it graphically to trigger the call-backs?

     Regards,

    Vijay

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • skillUser
    skillUser over 13 years ago

    Hi Vijay,

    If you instantiate devices using SKILL, or update instance parameters using SKILL then callbacks are not triggered, they are only triggered when using the Edit Object Properties form or Add Instance form and interacting with the CDF properties there, so you will most likely need the solution to trigger the CDF callbacks procedurally with SKILL.

    Hope this helps,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 13 years ago

    Hi Lawrence,

     

    Thank you for the quick help! I will explore the direction you have pointed to.

     

    Thanks,

    Vijay

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 13 years ago

    Hi Lawrence,

     

    I tried using the callback function, but it was too slow. Since I know what parameters to change I thought I will write a custom script, but I am getting stuck with some errors in saving the file. Would you please help to resolve that issue?

     

       if(cv=geOpen(?lib libName ?cell cell~>name ?view view~>name ?mode "a") then
           wId =hiGetCurrentWindow()
           thisCell=geGetWindowCellView()
           foreach(inst thisCell~>instances
               ;---Process relevant instances
            ;
            if(member(inst~>cellName InstList) then         
           ;---Change param
           ;
           printf("\nTrigger %s" inst~>cellName)
           geSelectFig(inst)
                 schHiObjectProperty()
                 sprintf(str "ParamOrg = schObjPropForm->%s->value" SelParam)
           j=evalstring(str)
                 ;
           sprintf(str "schObjPropForm->%s->value = TempVal" SelParam)
           j=evalstring(str)            
           hiFormDone(schObjPropForm)
           ;
           schHiObjectProperty()
                 sprintf(str "schObjPropForm->%s->value = ParamOrg" SelParam)
           j=evalstring(str)                
           hiFormDone(schObjPropForm)
          );if member
         );foreach inst
         schCheck( thisCell )
               geSave( thisCell )
         hiCloseWindow(wId)
       );if cv

     

    Thanks,

    Vijay

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

     Vijay,

    Try using the code that Lawrence pointed you to (this was written by me, BTW), and use the ?order argument to specify the parameters you are changing. With many PDKs specifying just a single parameter is sufficient because all the callbacks are essentially the same.

    So you could do:

    CCSinvokeInstCdfCallbacks(instId ?order list("w"))

    to just invoke the "w" callback on the instance. The default behaviour is to call it for every parameter - sometimes this can be rather expensive if the callbacks are long, and if the callbacks are really common to all parameters, you're just repeating the same computation over and over again.

    Trying to interact with a form as you are doing in your code will be much harder, because something maybe blocking (I really wouldn't go down that route as it can get messy quickly).

    Regards,

    Andrew.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 13 years ago

    Hi Andrew,

     

    Works like a magic! Thanks a lot for your valuable suggestions and help!

     

     

    Thanks,

    Vijay

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Reinice
    Reinice over 13 years ago

    Hi All,

    We used skill to change the schematic instances from one process(old) to another one process(new).

    We want to keep the origin and orientation of the old process and put it on the new process.

    We're having a hard time doing this.Can someone help us.

    Thanks,

    Reinice

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 13 years ago
    Hi Reinice, You can get the origin by using "instId~>xy" and the orientation by "instId~>orient". Then on the new instantiation you can use these values to retain the origin and orientation stored from the above statements. For more information see the previous posts by Andrew, Lawrence and myself in this thread. Vijay
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Reinice
    Reinice over 13 years ago

    Hi Vijay,

    Thanks for your reply

    I've tried the previous posts. It's working. I think I have to rephrase my question.

    For example the old process has it's origin in the S(Source of nch_33) terminal but the new process has it's origin in the BULK(Bulk of nch_hvt)

    How can I keep the position of the old process to the new process?

    Thanks,

    Reinice

    • 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