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

Incorrect connectivity net name (_StrongGroup_)

$
0
0

Hi,

I encountered some problem where layout instance's netName is auto updated from net1 to net1_StrongGroup_11 after doing "Update Component And Nets" in LayoutXL mode.

May i know why and how this happen? Anyway to turn off this? Currently, i have to manually change the netName. 

 

Info (what i done to reproduce it)

1. opem schematic, and launch LayoutXL, then "Update Component And Nets"

2. The netName for each terminal will auto update to _StrongGroup_.

 

Cadence Version: "@(#)$CDS: virtuoso version ICADV12.1-64b 12/21/2012 10:59 (ddcat1) $"

 

Thanks a lot.


hiSaveAsViewFile() trouble in Virtuoso v6

$
0
0

 I have a script (http://www.cadence.com/Community/forums/p/24288/1317148.aspx#1317148) that will save the design tree file to a shell to run a shell script on, working in Virtuoso v5, but is breaking in Virtuoso v6 on the command hiSaveAsViewFile.

The Save File As form looks quite different in v6, but I cannot figure out Cadence's documentation to search for (anything..) something like this.

In v5 I use:

hiSaveAsViewfile->file->value-> = Newfilename

hiFormDone(hiSaveAsViewfileForm)

However, in v6,  I get the error message " eval: unbound variable - hiSaveAsViewfile".

Since testing with print statements is able to show me that the variable Newfilename is properly defined, and the command hiSaveAsViewfile() works in v6, I can only guess that the form itself is different in v6, and the format hiSaveAsViewfile->file->value is not the same.

2 Questions -

1. how can I test for the version of Virtuoso as an environment variable so I can handle this save function accordingly?

2. what is the v6 format for hiSaveAsViewfile->file->value??

many thanks in advance!

netlist modifications in ocean scripts

$
0
0

 Hello,

 

I am trying to create a script for multiple simulation of analog and mixed signal circuits. The idea is to implement a modified netlist with aditional blocks from an initial one, but I've been realizing that the netlist seems to be created for every iteration on XL mode (I'm using IC6.1.5 with ADE XL) Is there a way to fix the netlist as an input for the script instead of generating itself on every Ocean. X iteration?

Thanks a lot and best regards

How to save the data of fields in a Form

$
0
0

Hi, i wanted to save the data of the fields in a Form to specific directory or specific folder.

 

 

 

The Next SKILL IDE?

Help with Closures with skill++

$
0
0
Need some help with closure using skill++. The below code loads fine in interactive mode but when I run it I get the error
 E- *Error* eval: not a function-1. Not sure how to debug this, any help would be appreciated. I am using this from Allegro
did not see much of any reference to Skill++ there so I thought I would post here since it is a general Skill++ question.
It seems like it is counting (see the commands below the code).
 
Thanks,
Vince 
 
(define (makecounters)
(let ((vcount 0))
    (lambda ()
      (setq( vcount (vcount + 1) ))
      vcount)))
 
(define cntBy1 (makecounters))
 
 
 
Skill > load "test.ils"
variable makecounters redefined
t
ILS-<5> 
Skill > cntBy1
ILS-<5> 
E- *Error* eval: not a function - 1
Skill > cntBy1
ILS-<5> 
E- *Error* eval: not a function - 2
Skill > cntBy1
ILS-<5> 
E- *Error* eval: not a function - 3
Skill > cntBy1
ILS-<5> 
E- *Error* eval: not a function - 4
Skill > 

dummy device finder

$
0
0
Can you send me a skill code to find the Dummy devices (MOS,RESISTOR etc) in layout 

How to specify coords for leHiCreateInst() ?

$
0
0

 Is there any way to either add coordinates to or pass coordinates to leHiCreateIns() without clicking in the interface?

I would like to place instances generally at the origin, but often at other known coordinates, and would like to do so without first zooming in close enough to get an exact snapped coordinate, or alternatively by clicking at a random location to place, and then having to select the instance, get its properties, and finally specify the correct coordinate location.

Any insight into streamlining this or if there is a script to do it would be much appreciated.

 


cdb to oa tranaslation problem

$
0
0

 Hai,

        When I translated my designs from old cdb to new oa frormat to ensure compatability with IC6.1 , all contacts are missing in layout  view. Can somebody suggest a solution for this problem? SInce it is difficult for me to manually put the contacts all the layouts, it will be easy for me if anybody suggests a solution.

Thanks in advance,

Nishanth

how to pass CDF parameter's value of an instance in schematic pcell to CDF parameter of schematic pcell

$
0
0

An explanation of the problem I am facing is in order -

I have created a schematic pcell (A) in which I am instantiating the instance of a foundry delivered pcell (B). There are some independent (e.g. Bp, Bq ) and some dependent CDF parameters (e.g. Bx) defined for the CDF  of the pcell B.

So, Bx = FB_callback(Bp Bq)

Bx is calculated whenever I change Bp or Bq, using a call back function which I have absolutely no access to.

I have created 2 independent CDF  parameters for A (which is the pcell I created) - Ap and Aq. In the code for my schematic pcell I pass these values Ap and Aq to Bp and Bq respectively. Something like this -

master_b = dbOpenCellViewByType( "foundry_library" "foundry_cell_B" "symbol" )
inst_b = dbCreateInst( pcCellView master_b "I_B" list( 0.0 0.0 ) "R0")
inst_b~>Bp = Ap
inst_b~>Bq = Aq

However, after this when I print out the inst_b~>Bx then I see that it is not getting changed and is always the default.

How do I make sure that the callback routine for the foudry cell gets called? Also how do I pass the new value of Bx back into my pcell's CDF Ax?

Thanks,

How to convert metal1 to metal2

$
0
0

 Hi All,

  Is there any way (skill code) to convert the metal1 to metal2 in Virtuoso Layout Suite. I will select metal1 in the layout and using a BindKey, can I convert it to metal2 or viceversa??

I am using Layout L Suite and Cadence Virtuoso 6.1.4. version. 

Thanks in Advance!

Thanks,

Baig.

How to Calculate Hysteresis using OCEAN/SKILL script

$
0
0

I am trying to write a code that calculates the hysteresis window for my Schmitt trigger /comparator. When I try to get the expression through calculator and "intersect" function it gives a wavefrom and I am not sure how to obtain the co-ordinates fo the waveform. If I can obtain a list/co ordinates I can calculate the hysteresis by just sobtracting the two x-coordinates. I am struggling with this waveform object for a long time and not able to figure out the way. It happens with many functions of calculator that you will end up with waveform whose co-ordinates are not available in list form. Please let me know how to obtain this wave co crdinates in number format lists or something on which I can do some mathmatical processing.

Flattening a design

$
0
0

I want to flatten a design COMPLETELY.  I am using the  leFlattenInst(...) routine to do the flattening with 31 levels and flattening the instances and mosaics so that should be enough to get them all but to be safe, but do I need to go back and somehow check to see if everything is flattened and then I somehow need make the routine recursive or does leFlattenInst(...) do that for me?

 If it needs to be recursive, how can I check to see if I am done?

dbLayerSize seems to be faulty - is there a work-around?

$
0
0

I have a design with an object on a single layer with a fairly complex boundary (The object has 602 points in its outline).  I am using the dbLayerSize(...) routine to size the layer and place the result in a different layer.  In this instance I am resizing by 0 (so that should help eliminate resizing issue possibilities) but in other cases the amount could be anything and I am seeing the same issue with non-zero values.  dbLayerSize normally works just fine but for this particular object the result is an object with diagonal gaps across it.  Most of the outline is correct but the object has been divided into sections separated by four gaps of differing width with a 45° slope.  Since the object is on a keepout layer the diagonal gaps are a problem. I tried the regular menu "size" command on the object and it works fine.  I even tried copying the object to a different cell and running dbLayerSize with the same result.

Are there known issues like this with dbLayerSize?  Is there a work-around?  

None of the vertices of the object lie on top of an adjacent point.  484 are off-grid but that shouldn't matter.  One thing that is very bizarre about this problem is that it doesn't just affect this object.  Nearby objects on the same layer included in the LPPObjects list (see call below) which are being sized at the same time  are chopped up along the same diagonals even though they are not related in any other way. That suggests that there must be some internal variables common to both objects that are getting messed up.  This looks like a Cadence SKILL routine bug.

If you need it, I can provide the list of points.

The call is being made as follows:  dbLayerSize(Cv LPPTo LPPObjects SizeBy)

need help in mc simulation ---- IC5141

$
0
0

in my pdk,the nmos device model name is nch,but monte carlo simulation model name is nch_mis,so when do mc simulation,first i need to generate the netlist,then i should convert the model name nch to nch_mis using skill func( the skill func already exist),the problem is i don't know how to insert the convert function.

monteRun() command will automaticly regenerate the netlist,so,i don't know when i can modify the netlist,and then continue mc simulation


Print more than one subwindow in ps (pdf) file from ocean with ViVA

$
0
0

Hello,

I found interesting issue with ViVA running from ocean.

If I try to print the window with more than one subwindow in a .ps or .pdf files from ViVA menu everything is fine. It means here that print should be started really through the ViVA menu: "File"->"Print"->"Print to File PS/PDF". The result is ps/pdf file with all subwindows plotted in one page.

If I try to print the ViVA window in .ps or .pdf file  from ocean, with hardCopy() and hardCopyOptions() set properly, I will only get actual one subwindow plotted! I was near to give up, because I saw that ?hcMakeExactCopy option doesn't work for ps. But after some tests I got even from ocean properly all subwindows plotted! Unfortunately it happens only if during the opened ocean session, I make one manuel print  through the menu File->Print! Once (during the opened ocean session) manual print has been made, if you go again to the ocean and print with the hardCopy() everything is fine! But once session is left and started again the hardCopy() behaves normal again with the single subwindow print!

I wonder if it is any way to get the hardCopy() to plot all subwindows. Obviously it is possible if some "handwork" has been made prior to it. I tried to find if some config files have been written by this "handwork" but I couldn't find anything.

Is it generally possible to print more than one subwindow into the .ps or .pdf file with ViVA with the hardCopy()? As I try to explain here it is obviosly that it hardCopy() can do this, but it seems that something is wrong...

Regards,

Dalibor.

skillDev not enabled

$
0
0

 Hi All,

 We have updated the virtuoso tool version from IC614 to 615. We have been getting below warning msgs and errors when we are tring opening SKILL IDE.

 *WARNING* skillDev not enabled.

We are getting below error when we did save or load a file in SKILL IDE.

 *Error* printstackil: skillDev not enabled.

 

 Please let me know what's the problem.

 

Thank you,

Sarvani.

Remove off grid errors using Skill

$
0
0

Hi All,

 Is there any way to remove the off grid errors in the layout using skill language. I am using Cadence Virtuoso 6.1.4 version. 

I need a skill program that takes the grid value from the user as input and removes off grid errors in the current cell view.

Thanks in Advance! 

Regards,

Baig.

Nested foreach loop

$
0
0

In an attemt to make parametric simulation scripts a bit more readable, I wrote a macro that allows foreach loops to be nested. I have not tested it fully, but I would like the readers' input on my code. The code generates a string containing the foreach loop, before evaluating it. It feels a bit clumsy, but I was unable to think of an simpler way to do this. Any suggestions?

TOForeachNestFunc=lambda( (Symbols Lists Commands)
let(((DeclareLoopVars nil) (DeclareLoopHead "") (DeclareLoopBody "") (DeclareLoopTail "")
	(MainLoop "foreach( (") (LetStringHead "let((") Result )
;We'll need to create a loop that declares the expanded sweep lists,
;before creating a main loop that runs through all the expanded sweep lists and
;executes the commands.
	foreach((List Symbol) Lists Symbols
	 DeclareLoopVars=cons(sprintf(nil "%sS" Symbol) DeclareLoopVars)
	 DeclareLoopBody=strcat(DeclareLoopBody sprintf(nil "%sS=cons(%s %sS) " Symbol Symbol Symbol))
	 DeclareLoopHead=strcat(DeclareLoopHead sprintf(nil "foreach(%s '%L " Symbol List ))
	 DeclareLoopTail=strcat(DeclareLoopTail ")")
	 MainLoop = strcat(MainLoop Symbol " ")
	)
	MainLoop = strcat(MainLoop ") ")

	foreach(Var reverse(DeclareLoopVars)
		LetStringHead=strcat(LetStringHead "(" Var " nil) ")
		MainLoop = strcat(MainLoop Var " ")
		)
	LetStringHead=strcat( LetStringHead ")")
	MainLoop = strcat(MainLoop "\n" Commands "\n) ")
	Result=strcat(LetStringHead "\n" DeclareLoopHead "\n" DeclareLoopBody "\n" DeclareLoopTail "\n" MainLoop "\n" ")")
	)
)
defmacro(TOForeachNest (Symbols Lists @rest Commands) ;Executes a nested foreach loop ;Symbols: A list of variables that are used in the commands. ;List:A list of lists that contain the values to be swept ;Example: ; TempL= '(-40.0 27.0 85.0) ; VSupplyL= '(3.2 3.3 3.4) ; ; TOForeachNest('(Temp VSupply) list(VSupplyL TempL) ; printf("Temperature: %e, Supply Voltage: %e", Temp VSupply) ; ) ;expands to: ; foreach(Temp TempL ; foreach(VSupply VSupplyL ; printf("Temperature: %e, Supply Voltage: %e\n", Temp VSupply) ;) ;) let((CommandString) CommandString=sprintf(nil "%L" ,Commands) CommandString=substring(CommandString 2 strlen(CommandString)-2) `let((Result) Result=funcall(,TOForeachNestFunc ,Symbols ,Lists ,CommandString) evalstring(Result) ) ) )

to set a bind key to show/hide dummy/odummy

$
0
0

I'd  like to set a bind key to show/hide dummy/odummy, here is part of code:

Lyt_Layer_List = list(       list("PO" "OD" "NP" "PP" "PW" "NW" "DNW" "VTH_P" "VTH_N" "UHVT_P" "UHVT_N" "VTL_P" "VTL_N" "VTUL_P" "VTUL_N" "OD_12" "OD_18" "OD_33")       list("M1" "CO")       list("M2" "VIA1")       list("M3" "VIA2")       list("M4" "VIA3")       list("M5" "VIA4")       list("M6" "VIA5")       list("M7" "VIA6")       list("M8" "VIA7")       list("M9" "VIA8")       list("AP" "VR" "CB2" "CB2_FC" "UBM" "PM")       list("prBoundary"))Lyt_Default_Layers = list("prBoundary")Lyt_Layer_Purposes = list("drawing" "dummy" "odummy" "dummy1" "pin" "boundary")Lyt_Dummy_Purpose_Name = "dummy" ;This is to select if dummy layers will be shown search in the purposes if it is found inside the string it is considered dummy procedure(ST_Lyt_ShowHide_Layers(Command PressedKey ShowDummy)       ;Available values for Command: >=1 to Add, <=1 to Remove and 0 to Hide all but selected one       ;Available values for ShowDummy: t to show dummy types and nil to keep dummy layers hidden       Lyt_Key_Layer_Assoc = '( ("0" 0) ("1" 1) ("2" 2) ("3" 3) ("4" 4) ("5" 5) ("6" 6) ("7" 7) ("8" 8) ("9" 9) ("`" 10) ("-" 11) )       Lyt_Sel_Layers = nth(nth(1 assoc(PressedKey Lyt_Key_Layer_Assoc)) Lyt_Layer_List)       Lyt_Show_Layer = nil       if((Command >= 0) then              leSetEntryLayer(list(nth(0 Lyt_Sel_Layers) nth(0 Lyt_Layer_Purposes)))              if((Command == 0) then                     leSetAllLayerVisible(nil)              )              foreach(Lyt_SLayer Lyt_Default_Layers                     foreach(Lyt_SPurpose Lyt_Layer_Purposes                           LytShowLayer = t                           if((Lyt_SPurpose == Lyt_Dummy_Purpose_Name) then                                  LytShowLayer = ShowDummy                           )                           leSetLayerVisible(list(Lyt_SLayer Lyt_SPurpose) LytShowLayer)                     )              )              Lyt_Show_Layer = t       )       if((Command >= -1) then              leSetEntryLayer(list(nth(0 Lyt_Default_Layers) nth(0 Lyt_Layer_Purposes)))       )       foreach(Lyt_SLayer Lyt_Sel_Layers              foreach(Lyt_SPurpose Lyt_Layer_Purposes                     LytShowLayer = Lyt_Show_Layer                     if((rexMatchp(strcat(".*" Lyt_Dummy_Purpose_Name ".*") Lyt_SPurpose) == t) then                           LytShowLayer = (ShowDummy && LytShowLayer)                     )                     leSetLayerVisible(list(Lyt_SLayer Lyt_SPurpose) LytShowLayer)              )       )       hiRedraw())

Thanks,

Weili

Viewing all 5066 articles
Browse latest View live


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