• 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. Creating a Form to create libraries, import GDS

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 144
  • Views 15879
  • 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

Creating a Form to create libraries, import GDS

imecabhi
imecabhi over 10 years ago

Hello,

I am trying to write a code to create a form in which I can create a few libraries using a technology (.tf) file and then streamIn the GDS into one for these libraries, but I am stuck at a point where the GDS has to be imported. I still have to add to this code which will instantiate the top cell of the imported GDS into a new Cell view of another library. and then streamout that cellview. Below is the code that I have written so far.

/***************************************************************
*                                                              *
*                       abCreateForm()                         *
*                                                              *
*                     Create the main form                     *
*                                                              *
***************************************************************/
procedure(abCreateForm()
    let((techFile browsetf tfView inpLibName inpGds browseInp sep1 maskLibName maskStrLibName sep2  
        destLibName destCellName destViewName sourceLibName sourceCellName sourceViewName sourceBrowse rotation)
    
    ; techfile browsing and viewing
    
    techFile=hiCreateStringField(
        ?name 'techFile
        ?prompt "Tech File"
       
        )
    
    browsetf=hiCreateButton(
        ?name 'browsetf
        ?buttonText "Browse"
        ?callback "abTechfileBrowseCB()"
        )
    
    tfView=hiCreateButton(
        ?name 'tfView
        ?buttonText "View"
        ?callback "abViewTech()"
        )
    
    ;Input Library and streaming Input GDS
    
    inpLibName=hiCreateStringField(
        ?name 'inpLibName
        ?prompt "Input GDS Library Name"
      
        )
    
    inpGds=hiCreateStringField(
        ?name 'inpGds
        ?prompt "Input GDS to stream"
      
        )
    
    browseInp=hiCreateButton(
        ?name 'browseInp
        ?buttonText "Browse"
        ?callback "abGDSFileBrowseCB()"
        )
    
    sep1=hiCreateSeparatorField(?name 'sep1)
    
    ;Mask Design Library and Mask Structures Library
    
    maskLibName=hiCreateStringField(
        ?name 'maskLibName
        ?prompt "Mask Library Name"
       
        )
    
    maskStrLibName=hiCreateStringField(
        ?name 'maskStrLibName
        ?prompt "Mask Structures Library Name"
        ?callback "abImportGDS()"
        )
    
    sep2=hiCreateSeparatorField(?name 'sep2)
    
    ;Cellview creation and browsing an instance from source library
    
    destLibName=hiCreateStringField(
        ?name 'destLibName
        ?prompt "Enter Library Name"
        ?callback "abCreateInst()"
        )
        
    destCellName=hiCreateStringField(
        ?name 'destCellName
        ?prompt "Enter Cell Name"
        ?callback "abCreateInst()"
        )
        
    destViewName=hiCreateStringField(
        ?name 'destViewName
        ?prompt "Enter View Name"
        ?callback "abCreateInst()"
        )
    
    sourceLibName=hiCreateStringField(
        ?name 'sourceLibName
        ?prompt "Source Library Name"
        ?callback "ddsUpdateSyncWithForm()"
        )
        
    sourceCellName=hiCreateStringField(
        ?name 'sourceCellName
        ?prompt "Source Cell Name"
        ?callback "ddsUpdateSyncWithForm()"
        )
        
    sourceViewName=hiCreateStringField(
        ?name 'sourceViewName
        ?prompt "Source View Name"
        ?callback "ddsUpdateSyncWithForm()"
        )
        
    sourceBrowse=hiCreateButton(
        ?name 'sourceBrowse
        ?buttonText "Browse"
        ?callback "abSyncBrowser()"
        )
        
    rotation=hiCreateRadioField(
        ?name    'rotation
        ?prompt    "Rotation"
        ?choices list("R0" "R90" "R180" "R270" "MY" "MYR90" "MX" "MXR90")
        ?value    "R0"
        ?callback list("abRotationButtonCB()")
        )
        
    hiCreateAppForm(
        ?name 'abInputForm
        ?formTitle "Input Information Form"
        ?fields
            list(
                list(techFile 0:0 450:30 200)
                list(browsetf 450:5 60:25)
                list(tfView 520:5 50:25)
                list(inpLibName 0:30 500:30 200)
                list(inpGds 0:60 500:30 200)
                list(browseInp 500:65 60:25)
                list(sep1 0:95 600:0)
                list(maskLibName 0:100 600:30 200)
                list(maskStrLibName 0:130 600:30 200)
                list(sep2 0:165 600:0)
                list(destLibName 0:170 600:30 200)
                list(destCellName 0:200 600:30 200)
                list(destViewName 0:230 600:30 200)
                list(sourceLibName 0:260 600:30 200)
                list(sourceCellName 0:290 600:30 200)
                list(sourceViewName 0:320 600:30 200)
                list(sourceBrowse 200:350 60:25)
                list(rotation 0:380 600:0 200)
                )
            )
        
        )
    )


/***************************************************************
*                                                              *
*                      abTechfileBrowseCB()                    *
*                                                              *
*                     Browsing the Tech File                   *
*                                                              *
***************************************************************/
procedure(abTechfileBrowseCB()
    ddsFileBrowseCB(
    abInputForm
    'techFile
    "*.tf"
    'browsetf
    )
    )
    
    
/***************************************************************
*                                                              *
*                         abViewTech()                         *
*                                                              *
*                     Viewing the Tech File                    *
*                                                              *
***************************************************************/
procedure(abViewTech()
    view(
    abInputForm->techFile->value
    )
    )
    

/***************************************************************
*                                                              *
*                      abGDSFileBrowseCB()                     *
*                                                              *
*                     Browsing the Input GDS                   *
*                                                              *
***************************************************************/
procedure(abGDSFileBrowseCB()
    ddsFileBrowseCB(
    abInputForm
    'inpGds
    "*.gds"
    'browseInp
    )
    )


/***************************************************************
*                                                              *
*                      abSyncBrowser()                         *
*                                                              *
*                 Synchronise with the browser                 *
*                                                              *
***************************************************************/
procedure(abSyncBrowser()
    ddsSyncWithForm(
    abInputForm
    'sourceBrowse
    'sourceLibName
    'sourceCellNamefileName
    'sourceViewName
    )
    )


/***************************************************************
*                                                              *
*                        abImportGDS()                         *
*                                                              *
*                  Import the GDS into Library                 *
*                                                              *
***************************************************************/
procedure(abImportGDS()
    let((libName libPath techName tfId tfId1 tfId2 GDSName maskLib maskStrLib template)
        libName = abInputForm->inpLibName->value
        libPath = "./"
        techName = abInputForm->techFile->value
        template = "./xstreamInp.temp"
        GDSName = abInputForm->inpGds->value
        maskLib = abInputForm->maskLibName->value
        maskStrLib = abInputForm->maskStrLibName->value
        ddCreateLib(libName libPath)
            tfId = techOpenTechFile(libName techGetDefaultTechName() "w")
            tcLoadTechFile(tfId techName)
            techSaveTechFile(tfId)
            techCloseTechFile(tfId)
            
            xstInSetField("templateFile" template)
            xstInSetField("techFile" techName)
            xstInSetField("library" libName)
            xstInSetField("strmFile" GDSName)
            xstInSetField("logFile" libName.log)
            xstInSetField("summaryFile" libName.sum)
            xstInDoTranslate()
            
            

procedure(xstInOnCompletion(libName)
    printf ("The GDS has been translated")

)


            
        ddCreateLib(maskLib libPath)
            tfId1 = techOpenTechFile(maskLib techGetDefaultTechName() "w")
            tcLoadTechFile(tfId1 techName)
            techSaveTechFile(tfId1)
            techCloseTechFile(tfId1)
            
            
        ddCreateLib(maskStrLib libPath)
            tfId2 = techOpenTechFile(maskStrLib techGetDefaultTechName() "w")
            tcLoadTechFile(tfId2 techName)
            techSaveTechFile(tfId2)
            techCloseTechFile(tfId2)
            
            
            
        )
)









/***************************************************************
*                                                              *
*                        abInput()                             *
*                                                              *
*                       Main entry point                       *
*                                                              *
***************************************************************/

procedure(abInput()
    unless(boundp('abInputForm)
    abCreateForm()
    )
    
    hiDisplayForm(abInputForm)
   
    )


When I load this code and run it in CIW, I get a following message:

INFO (TECH-180006): Compiling class 'controls'....

INFO (TECH-180006): Compiling class 'layerDefinitions'....

*Error* ilGetString: arg must be symbol or string - nil

What am I doing wrong here or what needs to be added/corrected? I am new to SKILL and write few codes after referring to the SKILL guide.

  • Cancel
  • theopaone
    theopaone over 10 years ago

    It may be something in the tcLoadTechFile evaluation. Put a print statement before and after the line to see if the function completes. You can also set your stacktrace to a number greater than 0 and the error will print out with more information.

    Try editing the function in the SKILL IDE, it will stop at the line giving you an error.

    The error may be in your technology file. Try loading the techfile manually to see if it is valid.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • imecabhi
    imecabhi over 10 years ago

    Hi theopaone,

    Thank you for the reply. The tcLoadTechFile evaluation is working fine. The problem was with the names of the logFile and summaryFile. I hardcoded both of them as below and it worked fine.

    procedure(abImportGDS()
        let((libName libPath techName tfId tfId1 tfId2 GDSName maskLib maskStrLib template ipcId logFile summaryFile)
            libName = abInputForm->inpLibName->value
            libPath = "./"
            techName = abInputForm->techFile->value
            template = "./xstreamInp.temp"
            GDSName = abInputForm->inpGds->value
            maskLib = abInputForm->maskLibName->value
            maskStrLib = abInputForm->maskStrLibName->value
           
            when( ddCreateLib(libName libPath)
                tfId = techOpenTechFile(libName techGetDefaultTechName() "w")
                ;;printf("Tech file is loading")
                tcLoadTechFile(tfId techName)
                ;;printf("TechFile is loaded")
                techSaveTechFile(tfId)
                techCloseTechFile(tfId)
                
                xstInSetField("templateFile" template)
                xstInSetField("techFile" techName)
                xstInSetField("library" libName)
                xstInSetField("strmFile" GDSName)
                xstInSetField("logFile" "libName.log")
                xstInSetField("summaryFile" "libName.sum")
                xstInDoTranslate()
                         
                procedure(xstInOnCompletion(libName)
                        printf ("The GDS has been translated")

                    )
                );when
       

    But I want to pass the library name to the logFile and summaryFile so that it gets saved as the libName.log and libName.sum. How can I do that?

    Thanks & Regards,

    Abhishek

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

    Hi Abhishek,

    Since you already have the library name in a variable, something like the following should work:

    
                xstInSetField("logFile" strcat(libName ".log"))
                xstInSetField("summaryFile" strcat(libName ".sum"))
    

    You probably should first check that the the field is not empty (using !blankstrp(libName), for example).

    Hope this helps!

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • imecabhi
    imecabhi over 10 years ago

    Thanks Lawrence! I did figure out after going through some documentation and made following changes. :)

    procedure(abImportGDS()
        let((libName libPath techName tfId tfId1 tfId2 GDSName maskLib maskStrLib template ipcId logFile summaryFile)
            libName = abInputForm->inpLibName->value
            libPath = "./"
            techName = abInputForm->techFile->value
            template = "./xstreamInp.temp"
            GDSName = abInputForm->inpGds->value
            maskLib = abInputForm->maskLibName->value
            maskStrLib = abInputForm->maskStrLibName->value
            logFile = strcat(libName ".log")
            summaryFile = strcat(libName ".sum")
            when( ddCreateLib(libName libPath)
                tfId = techOpenTechFile(libName techGetDefaultTechName() "w")
                tcLoadTechFile(tfId techName)
                techSaveTechFile(tfId)
                techCloseTechFile(tfId)
                
                xstInSetField("templateFile" template)
                xstInSetField("techFile" techName)
                xstInSetField("library" libName)
                xstInSetField("strmFile" GDSName)
                xstInSetField("logFile" logFile)
                xstInSetField("summaryFile" summaryFile)
                xstInDoTranslate()
              

    Thanks for your help. I will come back if I face more issues.

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

    By the way, I would advise you not to use the prefix "ab" for your code. The recommendation is for customer code to use an uppercase prefix (to avoid clashing with anything that Cadence produces). I tend to use "ab" for my code (the initials of my first and last name) for long and historical reasons, and so using "ab" as a prefix is likely to confuse people into thinking the code came from me - which in this case it didn't).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • imecabhi
    imecabhi over 9 years ago

    Dear Andrew,

    Thank you... I will keep that in mind.

    I still have one question. Callback is executed everytime I enter the maskStrLibName or destViewName. But nothing happens when I press "Apply" or "Ok" button in the form.

    Below is the code:

    /***************************************************************
    *                                                              *
    *                       avCreateForm()                         *
    *                                                              *
    *                     Create the main form                     *
    *                                                              *
    ***************************************************************/
    procedure(avCreateForm()
        let((techFile browsetf tfView inpLibName inpGds browseInp sep1 maskLibName maskStrLibName sep2 
         destLibName destCellName destViewName sourceLibName sourceCellName sourceViewName sourceBrowse rotation)
     
     ; techfile browsing and viewing
     
     techFile=hiCreateStringField(
      ?name 'techFile
      ?prompt "Tech File"
      ;;?callback "avImportGDS()"
      )
     
     browsetf=hiCreateButton(
      ?name 'browsetf
      ?buttonText "Browse"
      ?callback "avTechfileBrowseCB()"
      )
     
     tfView=hiCreateButton(
      ?name 'tfView
      ?buttonText "View"
      ?callback "avViewTech()"
      )
     
     ;Input Library and streaming Input GDS
     
     inpLibName=hiCreateStringField(
      ?name 'inpLibName
      ?prompt "Input GDS Library Name"
      ;;?callback "avImportGDS()"
      )
     
     inpGds=hiCreateStringField(
      ?name 'inpGds
      ?prompt "Input GDS to stream"
      ;;?callback "avImportGDS()"
      )
     
     browseInp=hiCreateButton(
      ?name 'browseInp
      ?buttonText "Browse"
      ?callback "avGDSFileBrowseCB()"
      )
     
     sep1=hiCreateSeparatorField(?name 'sep1)
     
     ;Mask Design Library and Mask Structures Library
     
     maskLibName=hiCreateStringField(
      ?name 'maskLibName
      ?prompt "Mask Library Name"
      ;;?callback "avImportGDS()"
      )
     
     maskStrLibName=hiCreateStringField(
      ?name 'maskStrLibName
      ?prompt "Mask Structures Library Name"
      ?callback "avImportGDS()"
      )
     
     sep2=hiCreateSeparatorField(?name 'sep2)
     
     ;Cellview creation and browsing an instance from source library
     
     destLibName=hiCreateStringField(
      ?name 'destLibName
      ?prompt "Enter Library Name"
      ;;?callback "avCreateInst()"
      )
      
     destCellName=hiCreateStringField(
      ?name 'destCellName
      ?prompt "Enter Cell Name"
      ;;?callback "avCreateInst()"
      )
      
     destViewName=hiCreateStringField(
      ?name 'destViewName
      ?prompt "Enter View Name"
      ?callback "avCreateInst()"
      )
     
     sourceLibName=hiCreateStringField(
      ?name 'sourceLibName
      ?prompt "Source Library Name"
      ?callback "ddsUpdateSyncWithForm()"
      )
      
     sourceCellName=hiCreateStringField(
      ?name 'sourceCellName
      ?prompt "Source Cell Name"
      ?callback "ddsUpdateSyncWithForm()"
      )
      
     sourceViewName=hiCreateStringField(
      ?name 'sourceViewName
      ?prompt "Source View Name"
      ?callback "ddsUpdateSyncWithForm()"
      )
      
     sourceBrowse=hiCreateButton(
      ?name 'sourceBrowse
      ?buttonText "Browse"
      ?callback "avSyncBrowser()"
      )
      
     rotation=hiCreateRadioField(
      ?name 'rotation
      ?prompt "Rotation"
      ?choices list("R0" "R90" "R180" "R270" "MY" "MYR90" "MX" "MXR90")
      ?value "R0"
      ;;?callback list("avRotationButtonCB()")
      )
      
     hiCreateAppForm(
      ?name 'avInputForm
      ?formTitle "Input Information Form"
      ?fields
       list(
        list(techFile 0:0 450:30 200)
        list(browsetf 450:5 60:25)
        list(tfView 520:5 50:25)
        list(inpLibName 0:30 500:30 200)
        list(inpGds 0:60 500:30 200)
        list(browseInp 500:65 60:25)
        list(sep1 0:95 600:0)
        list(maskLibName 0:100 600:30 200)
        list(maskStrLibName 0:130 600:30 200)
        list(sep2 0:165 600:0)
        list(destLibName 0:170 600:30 200)
        list(destCellName 0:200 600:30 200)
        list(destViewName 0:230 600:30 200)
        list(sourceLibName 0:260 600:30 200)
        list(sourceCellName 0:290 600:30 200)
        list(sourceViewName 0:320 600:30 200)
        list(sourceBrowse 200:350 60:25)
        list(rotation 0:380 600:0 200)
        )
       )
      
      );let
     );procedure


    /***************************************************************
    *                                                              *
    *                      avTechfileBrowseCB()                    *
    *                                                              *
    *                     Browsing the Tech File                   *
    *                                                              *
    ***************************************************************/
    procedure(avTechfileBrowseCB()
        ddsFileBrowseCB(
     avInputForm
     'techFile
     "*.tf"
     'browsetf
     )
        );procedure
       
       
    /***************************************************************
    *                                                              *
    *                         avViewTech()                         *
    *                                                              *
    *                     Viewing the Tech File                    *
    *                                                              *
    ***************************************************************/
    procedure(avViewTech()
        view(
     avInputForm->techFile->value
     )
        );procedure
       

    /***************************************************************
    *                                                              *
    *                      avGDSFileBrowseCB()                     *
    *                                                              *
    *                     Browsing the Input GDS                   *
    *                                                              *
    ***************************************************************/
    procedure(avGDSFileBrowseCB()
        ddsFileBrowseCB(
     avInputForm
     'inpGds
     "*.gds"
     'browseInp
     )
        );procedure


    /***************************************************************
    *                                                              *
    *                      avSyncBrowser()                         *
    *                                                              *
    *                 Synchronise with the browser                 *
    *                                                              *
    ***************************************************************/
    procedure(avSyncBrowser()
        ddsSyncWithForm(
     avInputForm
     'sourceBrowse
     'sourceLibName
     'sourceCellName
     'sourceViewName
     )
        );procedure


    /***************************************************************
    *                                                              *
    *                        avImportGDS()                         *
    *                                                              *
    *                  Import the GDS into Library                 *
    *                                                              *
    ***************************************************************/
    procedure(avImportGDS()
     let((libName libPath techName tfId tfId1 tfId2 GDSName maskLib maskStrLib template ipcId logFile summaryFile)
      ;avInputForm->inCallback = t
      libName = avInputForm->inpLibName->value
      libPath = "./"
      techName = avInputForm->techFile->value
      template = "./xstreamInp.temp"
      GDSName = avInputForm->inpGds->value
      maskLib = avInputForm->maskLibName->value
      maskStrLib = avInputForm->maskStrLibName->value
      logFile = strcat(libName ".log")
      summaryFile = strcat(libName ".sum")
      when( ddCreateLib(libName libPath)
       tfId = techOpenTechFile(libName techGetDefaultTechName() "w")
       tcLoadTechFile(tfId techName)
       techSaveTechFile(tfId)
       techCloseTechFile(tfId)
       
       xstInSetField("templateFile" template)
       xstInSetField("techFile" techName)
       xstInSetField("library" libName)
       xstInSetField("strmFile" GDSName)
       xstInSetField("logFile" logFile)
       xstInSetField("summaryFile" summaryFile)
       xstInDoTranslate()
       ;;ipcId = ipcBeginProcess(xstInDoTranslate())
       ;;ipcWait(ipcId)
       
       
       procedure(xstInOnCompletion(libName)
            printf ("The GDS has been translated")

        )
       );when
      when( ddCreateLib(maskLib libPath)
       tfId1 = techOpenTechFile(maskLib techGetDefaultTechName() "w")
       tcLoadTechFile(tfId1 techName)
       techSaveTechFile(tfId1)
       techCloseTechFile(tfId1)
       
       );when
       
      when( ddCreateLib(maskStrLib libPath)
       tfId2 = techOpenTechFile(maskStrLib techGetDefaultTechName() "w")
       tcLoadTechFile(tfId2 techName)
       techSaveTechFile(tfId2)
       techCloseTechFile(tfId2)
       
       );when
      ;avInputForm->inCallback = nil 
      ;t 
      );let
    );procedure


    /***************************************************************
    *                                                              *
    *                        avCreateInst()                        *
    *                                                              *
    *                  Create Instance and Export GDS              *
    *                                                              *
    ***************************************************************/
    procedure(avCreateInst()
     let((sourceLib sourceCell sourceView destLib destCell destView rotate cv cv1 template techName)
      ;avInputForm->inCallback = t
      sourceLib = avInputForm->sourceLibName->value
      sourceCell = avInputForm->sourceCellName->value
      sourceView = avInputForm->sourceViewName->value
      destLib = avInputForm->destLibName->value
      destCell = avInputForm->destCellName->value
      destView = avInputForm->destViewName->value
      rotate = avInputForm->rotation->value
      template = "./xstreamOut.temp"
      techName = avInputForm->techFile->value
      
      cv = dbOpenCellViewByType(destLib destCell destView "maskLayout" "w")
      cv1 = dbOpenCellViewByType(sourceLib sourceCell sourceView)
      dbCreateInst( cv cv1 "I0" 0:0 rotate)
      dbClose(cv1)
      dbSave(cv)
      
      xstSetField("templateFile" template)
      xstSetField("techFile" techName)
      xstSetField("library" destLib)
      xstSetField("topCell" destCell)
      xstSetField("viewName" destView)
      xstSetField("strmFile" strcat("../cd_ws/" destCell ".gds"))
      xstSetField("logFile" strcat("../cd_ws/" destCell ".log"))
      xstSetField("summaryFile" strcat("../cd_ws/" destCell ".sum"))
      xstOutDoTranslate()
      dbClose(cv)
      ;avInputForm->inCallback = nil
      ;t
      );let
     );procedure


    /***************************************************************
    *                                                              *
    *                        avInput()                             *
    *                                                              *
    *                       Main entry point                       *
    *                                                              *
    ***************************************************************/

    procedure(avInput()
        unless(boundp('avInputForm)
     avCreateForm()
     )
     
        hiDisplayForm(avInputForm)
        t
      
        );procedure

    Best Regards,

    Abhishek

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

    Abhishek,

    Abhishek Verma said:
    I still have one question. Callback is executed everytime I enter the maskStrLibName or destViewName. But nothing happens when I press "Apply" or "Ok" button in the form.

    Now you're using "av" which is the prefix used for Assura! As I said, you should use an uppercase prefix (so "AV" or "Av" would be fine).

    The reason why you have no action on OK or Apply is that you have not specified ?callback in the hiCreateAppForm call - this defines the form callback. Instead, you have added field callbacks on some of the fields which is executing the avImportGDS function, which I rather doubt is the behaviour you want. Field callbacks get triggered each time you move the focus out of the field - and are usually used to either validate the field, or set the value of one field dependent upon another - they're not normally used to trigger the functionality which would normally fire on OK or Apply...

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • imecabhi
    imecabhi over 9 years ago

    Dear Andrew,

    I have corrected the prefix to uppercase now.

    Also the callback is corrected in the hiCreateAppForm call. Thank you for the help.

    Best Regards,

    Abhishek

    • 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