Quantcast
Channel: Cadence Custom IC Skill Forum
Viewing all 5067 articles
Browse latest View live

skill command available to return if an expression has no fails (all pass)?

$
0
0

Is there a skill command to return if a certain expression in adexl has no fails/all pass in the current runset?

I have a couple of expressions with limits, say expr1  < ulim1, expr2 < ulim, expr3 < ulim3 and I want to create another expression called masterchk which returns 0 if all above three expressions have no fails and return 1 otherwise. What I try to avoid is to need to inline the limit values into the expression:

masterchk = if( expr1 < ulim1 && expr2 < ulim2  && expr3 < ulim3 then 0 else 1)

because then I need to type in the limit values of every individual expression (there can be many more than three expressions in practice) and this expression needs to be updated as well every time there is a limit/spec change.

If the function that I am looking for is called isPass then masterchk would look like this:

masterchk = if( isPass(expr1) && isPass(expr2) && isPass(expr3) then 0 else 1)

I could not directly find such command in the manual or CCS so was hoping to get more information here.


How to exchange layers safely?

$
0
0

Hello,

I want to exchange layers in layout, for example, swap "M1" and "M2" , here is my code:

layer1Obj = car(exists(lpp pcCellView~>lpps lpp~>layerName == "M1"))

layer2Obj = car(exists(lpp pcCellView~>lpps lpp~>layerName == "M2"))

layer1Obj~>shapes~>layerName = "M2"

layer2Obj~>shapes~>layerName = "M1"

But this does not work, both layers change to M1 actually. Providing the layout contains lots of shapes, Is there a more efficient and safe way to change layers? 



Force db update/refresh regarding connectivity and pcell parameters

$
0
0

Problem statement:

1. In layout XL create a (metal) rectangle and add a net name to it.

2. In skill add a (same layer) rectangle that abuts or overlaps this rectangle

3. Query the associated nets with this new rectangle in skill

   Result: its net name does not get updated

   Expected result : the net name associated with 1.



Note:

If instead of 2. you manually create a rectangle from the layout editor, then the query in 3., works as intended.

If I put a breakpoint between 2 and 3 then 3. works

If I add a dbSave between 2 and 3 then 3. works



I would like to avoid using dbSave, since this is too heavy handed and slows down my script.  I would like the connectivity information to be updated at the end of 2.  Please let me know if there is a way of updating this information.



Note:

In the title I also mention pcell parameters, this also happens with pcells, I know that in some cases you have to call the callback function associated with a parameter in the pcell, and I have, but a similar situation happens.  For example in a transistor pcell, when I change the number of fingers, and then query for the geometry of the poly, I don't get an updated number, and as in the connectivity example above, if I insert a breakpoint or perform a dbSave then the information gets updated.  Clearly something must be called within dbSave or when restarting from a breakpoint to update the connectivity / cell parameters.



Sorry if this is not clear, please let me know if you need further details.

plotting gm/id vs (id/(w/l))

$
0
0

Hello, 
I want to plot gm/id vs (id/(w/l)) for a simple CS amplifier.

I can plot the gm/id vs Vgs , but I don’t know how to do that for id/(w/l). 

Could anyone please how to plot gm/id vs (id/(w/l)) 

Thank you.

create custom via and save it

$
0
0

Hi,

I was going through the create via form and saw that there is an option to save custom via.
But I can make the change and save it to the library, but then each time I restart icfb, the change is lost and it reverts to the previous.
How do i save it for usage even after restarting the icfb ?

Regards,
Priyankar

How to copy reuse ROD Objects in a cellview?

$
0
0

Hello,

I'm new in ROD object design. I want to reuse the ROD objects from an old cellview (let me call it "oldcv") and move some of them by script.

But when I create an instance of oldcv and flatten the instance, the ROD properties of the objects were gone.

I use database ID of the rod object and "dbMoveShape" to move it.

(Actually in oldcv there is no ROD object, I change some of them to ROD objects in GUI so that I can access them by the name.)

Am I wong to do this? Then what should I do?

Another question is, can I set the alignment of ROD objects in GUI?

Is thera a bug in "exists"?

Creating pins from labels

$
0
0

Before jumping in to writing such a script.

We have two libraries (and later possibly more) of hundred of cells that are missing pins connectivity (have only labels). We would like to run "Create Pins From Labels" on all cells.

Is there a code floating around to do it or maybe a skill interface to the "Create Pins From Labels" tool?

Thanks,

Ronen


Stream out specific area of layout

$
0
0

Hi,

I'm wondering is it possible to stream out just a specific area of a layout using skill (ie giving input coordinates)? I am working with a considerably large layout, and stream out time is taking a considerable length of time.

Thanks,

Brian.

Finding of polygons SKILL.

$
0
0

Hello.

I've got a layout with containce polygons of certan layer, i need to find the coordinats of that polygons (center) and put them in to file.

Here is the cod, but the outpu file is empty.

myPort = outfile( "~/Desktop/pllist" )
foreach(polygon geGetEditCellView()~>polygons
if(polygon~>fig~>lpp=="metal1" then
fprintf(myPort "\t%L\n" centerBox(polygon~>shapes~>bBox(points)))
)
)
close( myPort)
sh( "gedit ~/Desktop/pllist &" )

Can you help me ?

Regards,

Sergey.

Add an item ADE-XL results tab (when right clicking on a test result)

$
0
0

Hello,

I have this scenario: in ADE-XL, after I load an old result to active, if I select the results tab and right click on a result, I have a nice menu with many options.

I would like to add an item to this menu. From what I read on this forum, I added this code to menus/spectre.menus


(sevAddMenuItemLists                                                                                          
    (lambda (session name)
        (case name
              ("&Results" list( (list "TestItem" ?disable nil ?form t ?callback "(testfunc session)") ) )
        );case
    ) ; lambda
) ; sevAddMenuItemLists
(procedure (testfunc s) (println (sprintf nil "Simdir is %s" s->axlCurrentDataDir)) )

but, when I right click, I get this message in CIW:

ERROR (ADEXL-2822): Invalid menu list structure "(false false)" provided.
Menu items must be specified as a list of ("menu name" "callback" {"true", "false"}), where the last argument specifies whether the item is disabled.
For submenus, replace the callback string with a sublist of menu items.

and nothing gets printed

What is the correct way to achieve this? I need to be able to access the "session" variable inside my callback

Best regards,

Patrik

assign default value to hierarchy editor "specify reference verilog"

$
0
0

Hi all,

i would like to have a default value (some string) for the hierarchy editor  field : set cell view-> specify reference verilog.

I would like that each time this menu is selected, the pop up form that appear, will automatically have a default path point to some file.

I assume that this kind of task require a trigger, that will trig some skill script, each time a config view is open. I guess this is the "easy" part.

the question is what commands or approach i should use here ( regardless of the trigger part)?

or maybe this is unnecessary , and there some .cdsinit line setup for this ?( probably not )

thx

meny

Save ADEXL output expressions in binary file?

$
0
0

Hello,

I have some expressions defined as ADEXL outputs, which I would like to export to a file for further post-processing.  However, due to the parametric sweeps and large number of data points, saving to CSV takes a long time and the file size is rather large.  Is there an option to save output expressions in some binary format like PSF (and is it possible to do it in skill)?  I looked around in the documentation and it seems like rdbWriteToFormat() is the closest thing I want, but it doesn't work for expressions.

Eric

how to write a SKILL code for PCELL powergrid

$
0
0

Hi all,

I am new to SKILL coding. I am trying to create a power grid PCELL using SKILL. The user can switch on and off layers/vias depending on needs. I found some SKILL code online and modified to meet my need. Now, i can create metals (ex. M3) but I dont know how i can turn it on and off when the user checks on/off the checkbox on the 'Edit Instance Properties' window. please see my code below. 

procedure(powerGridPcell(cv "dnn")
let( (rectRodObj)

Nx=7
temp = 1
for(i 0 Nx
temp = 0.63 * i
rectRodObj = rodCreateRect(
?cvId cv
?layer list("M3" "drawing")
?bBox list(0:temp+0.125 5.04:temp+0.505)
)
);End for i

); let
); procedure


;; Create the PCell, the "drawing routine" is encapsulated in the
;; powerGridPcell function which does all the work

pcDefinePCell(
list(ddGetObj("test_rudy") "power_grid_pcell" "layout")
(
)
let( ((cv pcCellView))
powerGridPcell(cv)
); let
)

;; Create the CDF for the 'l' and 'w' parameters
let( (cellId cdfId)
when(cellId = ddGetObj("test_rudy" "power_grid_pcell")
;; if the cell CDF already exists, delete it
when( cdfId = cdfGetBaseCellCDF(cellId)
cdfDeleteCDF(cdfId)
)
;; create the base cell CDF
cdfId = cdfCreateBaseCellCDF(cellId)
;; create the parameters
cdfCreateParam( cdfId
?name "visibilityM3"
?prompt "M3"
?defValue "true"
?type "boolean"
?display "t"
)

cdfSaveCDF(cdfId)
); when
); let

Thanks

PGtext in nograph mode

$
0
0

Is there a way to generate polygon text like the PGtext.il SKILL code, in nograph mode?


Delete an object at a given distance from a figure

$
0
0

Hello,

I generate many rod object on a area, I seek to delete some of them  which are at a given distance from another shapes drawing by a specific layer

Thank you for your help.

here my code:

procedure(delObjRulesSpac(cv rodList metalLayer spacingRule)
     let((direction rst)

         direction = '("top" "bottom" "right" "left")

         foreach(dir direction

             foreach(elem rodList

                  when(rodIsObj(elem)

                         when(elem~>dbId~>prop~>name == '("myProp") && elem~>dbId~>layerName == metalLayer

                                  rst = dbGetNeighbor(cv elem~>dbId~>bBox dir elem~>dbId~>layerName)

                                  when(rst

                                           dist = car(rst)

                                           when(dist < spacingRule  dbDeleteObject(elem~>dbId) )
                                )
                          )
                   )
            )
       )
  )
)

1) Init situation

2) my result

3) reslut hope

how to dump XXX.il from cadence virtuoso CIW

$
0
0

I want to check a skill file in /opt/a.il. but i do not have the access right now. but the virtuoso could access this file because it invoke this a.il file from .cdsnit.  so how can i dump this skill from CIW through commend line just like I used to dump the layout skill code by typing :

                                                      dbid = dbOpenCellViewByType("test_PDK" "pmos" "layout" "maskLayout")
                                                                       dbDumpPcDefinePcell( dbid "/home/pmos.il")  

thanks in advance!

How do you get the prop.xx file when creating a techlib in nograph mode?

$
0
0

I am creating a new techlib and compiling an ascii techfile into it using the core code of ddCreateLib(), techOpenTechFile(), and tclLoadTechFile() from the attached solution.

However, I get very many warnings about the prop.xx file missing when opening the final layout in graphics mode.

The solution description says explicitly that it does not create the prop.xx file and to copy it from somewhere.

Where should the prop.xx file be copied from if it is not specific to a techlibrary? 

Since prop.xx binary, the contents are unknown, to confirm a random copy from another library is ok.

Alternatively, is there another way to create a new techlib and compile a techfile in nograph mode that would generate the prop.xx file?

support.cadence.com/.../ArticleAttachmentPortal;pageName=ArticleContent&sq=005d0000001T5b7AAC_2017111103018741

ADEXL Test Setup using Skill and asiGetSession Failure

$
0
0

I'm trying to setup an adexl cellview with a single test.  However everytime I load the script shown below the asiGetSession on line 7 often returns nil and its not clear why that is the case.  Any ideas as to what is causing it to fail to get the session?  Is there a better way to setup the state of that test using SKILL (not ocean)?

ddGetObj("pk1126_sky77366_5_CR_mayberc" "pk1126_01_TB" "adexl" "data.sdb" nil "w")
sessionName = strcat("mysession" (sprintf nil "%d" random()))
axlSession = axlCreateSession(sessionName)
sdb = axlSetMainSetupDBLCV( axlSession "pk1126_sky77366_5_CR_mayberc" "pk1126_01_TB" "adexl")

;---------- Test "IDAC_SWEEP_MAIN" -------------
testSession = asiGetSession( 'IDAC_SWEEP_MAIN )
dc_analysis = asiGetAnalysis(testSession, 'dc)
asiSaveState(testSession ?name "IDAC_SWEEP_MAIN" ?option 'dir ?stateDir "/prj/pk1126_sky77366_5_CR/work_libs/mayberc/cds/design/pk1126_01_TB/adexl/test_states" ?description "IDAC_SWEEP_MAIN" )
htest = axlPutTest( sdb "IDAC_SWEEP_MAIN" "ADE")
axlSetTestToolArgs( htest list( list("lib" "pk1126_sky77366_5_CR_mayberc") list("cell" "pk1126_01_TB") list("view" "config") list("path" "/prj/pk1126_sky77366_5_CR/work_libs/mayberc/cds/design/pk1126_01_TB/adexl/test_states") list("state" "IDAC_SWEEP_MAIN_active") list("sim" "spectre")))

;====================== Save Setup ============================================
axlSaveSetup(axlSession)
axlCommitSetupDB( sdb )
axlCloseSetupDB( sdb )

How to extract Pcell proprieties from a CV

$
0
0

Hi all,

I need a small help, I want to extract of already existing pcell in the CV and them save it to the table. F.i. I need Width, number of gates and etc... 

The question is how to find the data, where should I look?

Kind regards,

Vadim 

Viewing all 5067 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>