• 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. Hooks in to ADE-XL spec summary and datasheet creation

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 144
  • Views 13726
  • 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

Hooks in to ADE-XL spec summary and datasheet creation

danmc91
danmc91 over 9 years ago

Is there a way in skill to hook into the ADE-XL spec summary creation and also datasheet creation?

I'm looking for a way to export both of these to LaTeX instead of .csv for the spec summary and xml for the datasheet.

Barring a direct way, I can't even seem to find an API to let me generate the spec summary CSV file via skill.  Also I noticed that what I get in the CSV file is not the same as what I get on the screen. In particular, the model files on the screen are semi-helpful (but could be better):

CornerModels=high,low,typ


but the corner name I had used in the corner setup is not listed.  Also those sections are of course different for the different model files.  In the CSV file I have stuff like:

CornerModels=(file1.scs,<unspecified section>),(file2,<unspecified section>),(res.scs,high),(cap.scs,low).....

which is a pain because I will have to convert the big model lists to the corner name.

Yet another mystery is that I can't seem how to tell via skill if a model file is included in a corner.

   corners = axlGetCorners( sdb )
   foreach( corner  cadr( corners )
       printf( "Corner:  %L\n", corner )
       cid = axlGetCorner( sdb, corner )
       models = axlGetModels( cid )
       foreach( model cadr( models )
          mid = axlGetModel( cid, model )
          section = axlGetModelSection( mid )
          printf( "\t(%L,%L)\n",model, section )

          ;; HOW TO TELL IF A MODEL IS INCLUDED IN THIS CORNER? 

          ;; THE ATTACHED SKILL CODE LISTS EVEN DISABLED MODELS

      ) ;; foreach model

   ) ;; foreach corner

 

 

One thing which would be great is a way to define skill code for the formatting in the output files.  For example the .csv export of the spec summary.  If I could define skill code to control this, perhaps I could write out LaTeX directly instead of trying to convert the csv and xml files over.  Also I'd maybe have a chance at converting long model file strings into something useful (like corner names).

  • Cancel
  • fatcat1206
    fatcat1206 over 9 years ago

    Hi, Dan Mcmahill

    Below is a procedure I made to get the Corner Setup in the ADE-XL.

    I hope it would be helpful to you.

    The code in red, is used to check whether the model file is selected/enabled in the corner.

    ;*********************************************************************
    ; PROCEDURE NAME:  printTestCorInfo
    ;
    ; ABSTRACT :
    ;   print the enabled corner info of the corresponding test, except the norminal corner
    ;
    ; AGURMENTS :
    ;   myFileID                output file ID
    ;   testSession             session object of the corresponding test
    ;   sdbh                    adexl session database handle
    ;   enCor                   enabled corner for the corresponding test                   
    ;
    ; RETURN VALUE :
    ;   none
    ;
    ; UPDATES :
    ;   date:   July 27 2015    Prepared: Yi WANG
    ;*********************************************************************
    procedure(printTestCorInfo(myFileID testSession sdbh enCor test)
    let(
    (
        cornerHd    ;handle of the corner
        cVarList    ;list of variables used in corner
        cVarVal        ;value of the variable
        modelList    ;list of the used model
        enVarList    ;list of enabled variable
        tVarList    ;list of test variables
        gVarList    ;list of global variables
        gVarHd        ;handle of global variable
        tVarName    ;name of the test variable
        modelHd    ;handle of the model
        modelSecList    ;list of sections for the model
        modelSel    ;change to "t", if one model file has been selected
    )
        ;get the corner handle, base on the corner name
        cornerHd = axlGetCorner(sdbh enCor)
        ;get the model list which is used in the corner
        modelList = cadr(axlGetModels(cornerHd))
        ;get the variables which are used in the corner
        cVarList = cadr(axlGetVars(cornerHd))
        ;set the initial value of the list which contains the used variable.
        enVarList = nil
        ;set the initial value of the marker to be nil, which indicate there is no model has been used in the corner.
        modelSel = nil

        ;check whether one of the model file has been selected
        foreach(modelFile modelList
            modelHd = axlGetModel(cornerHd modelFile)
            modelSel = or(modelSel axlGetEnabled(modelHd))
        );foreach

        
        if(modelSel then ; if one of the model file has been used in the corner, then print then enalbed one
            foreach(modelFile modelList ;travel through the model file list
                modelHd = axlGetModel(cornerHd modelFile)        
                when(axlGetEnabled(modelHd)  ;when the model file is specified in the corner setup
                    modelSecList = parseString(axlGetModelSection(modelHd) "\"") ;get and parse the model section list.
                    fprintf(myFileID "\t Model path:   \t%L (C)\n" axlGetModelFile(modelHd)); print out the model file
                    fprintf(myFileID "\t Model sections:    \t")
                    foreach(modelSec modelSecList
                        fprintf(myFileID "%s " modelSec); print out the model file section.
                    );foreach
                    fprintf(myFileID "\n")
                );when
            );foreach
        else ; if none of the model file has been selected in the corner, print the setup in the ADEL.
            modelList = asiGetModelLibSelectionList( testSession ); get the model file used in the design
            foreach(modelFile modelList ;travel through the model list.
                modelSecList = cdr(modelFile)   ;get the model section list
                fprintf(myFileID "\t Model path:   \t%L (L)\n" car(modelFile)); print out the model file
                when(car(modelSecList)!= "" ; if there is model section has been defined.
                    fprintf(myFileID "\t Model sections are \t")
                    foreach(modelSec modelSecList
                        fprintf(myFileID "%s \n" modelSec); print out the model file
                    );foreach
                );when           
            );foreach
        );if


        ;print the variable defined in corners
        foreach(cVar cVarList   ;travel the corner variable list
            gVarHd = axlGetVar(cornerHd cVar)   ;get the handle of the variable by name
            cVarVal = axlGetVarValue(gVarHd)    ;get the value of the variable.
            when(cVar == "temperature" cVar="temp")     ;change "temperature" to "temp"
            fprintf(myFileID "\t %s:\t\t%s\t(C)\n" cVar cVarVal); print out the enabled test varirable
            enVarList =cons(cVar enVarList) ;add the variable to the "enVarList"
        );foreach
        ;print the extra variable defined in globale variables
        gVarList = cadr(axlGetVars(sdbh))   ;get the global variable list
        unless(axlGetAllVarsDisabled(sdbh)  ;if global variables are enabled.
            foreach(gVar gVarList   ;travel through the global list
                gVarHd = axlGetVar(sdbh gVar)   ;get the handle
                when(axlGetEnabled(gVarHd) && !member(gVar enVarList) && axlGetEnabledGlobalVarPerTest(sdbh gVar test);when the variable is enabled and enabled for the test, and has not been defined in the corner.
                    fprintf(myFileID "\t %s:\t\t%s\t(G)\n" gVar axlGetVarValue(gVarHd)); print out the enabled global variable
                    enVarList = cons(gVar enVarList)    ;add the variable into the "enVarList"
                );when
            );forearch
        );unless        
        ;print the extra extra variable defined in test    
        tVarList = asiGetDesignVarList(testSession) ;get the variable list defined in the design
        foreach(tVar tVarList ;travel through the design variable list.
            tVarName = car(tVar)    ; the design variable list always contain varialbe pairs (name value)
            unless(member(tVarName enVarList)    ;when the variable is not defined in the corner and global.
                fprintf(myFileID "\t %s:\t\t%s\t(L)\n" tVarName cadr(tVar)); print out the enabled test varirable
            );unless
        );foreach    

    );let
    );procedure printTestCorInfo

    Best Regards

    Yi

    • 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