Quantcast
Channel: Cadence Technology Forums
Viewing all 63127 articles
Browse latest View live

Forum Post: RE: SKILL code to change all the existing Metal layers to its corresponding fillBlock layer

$
0
0
Now i'm doing the following, but its coming wrong since my layer generation is not coming good. procedure(MetalToFillBlock() cv=geGetWindowCellView() shapes=geGetSelSet() let((m0) m2 = "m2" foreach(object geGetSelSet() object~>layerName == m2 dbLayerOr(cv list("m1" "fillBlock") shapes) dbLayerOr(cv list("m2" "fillBlock") shapes) dbLayerOr(cv list("m3a" "fillBlock") shapes) );foreach );let );procedure I know its wrong since in dbLayerOr i'm mentioning shapes as the whole selected list. So my, foreach seems not working. I think i'm doing it horribly wrong.

Forum Post: What am i doing wrong?

$
0
0
If i do shapes=geGetSelSet()~>layerName i get all the selected layer names. And if my output is something like ("m0" "m0" "m0" "m0" "m1" "m1" "m2" "m2" "m0" "m2") how do i get only the list of "m0" ?

Forum Post: RE: What am i doing wrong?

$
0
0
Hi, You can use "setof" to filter a list setof(x geGetSelSet() x~>layerName=="m0") The above line will return a list of shapes (db IDs) that are only of layer "m0". There also another function named "exists" which works similarly, but I prefer "setof". -Ramakrishnan

Forum Post: Bus-expansion-like trick for an array of design variables

$
0
0
I am using IC 5.1. I create 64 voltage sources by first creating a single one, then copying it, pressing F3 and then entering 63 in the "columns". I assign 64 net names by using bus expansion so then i get something like inp , inp ..... inp . The tools allow me to do the above quickly without manually having to draw so many voltage sources or naming so many nets one by one. So I was wondering if there's a way I can assign 64 such design variables to the 64 dc voltage sources, lets call them inp_var , inp_var .... inp_var , without having to manually pull up the property box of 64 voltage sources and typing 64 design variable names. Is there a quick way to do this, something like the above bus-expansion way? Or is the only alternate way is to modify the netlist every time (using some script) before I run monte-carlo simulations for each combination of the 64 voltages? Or any other faster/better solutions? I think this can be done in IC 6.1 but unfortunately I've to work in IC 5.1 because of legacy circuits, so please let me know if I can do it in IC 5.1. Thank you.

Forum Post: RE: Bus-expansion-like trick for an array of design variables

$
0
0
This isn't possible with anything built-in (even in IC6.1.X), but it's easy enough to do with a little bit of SKILL code. For example: procedure(CCFsetBusVars(@key (propName 'vdc) (suffix "_var") (instances geGetSelSet())) let((varName netName bussedInstTerm) rexCompile("^\\([^ $") foreach(inst instances when(inst~>objType=="inst" ;-------------------------------------------------------- ; Use net name connected to instance to name the ; variable, assuming it looks like a bus. Otherwise ; base the variable name on the name of the source ;-------------------------------------------------------- bussedInstTerm= exists(instTerm inst~>instTerms rexExecute(instTerm~>net~>name) ) varName= if(bussedInstTerm then rexSubstitute(strcat("\\1" suffix "\\2")) else strcat(inst~>name suffix) ) putprop(inst varName propName) ) ) t ) ) Assuming you've placed all the instances, added the wires and labelled the wires (with bus expansion), and performed a schematic check (to extract the nets), you can then select all the instances (doesn't matter if the wires are selected too), and run CCFsetBusVars(). There are some keyword arguments if the property is not called "vdc" - so for current sources it would be CCFsetBusVars(?propName 'idc) Regards, Andrew.

Forum Post: RE: What am i doing wrong?

$
0
0
[quote userid="367050" url="~/cadence_technology_forums/f/custom-ic-skill/41070/what-am-i-doing-wrong/1358786#1358786"]There also another function named "exists" which works similarly, but I prefer "setof".[/quote] I should point out that exists doesn't really work similarly - exists returns the remainder of the list which starts with the first element that matches the condition, whereas setof returns only the elements of the list which match the condition... Sorry to be pedantic - just didn't want ssram to head off in the wrong direction. Regards, Andrew.

Forum Post: RE: Monte Carlo simulation: there are two peaks

$
0
0
Hello Andrew, Thanks for your answering! I'm simulating a temperature monitoring schematic. In above simulation curves, the left curve is hysteresis high of overtempt (overtempt is output signal), and the right curve is hysteresis low of overtempt. The schematic diagram is below: From the schematic, you can see that, a resistors divided reference voltage compares with a negative temperature coefficient voltage, then following after two invertors to get overtempt. You said my measurement has only discrete levels. I think it's because of the invertors and comparator. But why the points on right side curve distribute like a two peak? Or for the sampling method, I selected 'random', do you think 'low-discrepancy sequence' will be better? Nelson. Thanks!

Forum Post: Sigrity OptimizePI "Error occurred while doing what-if analysis based on shorted decaps."

$
0
0
Hello, In Sigrity OptimizePI (17.2 Linux) tool, the what-if analysis simulation fails and gives this error message "Error occurred while doing what-if analysis based on shorted decaps." Could anyone tell me where to search in workspace to find out where is the shorted decap ? Thanks in advance.

Forum Post: RE: What am i doing wrong?

$
0
0
Thanks Andrew. I did not know that.

Forum Post: RE: What am i doing wrong?

$
0
0
Thank you Ramakrishnan. I got it working!

Forum Post: RE: SKILL code to change all the existing Metal layers to its corresponding fillBlock layer

$
0
0
Finally i got it working...! procedure(MetalToFillBlock() cv=geGetWindowCellView() shapes=geGetSelSet() m2list=setof(x geGetSelSet() x~>layerName=="m2") dbLayerOr(cv list("m1" "fillBlock") m2list) ; dbLayerOr(cv list("m2" "fillBlock") m2list) dbLayerOr(cv list("m3a" "fillBlock") m2list) foreach(shape shapes when(shape->layerName == "m2" shape->lpp = list( "m2" "fillBlock" ) );when );foreach );procedure But the only issue is that i need to have those lines for all the metal layers that i'm using. I'm not sure how to simplify it

Forum Post: RE: Creating Netlist--Error(ORCAP-32007):Netrev failed. Please refer to Session log or netrev.lst for details.

$
0
0
The important part is the PCB Footprint property for the part in the schematic. Look at the properties of the part to ensure that the footprint name is exactly what you have a footprint name for. Syntax is key. Check that the psmpath location contains those parts. This is usually down to a typo so check carefully. If you can't solve this then try contacting Cadence Support or the Channel Partner support who may want to see the files to debug the issue. If you don't have a maintenance contract you could put up screenshots of the psmpath setting, schematic property window of the part in question and an Explorer window showing the contents of where your footprint is stored.

Forum Post: RE: Bus-expansion-like trick for an array of design variables

$
0
0
Thank you Andrew, worked very well.

Forum Post: RE: SKILL code to change all the existing Metal layers to its corresponding fillBlock layer

$
0
0
It's not entirely clear what the sequence of layer names are, but rather than parsing the layer name, and handling it that way, you could do: procedure(MetalToFillBlock() let((cv shapes layerName validLayers validBackwards below above newFig) validLayers=list("m1" "m2" "m3a" "m4" "m5") ; didn't understand what m3a was for validBackwards=reverse(validLayers) cv=geGetWindowCellView() shapes=geGetSelSet() foreach(shape shapes layerName=shape~>layerName ; don't convert first valid layer as there's no "below" layer when(member(layerName cdr(validLayers)) below=cadr(member(layerName validBackwards)) above=cadr(member(layerName validLayers)) when(below && above ; use dbCopyFig rather than dbLayerOr as only dealing with one shape ; at a time. newFig=dbCopyFig(shape cv) newFig~>lpp=list(below "fillBlock") newFig=dbCopyFig(shape cv) newFig~>lpp=list(above "fillBlock") shape~>purpose="fillBlock" ) ) ) t ) );procedure Note that this code is untested as I don't have anything suitable to try it on - but hopefully it gives you the hint as to how to do it. Regards, Andrew.

Forum Post: RE: Monte Carlo simulation: there are two peaks

$
0
0
Hi Nelson, First of all, I doubt that changing from random to low-discrepancy sequence would affect this significantly. That will just mean that the the variation of the statistical parameters affecting the devices would be smoother for smaller numbers of samples, but I doubt it would make a massive difference to the distribution of your output measurements given that you have a reasonable number of samples already. I'd generally recommend LDS anyway over random, but the issue here is that what you're measuring appears to be discrete. It's still not clear what you're measuring. If it was the output of the inverter, then I'd expect that to be one of two values (1 or 0 - scaled by the voltage), but presumably you're measuring something else. When you say you're measuring the "hysteresis high of overtempt" it's not clear what you mean by that (I certainly don't know what you mean). What is the expression you're using? It can't just be the output voltage because the y values are too high. If the output is some kind of discrete measurement I wouldn't necessarily expect the circuit response to be gaussian. You don't really have "two peaks" you just have two values in the result measurements. The density estimator is meaningless in this case - you can see the y values (the red circles) are all lined up for two different values - so it's not two "peaks". If you looked at the Detail or Detail Transpose view it would be clear that all your measurements have one of two values. Regards, Andrew.

Forum Post: RE: Plotting gain versus output range

$
0
0
Hi Nicolas, It's a bit unclear what you are trying to do - but isn't this a matter of sweeping the output range and then plotting the gain? If the output range is the sweep variable, it will end up on the x-axis. Otherwise you'll have to give more detail on precisely what it is you are sweeping and what you're measuring. Regards, Andrew.

Forum Post: Opening MAX2870 .PCB and .SCH files

$
0
0
Hi, I'm trying to view and manipulate the design of an evaluation PCB for the MAX2870 Phase-Locked Loop chip. Maxim have made a .pcb and .sch file available on their website (under "Tools & Models" ) but I couldn't open either with any software I'm familiar with (Kicad and Eagle). After emailing the company to query what software to use I got this reply: The schematics and the PCB files available online can be opened by the Orcad - cadance which is the industrial standard for sharing such files. A free version of the said software should be available online. So I downloaded the OrCAD Lite package (version 17.2) and installed it. Using the "Capture CIS Lite" software I do have an option to open .sch files, but upon trying to open the MAX2870EVKIT-schematic.sch I get the following message: Has anyone come across this problem before, or have any recommendations so that I can access the file? Thanks in advance, Matt

Forum Post: RE: Plotting gain versus output range

$
0
0
Hi Andrew, Well, the OTA is part of a switched-capacitor integrator. However, I want to see the effect of the output swings of the integrator on the gain of the OTA. Generally, the OTA DC gain should vary across the output range of the integrator. Therefore, I wanted to have a plot that tells me what the gain is at that specific output voltage. I hope this is clear? Kind regards, Nicolas

Forum Post: License fails abruptly in while working on ORCAD.

$
0
0
WHEN LICENSE IS IN USE ANS I AM USING THE SOFTWARE FOR PCB DESIGN THE LICENSE ABRUPTLY FAILS, SUDDENLY I WILL GET LICENSE FAILED ERROR. HERE IS THE DEBUG.LOG data 16:49:49 (cdslmd) Wrong hostid on SERVER line for license file: 16:49:49 (cdslmd) C:\Cadence\LicenseManager\license.dat 16:49:49 (cdslmd) SERVER line says FLEXID=9-7ECFA92B, hostid is FLEXID=9-7ecfa92b 16:49:49 (cdslmd) Invalid hostid on SERVER line 16:49:49 (cdslmd) Disabling 3 licenses from feature OrCAD_Capture_CIS_option(AEB86839E90E8FFF4F80) 16:49:49 (cdslmd) Disabling 3 licenses from feature OrCAD_PCB_Designer(BEB8A859FE33F7B7D6DF) 16:49:49 (cdslmd) Disabling 3 licenses from feature OrCAD_PCB_Editor(6EE8084943CDE8FA7D1F) 16:49:49 (cdslmd) Disabling 3 licenses from feature OrCAD_PCB_Router(1E8848796A0CA15F0CC3) 16:51:49 (cdslmd) No valid hostids, exiting 16:51:49 (cdslmd) EXITING DUE TO SIGNAL 25 Exit reason 2 TRIED CHANGING THE FLEXID TO ALL SMALL LETTERS BUT GOT ANOTHER ERROR STATING INVALID LICENSE. PLEASE SUGGEST HOW TO RESOLVE REGARDS, JESH

Forum Post: Strange behavior with Allegro Viewer 17.2

$
0
0
I'm having problems with Allegro Viewer 17.2 on Windows 10 Enterprise and was wondering if this are known issues. 1) If I don't run Allegro Viewer as Adminstrator then report windows don't work. What I mean by this is report window opens (like Show Element or Measure), but the body says "Can't reach this page, make sure the web address is correct, search for this site on Bing, Refresh this page." If I run the viewer as Adminstrator than the reports display correctly. I completed wipe everything Cadence from my machine (uninstalled, wipe all cadence & allegro files, removed all cadence and allegro entries in the registry, rebooted, fresh download file from Cadence, and reinstalled). I tried installing both as user and administrator with the same results. 2) I can't save display settings. When I use the menu command View -> UI Settings -> Save Settings nothing happens. Looking at the .JRL log file it says "Command not found: save_settings"
Viewing all 63127 articles
Browse latest View live


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