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

What is default port order, and how to create it?

$
0
0

Hi,

I am little bit confused about portorder and termorder properties.

I have a library in which some of the cells have a mismatch between pin names/pin order in different views. I am trying to write a script that will fix port order where it possible and gives list of cells for which port order/port names should be changed manually.

The problems are:

1. According to Article Number:20302001 almGetTerminalList can be used to check CDF termOrder. But I am getting different port orders from CDF and from almGetTerminalList (see screenshot)

2. When I am using artGenerateHierSymbolCDF to generate CDF I am assuming it will create default termOrder. According to the same article, schGetPinOrder should return default portorder. But port order returned by this function different from termOrder created by artGenerateHierSymbolCDF (see screenshot).

So, what is default portorder/termOrder? Is default portorder same as default termOrder? What is a right function to generate default portorder/termOrder?

If schematic and symbol views don't have portorder property, will termOrder from CDF used, and if yes why almGetTerminalList gives me different port order?

Best regards,

Alex.


Determine Cellview used in Test using SKILL in ADE-XL

$
0
0

Hello,

I am running multiple tests on ADE-XL. Each test runs a different cellview (schematic, config, etc.). Is it possible to determine which cellview is my test running (using SKILL in CIW)?

Example:

car(car(resDB->points())->tests())->cellview

Also is saving a config cellview as a table possible from CIW?

Any hints would be highly appreciated.

Best regards,

Karam

How can I get the RGB values from a color name?

$
0
0

Hi,

I'm using drGetPacket to get the fill color name.

I would like to convert this name to the appropriate RGB values.

How could I do this?

If this is not possible, how could I get a list of all possible fill color names?

With that, I could write my own function.

Thanks

Decision-making upon window's closing action

$
0
0

Dear all,

I have created a SKILL form using (hiCreateAppForm) and attach/display it in a window using (hiCreateWindow) and (hiDisplayWindow). It was implemented in that way mainly because of some toolbar items I need to place on the window.

What I am trying to figure out is how to properly implement the scenario of closing the window via the 'X' button. Ideally, I would like a dialog-box(Yes/No/Cancel) to pop-up and act accordingly based on user's selection. In case of a 'No/Cancel', the window should remain open (as in ADE-L, ADE-XL etc.).

I've read carefully the documentation, searched the forum threads but didn't manage to find a proper way to implement this. I also did some desperate trials using (hiRegCloseProc) even though the documentation states that it shall be used strictly for clean-up and that a C closing procedure is called before any SKILL closing procedure.

Is what i'm trying to achieve simply a dead-end?

Many thanks,

Andreas

VISIO to layout

$
0
0

Hi,

Is there any tool inside or outside Cadence virtuoso to import and export VISIO drawings?

VISIO has an option to export as SVG. Any help here?

I would like to convert VISIO drawings in to floorplan.

-Ramakrishnan

primary file for design is invalid

$
0
0

Hello

I am using Ic 616 along with calibre for physical verification. 

I have a file that has a custom made layout and am trying to instantiate it in another layout out file (create multiple instances of that cell). When I run DRC, the CIW shows the following message:

ERROR (XSTRM-341): The translation stopped for the following reason: Cannot open design RRAMgen/1T1R_LEAF_tune/layout: "Open of RRAMgen/1T1R_LEAF_tune/layout failed - primary file for design is invalid.". Ensure that the specified cellview exists on disk and that you have permission to open it, then run the translation again.

I do not know though if this is a calibre related issue or I can fix it through SKILL. A snippet from my skill is below:


procedure(LEAF(m,cvID)

;cvID=dbOpenCellViewByType("RRAMgen" "1T1R_LEAF_tune" "layout" "maskLayout" "w")
;dbCreateRect(cvID list("RX" "drawing") list(0:0.36 0.38:0.6))
;dbCreateRect(cvID list("M1" "drawing") list(0:0.36 0.12:0.6))
;dbCreateRect(cvID list("M2" "drawing") list(0:0.36 0.12:0.6))
;dbCreateRect(cvID list("V1" "drawing") list(0.01:0.43 0.11:0.53))
;dbCreateRect(cvID list("CA" "drawing") list(0.015:0.435 0.105:0.525))
;dbCreateRect(cvID list("M1" "drawing") list(0.26:0.36 0.38:0.6))
;dbCreateRect(cvID list("M2" "drawing") list(0.26:0.056 0.38:0.6))
;dbCreateRect(cvID list("V1" "drawing") list(0.27:0.43 0.37:0.53))
;dbCreateRect(cvID list("CA" "drawing") list(0.275:0.435 0.365:0.525))
;dbCreateRect(cvID list("PC" "drawing") list(0.16:0.111 0.22:0.875))

for(i 1 m

dbCreateRect(cvID list("RX" "drawing") list(0:0.36+(i-1)*0.24 0.38:0.6+(i-1)*0.24))
dbCreateRect(cvID list("M1" "drawing") list(0:0.36+(i-1)*0.24 0.12:0.6+(i-1)*0.24))
dbCreateRect(cvID list("M2" "drawing") list(0:0.36+(i-1)*0.24 0.12:0.6+(i-1)*0.24))
dbCreateRect(cvID list("V1" "drawing") list(0.01:0.43+(i-1)*0.24 0.11:0.53+(i-1)*0.24))
dbCreateRect(cvID list("CA" "drawing") list(0.015:0.435+(i-1)*0.24 0.105:0.525+(i-1)*0.24))
dbCreateRect(cvID list("M1" "drawing") list(0.26:0.36+(i-1)*0.24 0.38:0.6+(i-1)*0.24))
dbCreateRect(cvID list("M2" "drawing") list(0.26:0.056+(i-1)*0.24 0.38:0.6+(i-1)*0.24))
dbCreateRect(cvID list("V1" "drawing") list(0.27:0.43+(i-1)*0.24 0.37:0.53+(i-1)*0.24))
dbCreateRect(cvID list("CA" "drawing") list(0.275:0.435+(i-1)*0.24 0.365:0.525+(i-1)*0.24))
dbCreateRect(cvID list("PC" "drawing") list(0.16:0.111+(i-1)*0.24 0.22:0.905+(i-1)*0.24))
)

dbCreateRect(cvID list("M1" "drawing") list(0:0.6+(m-1)*0.24 0.12:0.82+(m-1)*0.24))
dbCreateRect(cvID list("M2" "drawing") list(0:0.6+(m-1)*0.24 0.12:0.82+(m-1)*0.24))
dbCreateRect(cvID list("V1" "drawing") list(0.01:0.709+(m-1)*0.24 0.11:0.809+(m-1)*0.24))
dbCreateRect(cvID list("PC" "drawing") list(0.08:0.905+(m-1)*0.24 0.22:1.045+(m-1)*0.24))
dbCreateRect(cvID list("M1" "drawing") list(0.07:0.91+(m-1)*0.24 0.23:1.040+(m-1)*0.24))
dbCreateRect(cvID list("V1" "drawing") list(0.105:0.93+(m-1)*0.24 0.195:1.0195+(m-1)*0.24))


dbCreateRect(cvID list("RR" "drawing") list(0.17:0.0 0.47:0.3))
dbCreateRect(cvID list("VRB" "drawing") list(0.27:0.1 0.37:0.2))
dbCreateRect(cvID list("VRT" "drawing") list(0.27:0.1 0.37:0.2))
dbCreateRect(cvID list("M1" "drawing") list(0.26:0.069 0.64:0.229))
dbCreateRect(cvID list("V1" "drawing") list(0.53:0.099 0.63:0.199))
dbCreateRect(cvID list("M2" "drawing") list(0.52:0.0 0.64:0.229))
)

procedure(T1Rarray(M,N,m,cvID,cellID)
;cvID=dbOpenCellViewByType("RRAMgen" "1T1R_LEAF_tune" "layout")
;cellID = dbOpenCellViewByType("RRAMgen" "1T1R_array" "layout" "maskLayout" "w")

cell_height = 1.09+(m-1)*0.24
cell_width = 0.74

for(i 1 M
for(j 1 N
dbCreateInst(cellID cvID nil (j-1)*cell_width:(i-1)*cell_height "R0" 1)
)
)

for(i 1 N

dbCreateRect(cellID list("M2" "drawing") list(0.52+(i-1)*cell_width:0.0 0.64+(i-1)*cell_width:0.229+(M-1)*cell_height))

)

for(i 1 M

dbCreateRect(cellID list("M1" "drawing") list(0.0:0.09+0.6+(m-1)*0.24+(i-1)*cell_height 0.12+(N-1)*cell_width:0.09+0.6+(m-1)*0.24+0.13+(i-1)*cell_height))
dbCreateRect(cellID list("M1" "drawing") list(0.07:0.31+0.6+(m-1)*0.24+(i-1)*cell_height 0.23+(N-1)*cell_width:0.31+0.6+(m-1)*0.24+0.13+(i-1)*cell_height))

)

)

m=4
M=2
N=8
;load("/data1/RRAMgen/1T1Rgen.il")
;LEAF(m)
cvID=dbOpenCellViewByType("RRAMgen" "1T1R_LEAF_tune" "layout" "maskLayout" "w")
LEAF(m,cvID)
cellID = dbOpenCellViewByType("RRAMgen" "1T1R_array" "layout" "maskLayout" "w")
T1Rarray(M, N, m, cvID, cellID)

how to test if a table exist or not

$
0
0

Hi,

I'm trying to verify is a table exist, if not the it will create it.

if(tablep(My_table) then
       for( i 2 length(word)/2-1
              My_table[list(nthelem(2 word) nthelem(2*i+1 word))] = nthelem(2*i+2 word)
       )
else
       My_table=makeTable("Table")
)

Message: *Error* eval: unbound variable - My_table

I can use "boundp" to test it but if they have "tablep" function, it should be able to work.

Thanks

how to do a search on the name of the table

$
0
0

Hi,

I created few table with makeTable command. Now, I'm trying to find the table base on the name of the table. I don't have any clue how to get that information. I can use printstruct to get see the table name but I can't store that information to a variable.

MyTable1 = makeTable("Table1")

MyTable2 = makeTable("Table2")

MyTable3 = makeTable("Table3")

how can I do a search by name ("Table1")

If I do printstruct(MyTable1), it show: "structure of type association table (table:Table1):"

but I can't extract that information

Any idea how can I get It.

Thanks for all the suggestion


Change the FetType using skill

$
0
0

Hi, 

I wanted to change the Fet type of a mos instance from egnfet to lvtnfet (or any other type).

Currently I am using this snippet for a cell view with only one instance.

cv=gegetWindowCellView()
x=cv~>instances
schReplaceProperty(list(x)  "fetType"  "lvtnfet")

after executing this snippet 

when I type 
x~>fetType 

it displays "lvtnfet".

But when I generate the CDL, the fetType is still displayed as "egnfet".

I am able to change every other cdf parameter using the above snippet and it is also displayed in CDL correctly except fetType.

Please tell a solution for the problem.

Regards
Utkarsh

skill code to place all layout cells in a Virtuoso lib to top level cell

$
0
0

Hi

I would like to instantiate all layout cells in a lib to newly created top cell and run DRC on all cells at the same time. Each layout cell cannot be overlapped in the top cell.

Does anyone have SKILL code or similar code to achieve this goal ?

Thanks,

ManChak

Toolbar info and syntax

$
0
0

Is it possible to define the comboBox size?

What is the syntax to have a toolbar item grayed out when in read mode?

Paul

Any skill code or Virtuoso command to list all instantiated cells without the specified cellview

$
0
0

Hi

Is there any skill code or Virtuoso command to list all instantiated cells without the specified cellview ? I need to run streamout command in order to find out these instances at this moment.

ERROR (XSTRM-341): The translation stopped for the following reason: Cannot open design 00s_drc_testpt/die_seal_square_3a/layout: "Open of 00s_drc_testpt/die_seal_square_3a/layout failed - cellView for the design was not found.". Ensure that the specified cellview exists on disk and that you have permission to open it, then run the translation again.

Thanks,

ManChak

Any command text command reference out there?

$
0
0

Basically I need to be able to search for a command if I just know a part of it, and I should get the right usage for it.

For example, I don't know the correct usage or the full name of the command that gives "overlaps" between two layers in a given BBOX ..

Skill debugger issue

$
0
0

Hi,

I use Virtuoso  Layout Suite L to layout different kind of component, currently I'm working on new technology and since I start with that techno I met a problem when I use the skill debugger ( ic 06.17.714 ).

Before I could go step by step with skill debugger ( ic  06.17.709 ) but now I can only add some breakpoint, and when I load the skill with some breakpoint,  The breakpoint don't work anywhere only in front of procedure then I would like go step by step Inside my procedure but it doesn't work.

I know it's not due to ic version as I tried with ic 06.17.714 in old technologie/configuration and the skill debugger works.

I'm almost sure it's due my  new configuration set from design kit but I don't know where I must look to check skill debugger parameter ?

and regarding this path what does it mean ==> ~/.cadecnce/skill_dev.il

Tell me if you need more information about my issue.

Thanks

Real-Time Updating View Window

$
0
0

Hi,

While i executed my SKILL function as below:

logFileName=getResultPath(cvId ISSDCONT_en ALL_en "_check.log")
logFilePort = outfile(logFileName "w")

printJobStart_checkSDCont(ISSDCONT_en logFilePort)
close(logFilePort)

winId=view(logFileName nil nil t)

;=============Main Function=============

;=====================================

The first 5 lines of the code is used to prompt user the setting or the status of the checking function, while the main function is the checking function which might take 10 seconds or more.

While the user is waiting the check to be complete, i would like to show the user the status of the checking function which is the first 5 lines of above code.

The view function able to open the view file window, but unfortunately, the view file window did not update the contents of the file immediately.

Rather, the view file window only update the contents of the file after the main function have been completed which is not what i wanted.

Is there anyway to overcome this problem? Or are there any other function which is capable of doing this?

Thanks,

KS Chong


Predefined Ports in Virtuoso

$
0
0

Hello,

i have a question regarding the predefined ports in virtuoso. I noticed that stdout and poport are equal, so what is the difference between stdin and piport?

My guess is that piport is linked to that "what you write in the CIW", whereas stdin is the "default" UNIX stdin !?

If so, is it possible to redirect stdin to piport?

Thanks in advance.

Best regards,

Matthias

Term net name changing for the pins automation using SKILL code

$
0
0

Hello,

I am on Virtuoso IC6.1.7 
I want to change by SKILL code the pins net names for a certain block.

I use in my code something like :

[..]  term->net->name = "new_value" 

and I get an dbSetq error (DB-370034) 

N.B. term~>name I can change with no problem, but it does not help me.

Somehow this property value cannot is read-only. How can it be changed automatically?
Can anyone tell help me on this one?

Thank you,
BR,

Odin

Write Ocean-XL Script using Skill in IC 6.1.4

$
0
0

Hello,

in IC 6.1.7 there is the very useful skill function axlWriteOceanScriptLCV()available. Unfortunately, the project I am currently working on is based on IC 6.1.4 and cannot be upgraded. Is there a workaround for this skill function IC 6.1.4?

Thanks a lot.

Best regards,

Matthias

pin placement script with softMacro

$
0
0

Hi all,

I have a script that does some automatic pin placement for me on very "lowlevel" contraints. It works with XL connectivity if there is a subblock where toplevel pins are bound to.

This works pretty fine and does a great job. Now I would like to do it vice versa. E.g. I have a digital part as "blackbox" with just pins inside. I would like to align those pins to one hierarchy above.

Upfront, I know there is the PinPlacer and the Align commands available, but I do not always get exactly what I want or simply some unexplainable pin placement happens (even though we have VCAD support onsite we did not manage to get it as we want it to be).

My approach so far:

I have changed my subblock (digital part) to a softMacro celltype. Now I see the connectivity one hierarchy above and I can access the pins from analog top level. But how do I access those pins via skill and how do I get the location from toplevel to move the pins inside digital hierarchy to a proper place?

Here is my script I'm using so far (majority is derived from this forum):

procedure(MovePins()
  let((cv term pinFig net instTerm childTerm childPinFig childPinLayer location pinFigLocation transform pinFig)
    cv=geGetEditCellView()
    if(cv~>cellViewType == "maskLayout" then
    selectedElements = flatten(geGetObjectSelectedSet(cv))
      foreach(term selectedElements
        when(term~>pin ;check if element is a pin
      ; iterate over all the pins for this terminal
      pinFig=term~>pin~>fig
      net=term~>net
      ; only do this if there aren't more than one inst term
      instTerm=car(net~>instTerms)
      childTerm=instTerm~>term
      childPinFig=car(instTerm~>term~>pins)~>fig
      childPinLayer=car(instTerm~>term~>pins)~>fig~>layerName
      ; location within the instance master
      location=centerBox(childPinFig~>bBox)
      ; transform to the top level coordinate system
      if( instTerm~>inst~>transform != nil && location != nil then  
            location=dbTransformPoint(location instTerm~>inst~>transform)
            pinFigLocation=centerBox(pinFig~>bBox)
            ; calculate the overall transform to move the pin to the new location
            ;transform=dbConcatTransform(list(-xCoord(pinFigLocation):-yCoord(pinFigLocation) "R0" 1) location)
            transform=dbConcatTransform(list(-xCoord(pinFigLocation):-yCoord(pinFigLocation) "R0" 1) list(xCoord(location):yCoord(location) "R0" 1))

            locationLowerLeft=dbTransformPoint(car(childPinFig~>bBox) instTerm~>inst~>transform)     ;calculate pinsize and transform coordinates
            locationUpperRight=dbTransformPoint(cadr(childPinFig~>bBox) instTerm~>inst~>transform)    ;calculate pinsize and transform coordinates

        dbMoveFig(pinFig cv transform)
            pinFig~>layerName=childPinLayer
        pinFig~>bBox=list(locationLowerLeft locationUpperRight)
      else
            warn("%L is unbound (no connectivity to other cells)\n" term~>pin~>name)
      ) ;** if
        ) ;** when
      ) ;** foreach
    else
      warn("MovePins does only work on layout views of type \"maskLayout\"\n")
    ) ;**ifelse
  ) ;**let
) ;**procedure

;FLATTEN A NESTED LIST
procedure(flatten(numberList)
  foreach(mapcan element numberList
    if( listp( element )
      flatten(copy(element)) ;; then
      ncons(element)
    ) ; if
  ) ; foreach
) ; procedure

Thanks in advance,

Martin

Updating a form in Skill

$
0
0

Hello,

i have a question on how forms are updated in Skill when properties of elements in the form are changed in the background.

Within the following small example a form with a button gets insatiated.

button=
hiCreateButton(
                              ?name 'button
                              ?callback "printf(\"Button pushed\")"
                              ?buttonText "Push"
);hiCreateButton


form=
hiCreateAppForm(
                                ?name 'myform
                                ?fields list(button)
                                 ?formTitle "Simple Form"
);hiCreateAppForm

hiDisplayForm(form)

If i enter the code line form->button->enabled=!form->button->enabled several times in the CIW the button gets enabled/disabled. If I enter the code line button->enabled=!button->enabled nothing happens at all, although the property changes. Is there a way to update the form, if the enable property will be changed using the second way?

Many thanks.

Best regards,

Matthias

Viewing all 5068 articles
Browse latest View live