How to use 'ddSyncWithForm()' inside a TabField?
hiCreateReportField: How would I pass a value stored in a variable to choices? list
Hi there,
When I am trying to use the variables like;
a="drawing"
b="100"
form~>handle~>choices=list(list(a b)) >>doesnt work
form~>handle~>choices=list(list("drawing" "100")) >>this works
in the choices columns the same values are not reflected on the reportField form.
Please help with me with this as I have a requirement to display many rows on the ReportField where all the rows content is stored in different variables post some processing code.
Thanks.
Creating lines between 2 points while using enterPoints function
Hi,
i wrote the following procedure in order to save a "polygon" points in a file.... the main issue i have here is that i want that between each mouse click ill see a flight line between the last point to the current point or to the mouse. is it possible?
procedure( GetCursorCoord( @key (numbOfPoints 20) (fileName "CursorCoord.log"))
let((messages pt fp)
;-----------------------------------
; Create a message to prompts
;-----------------------------------
for( i 1 numbOfPoints
messages = cons(sprintf(nil "Enter %d point" i) messages)
)
messages = cons(sprintf(nil "Enter the next point") messages)
if( !(fp = outfile(fileName)) then
warn("Failed to open file %L\n" fileName)
)
;-----------------------------------
; Get enter points from user
;-----------------------------------
points = enterPoints(
?prompts reverse(messages)
?addPointProc ???
?doneProc "test_end"
)
;--------------------------------------
; Write the coordinate to a file
;--------------------------------------
printf("Finished writing file")
close(fp)
);let
);proc
;###########################################################################
procedure( test_end( window done points )
let(()
foreach( pt points
fprintf(fp "%L,%L," nth(0 pt) nth(1 pt)))
fprintf(fp "\n")
))
;#############################################################################
rod PCELL (Metal with slot)
I am new to pcell and trying to create a rectangle metal with slots. (by provinding size of slot, x and y enclosure etc..)
I can easily do it using Layout editor by drawing a rectangle and by using Create-> Slot
How can I create slot when I used rodCreateRect to create a rectangle and want to use same kind of options available in Create->Slot to create slot in pcells.
Any example skill file will be appreciated.
How can I get a list of expressions/outputs used in ADE-XL session
Assura DRC Error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance >>>>>> *WARNING* Failed to build VDB. Cannot submit DRC Run.
I am trying to run Assura DRC. My technology file is TSMC130nm, Assura 316, IC5141 USR6. CIW shows the following error:
\o Loading tech rule set file : /home/icic/tsmc130rf/Assura/techRuleSets
\o Compiling rules...
\o
\o function viawithsize redefined
\o function geomSizeAndProc redefined
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 1031. oddn11_d = geomContactCheck(oddn1_d0 (length == 500) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 1087. oddn21_d = geomContactCheck(oddn2_d0 (length == 500) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 2796. m1dn1l1_d = geomContactCheck(m1dn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 2852. m1dn1h1_d = geomContactCheck(m1dn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 2909. m2dn1l1_d = geomContactCheck(m2dn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 2965. m2dn1h1_d = geomContactCheck(m2dn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3022. m3dn1l1_d = geomContactCheck(m3dn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3078. m3dn1h1_d = geomContactCheck(m3dn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3135. m4dn1l1_d = geomContactCheck(m4dn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3191. m4dn1h1_d = geomContactCheck(m4dn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3256. m8dn1l1_d = geomContactCheck(m8dn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3312. m8dn1h1_d = geomContactCheck(m8dn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3374. mddn1l1_d = geomContactCheck(mddn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3430. mddn1h1_d = geomContactCheck(mddn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3761. srco_viawarn_line_co = geomAndNot(sr_co geomContactCheck(sr_co (length == 0.16) (width == 0.16) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3764. srco_viawarn1_line_via1 = geomAndNot(sr_v1 geomContactCheck(sr_v1 (length == 0.19) (width == 0.19) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3767. srco_viawarn2_line_via2 = geomAndNot(sr_v2 geomContactCheck(sr_v2 (length == 0.19) (width == 0.19) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3770. srco_viawarn3_line_via3 = geomAndNot(sr_v3 geomContactCheck(sr_v3 (length == 0.19) (width == 0.19) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3773. srco_viawarn4_line_via4 = geomAndNot(sr_v4 geomContactCheck(sr_v4 (length == 0.19) (width == 0.19) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3776. srco_viawarn5_line_via5 = geomAndNot(sr_v5 geomContactCheck(sr_v5 (length == 0.19) (width == 0.19) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3779. srco_viawarn6_line_via6 = geomAndNot(sr_v6 geomContactCheck(sr_v6 (length == 0.19) (width == 0.19) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 3782. srco_viawarn7_line_via7 = geomAndNot(sr_v7 geomContactCheck(sr_v7 (length == 0.36) (width == 0.36) swap (allWithTolerance = 1.0)))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 4882. _m5_mmdn1l1_d = geomContactCheck(_m5_mmdn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 4938. _m5_mmdn1h1_d = geomContactCheck(_m5_mmdn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 4994. _m6_mmdn1l1_d = geomContactCheck(_m6_mmdn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 5050. _m6_mmdn1h1_d = geomContactCheck(_m6_mmdn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 5106. _m7_mmdn1l1_d = geomContactCheck(_m7_mmdn1l_d0 (length == 200) swap (allWithTolerance = 1.0))
\e *Error* eval: unbound variable - allWithTolerance
\o error: geomContactCheck() Keyword is unsupported, or operator undefined -- allWithTolerance.
\o 5162. _m7_mmdn1h1_d = geomContactCheck(_m7_mmdn1h_d0 (length == 200) swap (allWithTolerance = 1.0))
\o Errors exist in the rules file '/home/icic/tsmc130rf/Assura/./drc/assura.drc'.
\w *WARNING* Failed to build VDB. Cannot submit DRC Run.
is there a way to run Monte Carlo simulation in a differently directory?
I run the simulation in the school server, since they do not have much space for each student, they prefer me to run it in the \tmp directory, in this case, is there an option to set up the running directory or the project directory to be under \tmp like we used to do with ADE L simulation? Or just keep the simulation results under \tmp directory?
Thank you!
Schematic fanout (drive to load ratio) reporting SKILL code
I am looking for guidance and possibly example code to aid in my creation of a skill routine that allows a user to click on a schematic net (or possibly driving device) and then see a report showing the drive to load ratio (and also report the total W and L for the driving device as well as the total W and L for load devices) for the device driving that net.
This tool would need to traverse hierarchy to find all pertinent loading.
Any example of similar code which traverses through schematic hierarchy may be useful.
Many thanks!
Ryan
custom let with local variables from list (defmacro)
Hi,
I'm playing around with defmacro (as a defmacro beginner) and I can not succeed :(
I have a list of strings:
myVarList = list( "a" "b" "c" ) ;;any number of parameters, not necessary 3 !
[ or: myVarSymbolList = list( 'a 'b 'c) ]
I want to define a custom let where my string would be local variable, and I would like to use it like this
myCustomLet( myVarList
;; here starts my normal code having a, b and c as local variables
a = 1 b = 2 c = 3
)
I don't know how to do it properly :(
I tried like this:
(defmacro customLetWithLocalVars (listOfVars @rest code )
`(let ,listOfVars ,@code )
)
But it is working only like this:
customLetWithLocalVars( (a b c) a=1 b=2 c=3)
and NOT LIKE THIS:
customLetWithLocalVars( myVarSymbolList a=1 b=2 c=3 )
:(
Do you have any hints?
Stacked objects
defining local procedures
I'm confused about local functions. In the Cadence Help documentation, there is a section called "Using procedures to Declare Local Functions." Let's look at Example 1 in that section.
procedure( trParity( x )
procedure( isEven(x)
x == 0 || isOdd( x-1 )
)
procedure( isOdd(x)
x > 0 && isEven(x-1)
)
if( isEven( x ) then 'even else 'odd )
) ; procedure
I assumed that isEven and isOdd are only accessible inside of trParity. However, if I go to the CIW after loading that procedure, I can call isOdd and isEven -- i.e. it seems those functions are not local to trParity. I was hoping to use local functions in some of my own custom procedures, but this same problem comes up. Am I missing something?
Thanks,
Mark
Append data to file
Hello,
I am invoking a Perl program test.pl in Skill script and I am trying to append data to a file by using following print statements in skill and perl. Print statements from the perl.pl are not written to "out" file.
Can you please help me to determine where I am wrong with the below syntax. Thank you!
out = outfile("./out")
poport = out
printf("PASS\n")
printf("FAIL\n")
system("perl test.pl >> out")
suppressing "function redefined" output text
I have a procedure that defines a few procedures inside of it (even though I just learned there is no such thing as local functions in SKILL). Everything works fine until I call this procedure from a pcDefinePCell script. I get a message that the pcell generated information, and I can view the information in a temporary file. When I view the file, it just contains the list of functions that were redefined. Is there a way to suppress this output? It causes issues e.g. when you go to compile pcells (flashing yellow x because it interprets it as a pcell eval fail) and stream them out to gds (streamout fails because it thinkgs the pcell eval failed).
Thanks,
Mark
Launching PVS LVS Debugging Environment from UNIX
Hi,
I want to launch PVS LVS DEBUGGING ENVIRONMENT from UNIX Shell. I explored on some commands Which can be used to do this. I came across lvsbrowser() UNIX command. I ran this command, Debugging Environment is popping up but the errors are not highlighted in the Layout Window. Can anyone help me in resolving this problem?
Thanks and Regards,
Manikandan Kuzandhaivelu
ADEXL - How to get current test's name (or final PSF dir) at simulation (netlisting) time?
Hello all! I seem unable to find a way of getting the name of the current test at simulation time. My final objective is to determine the *exact* PSF directory of every montecarlo point in a multi-test ADE-XL run, and I need this information during nestlisting time to tell a testbench module (written in verilog-a) where to write its output.
In ADE-L I can get away with "asiGetPsfDir(asiGetCurrentSession())", but in ADE-XL this doesn't work, as it returns not the final PSF directory of the current test/point being run, but some temporary directory like:
"[...]/[lib_name]/[cell_name]/adexl/results/data/.tmpADEDir_[username]/[test_name]/simulation/[cell_name]/spectre/schematic/psf"
while I can see the final PSF data is being written to a different location:
"[..]/[lib_name]/[cell_name]/adexl/results/data/Interactive.XXX/1/[test_name]/psf"
Thus, the output of my verilog-a module ends up being writen to the temp directory and gets overwritten and lost when I run several tests/points.
I've tried using "axlGetPointPsfDir()" as it seems to returns the right (final) PSF directory when I call it:
my_adexl_history_entry = axlGetHistoryName(axlGetCurrentHistory(axlGetWindowSession()));
my_test_name = "TT";
axlGetPointPsfDir(axlGetHistoryEntry(axlGetMainSetupDB(xlGetWindowSession()) my_adexl_history_entry) my_test_name)
The problem is that I cannot find a way of determining the test name during simulation time!!! How could I accomplish this?
...or is there maybe an easier way of obtaining the PSF directory of every montecarlo point at simulation time?
Thanks in advance for any help.
Cheers,
Jorge.
Back-annotation of the current flowing through a pin
bindkey definition
Is there a better way of defining a bindkey while in a function or not, so when the bindkey is applied it is more global?
I would rather have a single bindkey definition.
Example:
hiSetBindKey("Layout" "Shift<Btn4Down>" "println(\"Booyaa\")")
hiSetBindKey("Layout" "Shift<Btn4Down> EF" "println(\"Booyaa\")")
Paul
Determine the corner name using a "measurement" function
Hi,
I have a skill script that extracts a number of measurements from an ADEXL results database (post-simulation) and generates a formatted table. When applying this script to a corner simulation, I would like to determine the name of the corner associated with each child of the family so that I can use the corner name as the column header.
I apply each measurement function to the family of results, which returns a srrWave object. What I would like to do is apply a function such as cornerName() which would return a srrWave containing the corner names.
I can determine the corner names from the ADEXL results database, but what I need is a function that behaves just like a normal signal measurement function so that the ordering of the corner names matches that of the other measurements.
Is such a function possible?
Ivars
How to recover a flattened Multipart Path?
Hi,
I created a multipart with some subpaths and subrectangles. And I have save it as template.
Then I select the multipart path and other shapes and "make cell" for them.
After I place a instance of the cell and flatten it, the multipath is gone, all the subpaths and subrectangles become seperate parts.
So, How can I recover the original multipart object?
I tried to create a new multipart and load the saved template, but it has no effect.
Connections between Bulk or gate and source for a PMOS
Hi,
I am new to cadence. I have a doubt. generally in PMOS gate is connected to source. IN my case gate is connected directly to vdd, and the other side of gate is connected to the output. In other words, I do not have free pin to connect to the source. We connect it to reduce body effect. I came to know that we connect to ground in this case.
I am here by sending the schematic. Could you let me know how do I connect to the source for the second transistor p1
Thank you
Regards
Leo