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

Re-evaluate results with ADEXL

$
0
0

Hello,

I can re-run simulations from the terminal after they've bugged for some reason. The corresponding results are then accessible from the results browser, but unfortunatelly when I click on the "Re-evaluate results" button (in the ADEXL results panel), the expressions of the test are not updated... (espacially if I've previously cancelled the simulation before rerunning from the terminal) 

I'm wondering if there is a simple way of forcing ADEXL to re-evaluate results from the data base in such a case.

Any idea?

Many Thanks

Cedric.


Round off in VerilogA

$
0
0

How do I truncate a value in VerilogA ? I want to control the significant digits of a voltage value inside the VerilogA model. Please help me with this. 

Thanks. 

Regards,

Aishwarya

Most efficient nested data structure?

$
0
0

I'm writing a script to port a design between processes, and I need some kind of data structure that describes how to make the conversion for every primitive instance of the old process. This would include things like the library and cell name of the equivalent instance in the new process, mapping between symbol terminals, mapping between cdf properties, cdf callbacks to run, and any custom functions that need to be called during the conversion process. (I'd include custom functions as strings and use evalstring(), unless there's a better option). This entire structure would be static and loaded from a file. Since there are so many libraries and cells, I need something that can be searched quickly. I realize that the actual conversion process will probably take significantly more time than finding the instructions, but I think the efficiency still matters since it will add up.

There seem to be some tradeoffs between associative tables, disembodied property lists, and defstructs, depending on the number of elements. My understanding is that associative tables are best for long structures, and the defstructs might be better for shorter structures (or maybe DPL's, but the documentation doesn't suggest they're any good). I'm not sure what the tradeoffs between defstructs and associative lists are, but it seems like associative lists are better for things where the keys are unknown, and defstructs for things where the keys are known.

My first thought was:

  • Assoc Table: libraries[]
    • Keys: library names of cells to be converted
    • Values: Assoc Tables cells[]
  • Assoc table: cells[]
    • Keys: cell names of cells to be converted
    • Values: Defstruct cellmap
  • Defstruct: cellmap
    • ?libname - String, library name of new cell
    • ?cellname - String, cell name of new cell
    • ?termmap - Assoc list, keys are old terminal names, values are new terminal names
    • ?propmap - Defstruct, An assoc list similar to termmap except for property names, and a string for callbacks to be executed/custom functions to run on the property value

      Any thoughts?

Pcell

$
0
0

Hi, I want to create a function to find all pcells  of a certain type in the layout hierarchy and flatten them. I really appreciate your help.

Thanks.

Reza. 

Draw random numbers from a normal distribution in an Ocean script

$
0
0

Hello,

I want to study the effect of the parameter variabilty of a verilogA component. I would like to draw random numbers from a normal distribution when using desVar in my Ocean script.

How could I do this?

Thank you very much for your help

How to change design for ADE XL/Assembler test using SKILL and preserve analysis, variables and outputs

$
0
0

Hi,

I need to change the design for ADE XL/Assembler test using SKILL.

I am tryed to do this as folowing:

testSession=axlGetTest(axlGetMainSetupDB(axlGetWindowSession()) "aa")

toolargs=axlGetTestToolArgs(testSession)

rplaca( cdr( assoc( "view" toolargs ) ) "schematic" )

axlSetTestToolArgs(testSession toolargs) 

This indeed changes the design but also resets analysis, variables, and outputs.

Is it any other way to change the design without resetting analysis, variables, and outputs?

Best regards,

Alex.

removing quotes in skill

$
0
0

Hi,

Is there an function available in cadence skill to remove double quotes?

I need to provide a = "0:0"  as input to a function, which wont take double quotes.

Please help.

Thanks

PK

valid layers not showing up in LSW

$
0
0

I create an incremental technology file and library that combines two independent technology files. I will refer to the combined technology file as "techfile_combo" and the two independent technology files as "techfile_0" and "techfile_1". 

When I compile the incremental technology file, I get a message that everything was successful with no errors.

When I create a new library and attach it to techfile_combo, valid layers from techfile_1 do not show up in the LSW, but valid layers from techfile_0 do show up. However, from Skill scripts, I can draw shapes on valid layers from both techfile_0 and techfile_1. And, in manual editing mode, I can select a shape and hit "q" to view its properties, and I can manually change the layer to any valid layer from techfile_0 and techfile_1. But to reiterate, none of the layers from techfile_1 show up in the LSW. Thus, I cannot hide them, isolate their view, click on them to manually draw shapes, etc.

Any idea what might be going on? 


Set library manager window title with SKILL?

$
0
0

Hi,

Is it possible to set library manager window title with SKILL?

Best regards,

Alex

get pcells within a polygonal area, hierarchically

$
0
0

We have a polygon (not rectangle) at the top level, and pcells within that polygon's area, at various levels of hierarchy.  We would like to read properties from all of those pcells.

A version of geSelectArea that would allow a start and stop level, instead of only selecting in the top level, would accomplish the goal.  dbGetOverlaps descends the hierarchy, and would work great if you could specify a non-rectangular search area.

Any ideas?

Thanks

How to call a procedure when a simulation started with sevRun(sevSession) ends

$
0
0

Hi *,

How can I trigger a procedure call when a simulation started with sevRun(sevSession) has finish the execution.

Most likely there are multiple methods to start the simulation, but here we have some existing code that use sevRun() and I don't want to modify too much in the code if it is not necessary.

Thank you,

Marcel

maximizing and minimizing CIW with a skill function tied to bindkey

$
0
0

If hiFocusToCIW(hiGetCurrentWindow()) tied to bindkey can be used to pop screen focus to the CIW window - is there an opposite function to minimize the CIW and return focus to the layout window with a bindkey ?

thanks. just wondering

abe boolean functions - detect problem geometries and abort early before abe crashes/hangs

$
0
0

Is there a good way to detect - before abeInit - some of the problem scenarios that would cause abe functions to either crash or hang?  When these scenarios are detected, the function could abort before abeInit.  A few scenarios that have caused chronic problems:

- non-orthogonal lines on a layer that abe reads in using abeLayerFromCellView - causes seg fault

- a circle on one input layer partially overlapping a rectangle on another input layer - causes hang, with no output, even from the beginning of the skill function that calls the abe functions

- various 'stairstepping' of input layers - does not cause crash or hang, but, results in abe tiles that do not cover all of the input layer area - the solution so far has been to just run another abeTouch function to combine the first-attempt tiles with any tiles of the same input layer that touch the first-attempt tiles... but this is iterative, we do 3 iterations now and will probably encounter something that is still missed - Cadence support confirms the best option here is to just add another iteration... seems like abe functions could handle this internally: if tile area doesn't cover all the input area, add another iteration.

Calculator special function Forms

$
0
0

I am trying to make a calculator function with a form.  However I am finding the documentation to do this lacking and have some questions about setting up the form and about setting the buffer.

The example provided uses a function "ahiCreateStringField" which is otherwise undocumented.  It seems to act exactly the same as "hiCreateStringField" (no "a" at the start")  However when I define a field using a function without the a and one using the function with the a in the same calculator form it doesn't display the form when you click on the function in the calculator.  I also noticed that I seem to be able to add other types of fields by taking a normal form function and appending "a" on the front.  However none of theses other functions are mentioned at all in the documentation.  

Form Questions

1. What is the functional difference between "ahiCreateStringField" and "hiCreateStringField"?

2. Do all of the form functions have an "a" equivalent?  Is there a way to check what arguments they accept?

Buffer Questions

3. Currently I am using "calCreateSpecialFunctionsForm"  to set the calculator buffer.  However this automatically puts the current buffer value as the first argument to my function. It seems like I could write my own CB function using "calSetBuffer" to set the buffer,  Is there anything else I need to take care of when I do this? 

4.  Also I am using "calCreateSpecialFunctionsForm"  but it seems like it would be more flexible to perform it's function myself to make a more advanced form. I could use "calRegisterSpecialFunction" to register the function, and "hiCreateForm" to open the form.  Is there anything else I need to take care of when I do this?  Would I then need to use the form functions without "a" appended?

how to determine fet pcell actual drawn width per finger?

$
0
0

On folding of a fet pcell (i.e. increasing the finger count while maintaining the total combined w), how can you determine the actual generated w per finger?  The assumption is that all fingers have the same finger width, i.e. the overall string of fets has just one (merged) diffusion rectangle, crossed by some number of gate stripes.

Basically, it seem the folding operation is 'open-loop': there is no feedback mechanism to say "sorry, you cannot increase the finger count any more, since the generated width per finger multipled by the requested new finger count would no longer be equal to the specified total w."  This could happen for grid snapping reasons or for min-width reasons.  In the (compiled) pcells that we use, there are no restrictions on finger count, and there are no pcell parameters that indicate the w per finger of the current pcell; the only relevant pcell parameter is total w, which is specified by the user, and does not change as a function of finger count or grid or min width.

Ultimately I would like to generate that warning when I try to fold too many times, i.e. when I try to increase the number of fingers such that new total w would no longer match expected total w.  How can we accomplish this?


generate spectre subckt netlist from cellview?

$
0
0

Is there an easy way to generate a spectre netlist in subcircuit form from a schematic or av_extracted cellview?  In the past I've done things like call virtuoso with a replay file that has something like:

envSetVal("asimenv.startup" "projectDir" 'string "my_netlist_directory")

simulator('spectre)

design("myLib" "myCell" "myView")

createNetlit(?recreateAll t)

this has been most useful, but of course this gives me the netlist of myCell as the top of the netlist.  I have a  need to create subcircuits, i.e.

subckt myCell p1 p2 p2 ...

// netlist contents

ends myCell

as opposed to just the netlist contents.  It would be nice if any CDF parameters ended up in the header properly.

I could do this by creating a new schematic and instantiating myCell into it and then netlisting this wrapper schematic and then using awk/perl/python/whatever to pull out what is between the subckt/ends lines (inclusive) but that requires either manual intervention (creating the wrapper schematic) or at least a writable library which I may or may not have.

Think custom cells -> subckt -> liberate for characterization for one reason this could be needed.

Any suggestions?

Thanks

-Dan

How to create placement blockage in desired area?

$
0
0

Hi,

dbCreateLayerBlockage(..)   --> command works to create blockage of type 'routing' and etc..  But it isn't working for placement - type.

Looks like the command doesn't support placement blockage.

Is there any other way how to create the blockage of type placement?  ( Hard - placement ).

Will be very helpful if any of you can provide me the command.

Kind Regards,

Vish

How to get DIVA to save labels in extracted view

$
0
0

I'm using Diva instead of Skill to flatten and merge large designs. This is a great tool for making plots (it declutters all the shape edges), and it runs in seconds vs. hours when flattening/merging with skill.. The trouble I'm having is Diva does not treat a label the same as a shape. The code below is my Diva .rul file that does a foreach through a list of layers I provide. All works well, except it doesn't copy any shape that has an objType~>label into my extract view. I can brut force a copy using Skill, but this slows things down, is there a way for Diva to copy it over?

drcExtractRules(
cvId = ivGetCellView()    

  ivIf(switch("extract?") then
 
;below loop will go through each layer user selects and copies/merges it in the cvPlot cellview
;also I had to check that a shape existed on each layer or diva would error out

foreach(lpps layerSelect
 
     layer=car(lpps)
     purpose=cadr(lpps)
     printf("Layer Being Copied is %L Purpose is %L\n" layer purpose)
     ;printf("Started collecting selected shapes \n")
     shapeLayer = geomGetPurpose(layer purpose)        ;need to collect all shapes on layer and purpose selected
     ;printf("Finishes collecting selected shapes \n")          
     saveInterconnect((shapeLayer (layer purpose)))    ;command to copy shapes to extrac view
     
   
   );end foreach

 
 
  );end ivIf

) ;   drcExtractRules

PCELL and Parasitic menu's are missing in layout view

$
0
0

Hi,

   I am trying to explore pcell creation using Virtuoso® parameterized cell software. But I can't able to find it in Launch->Pcell menu. This is similar to other options like Parasitics, Power EM/IR etc. Whether these virtuoso tools requires separate licensing? If not, am I missing any environment variables those are to enable these options?

detect if dcOp boolean button ( on DC analysis form ) is check .

$
0
0

Hi ,

Im trying to detect if the dcOp ( save DC operating point)  button ( on DC analysis form) is checked or not.

Im doing he below : 

session = asiGetCurrentSession()

myOpt=asiGetAnalysis( session 'dc)

myOpt~>?? gives :

(name dc parent stdobj@0x3a385770 scopeStore
nil scope nil valid t
modified nil data table:asiTable type
dc prompt "DC" formatFunc nil
enable t continuable nil oceanOnly
nil form \*slotUnbound\* formInitCB nil
formApplyCB nil formType custom advAnaObject
nil
)

so I do : 

myOpt~>data~>fields~>data~>?? and I get :

asiGetAnalysis( session 'dc)~>data~>fields~>data~>??
values(stdobj@0x3a392fc8 SpecificPointsLabel stdobj@0x14fec5f0 span stdobj@0x3a392fb0
_XX_order
values(SpecificPointsLabel useDiscrete log dec lin
step stepTypeLog stepTypeLin incrType SweepTypelabel
span center stop freqLabel startLabel
start sweepChange rangeType SweepRangelabel SweepRangeFrame
param selectDV designVar modelParam mod
deviceParam select dev sweep SweepVariableLabel
SweepVariableFrame hysteresis saveOppoint clearAna anaName
enable
) stepTypeLog stdobj@0x3a392f80 enable
stdobj@0x3a392f98 useDiscrete stdobj@0x3a392f38 log stdobj@0x3a392f50
param stdobj@0x3a392f68 dev stdobj@0x3a392f20 select
stdobj@0x14fec380 dec stdobj@0x3a392ef0 designVar stdobj@0x3a392f08
SweepRangeFrame stdobj@0x14fec428 sweepChange stdobj@0x3a392ed8 SweepVariableFrame
stdobj@0x14fec320 center stdobj@0x3a392ec0 startLabel stdobj@0x14fec4a0
stop stdobj@0x3a392ea8 deviceParam stdobj@0x3a392e90 freqLabel
stdobj@0x14fec4b8 clearAna stdobj@0x14fec2d8 modelParam stdobj@0x3a392e78
SweepTypelabel stdobj@0x14fec518 SweepVariableLabel stdobj@0x14fec338 anaName
stdobj@0x3a392e60 saveOppoint stdobj@0x3a392e48 SweepRangelabel stdobj@0x14fec440
hysteresis stdobj@0x3a392e30 selectDV stdobj@0x14fec3f8 mod
stdobj@0x3a392e18 incrType stdobj@0x3a392e00 stepTypeLin stdobj@0x3a392de8
lin stdobj@0x3a392dd0 step stdobj@0x3a392db8 start
stdobj@0x3a392da0 sweep stdobj@0x3a392d88 rangeType stdobj@0x3a392d70
)

but when trying to get into values fields, I get  

(_anaShiftFieldsViaDisplayCB(form
'dc
'values
'nil 380
) && !member(asiGetAnalysisFormFieldVal(form
'dc
'sweep
_asiGetAnaSubName(form
'dc
)
)
'("" "None")
) && ((('nil && (asiGetAnalysisFormFieldVal(form
'dc
'sweep
_asiGetAnaSubName(form
'dc
)
) == "Frequency")) && _anaShiftSpecificPtField(form
'dc
'values
(0 + 145)
(220 + 30)
)) || (member('dc
'(pss qpss hb)
) && asiGetAnalysisFormFieldVal(form
'dc
'useDiscrete
_asiGetAnaSubName(form
'dc
)
)) || (!member('dc
'(pss qpss hb)
) && asiGetAnalysisFormFieldVal(form
'dc
'useDiscrete
_asiGetAnaSubName(form
'dc
)
) && _anaShiftSpecificPtField(form
'dc
'values
(0 + 160) 380
))) && not(((eq('dc
'hbac
) || eq('dc
'pac
)) && member(asiGetAnalysisFormFieldVal(form
'dc
'special
)
'("Compression Distortion Summary" "Rapid IP3" "IM2 Distortion Summary" "Rapid IP2" "Triple Beat")
))
)) editable t
enabled t coordinates
((160 380)
(240 20) 0
) page
nil value nil name values
prompt "" defValue nil envValue
nil private nil appCB \*slotUnbound\*
sendMethod t allowExpr nil updateEvent
nil invalidateFunc asiInvalidateControlStmts aelEnv nil
native t nativeSet t nativeLoad
nil active
lambda( (ana)
(t && (('nil && (asiGetAnalysisFieldVal(ana
'sweep
) == "Frequency")) || asiGetAnalysisFieldVal(ana
'useDiscrete
)) && ('nil || !member(asiGetAnalysisFieldVal(ana
'sweep
)
'("" "None")
)))
) savestate t
mtsOption nil deltaDel t partition
fields tooltip nil startMarker "["
endMarker "]"
)

looks like I doing something totally wrong. 

can anyone advise?

thx

meny

Viewing all 5093 articles
Browse latest View live


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