EDAboard.com | EDAboard.eu | EDAboard.de | EDAboard.co.uk | RTV forum PL | NewsGroups PL

select via array

elektroda.net NewsGroups Forum Index - Cadence - select via array

rick
Guest

Thu Jan 28, 2010 1:39 am   



I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation. The search that works is for via by name which
wont allow me to select specific
configurations. Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Andrew Beckett
Guest

Wed Feb 03, 2010 8:55 am   



rick wrote, on 01/27/10 22:39:
Quote:
I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation. The search that works is for via by name which
wont allow me to select specific
configurations. Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

rick
Guest

Wed Feb 03, 2010 6:52 pm   



On Feb 2, 10:55 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
Quote:
rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation.   The search that works is for via by name which
wont allow me to select specific
configurations.   Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

I-F AB
Guest

Fri Feb 05, 2010 4:30 am   



On Feb 3, 11:52 pm, rick <ej...@pacbell.net> wrote:
Quote:
On Feb 2, 10:55 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:



rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation.   The search that works is for via by name which
wont allow me to select specific
configurations.   Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help..

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

Hi,

I've got a code for ICFB5.141 to select only vias in the layout top
cell:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cvID = hiGetCurrentWindow()~>cellView
tfID = techGetTechFile(cvID)
CutDevs = techGetDeviceInClass(tfID "syContact"
"symbolic") /*get list of contacts from techfile*/

SEL list() /
*initialize*/
foreach( INST
cvID~>instances /
*get list of instances*/
when( member(INST~>cellName
CutDevs) /*check which are
vias*/
SEL = cons( INST SEL )
) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This code is quite laborious at it checks each instance in the layout.
Mind you, the techfile has to have definition of symContactDevice() to
work and the vias have to be those created using "Create > contact"
command (or the 'o' default Virtuoso bindkey).

Now, the next step is to differentiate between which vias have column/
row properties greater than a certain value e.g. row > 4 or column >
4.
I'll get to that part in a while since the only way I can see is by
accessing "INST ~> prop ~> value" and "INST ~> prop ~> name"
which seems messy. I'll get to this later.

Anyone got any other method?

Best regards,
I-FAB

I-F AB
Guest

Fri Feb 05, 2010 11:28 am   



On Feb 5, 10:14 am, I-F AB <cop0...@gmail.com> wrote:
Quote:
On Feb 3, 11:52 pm, rick <ej...@pacbell.net> wrote:



On Feb 2, 10:55 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:

rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation.   The search that works is for via by name which
wont allow me to select specific
configurations.   Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

Hi,

I've got a code for ICFB5.141 to select only vias in the layout top
cell:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cvID = hiGetCurrentWindow()~>cellView
tfID = techGetTechFile(cvID)
CutDevs = techGetDeviceInClass(tfID "syContact"
"symbolic")                     /*get list of contacts from techfile*/

SEL > list()                                                                                               /
*initialize*/
foreach( INST
cvID~>instances                                                                 /
*get list of instances*/
   when( member(INST~>cellName
CutDevs)                                             /*check which are
vias*/
        SEL = cons( INST SEL )
   ) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This code is quite laborious at it checks each instance in the layout.
Mind you, the techfile has to have definition of symContactDevice() to
work and the vias have to be those created using "Create > contact"
command (or the 'o' default Virtuoso bindkey).

Now, the next step is to differentiate between which vias have column/
row properties greater than a certain value e.g. row > 4 or column
4.
I'll get to that part in a while since the only way I can see is by
accessing   "INST ~> prop ~> value"  and  "INST ~> prop ~> name"
which seems  messy. I'll get to this later.

Anyone got any other method?

Best regards,
I-FAB


OK, the next half of the code is as follows:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RowCol_FLAG = 4
SEL_2 = list()
foreach( INST SEL
CHECK_CR = nil
when( member("row" INST~>prop~>name)
RowPos = length(INST~>prop) - length(member("row"
INST~>prop~>name))
RowVal = nth(RowPos INST~>prop~>value)
when( RowVal >= RowCol_FLAG
CHECK_CR = 1
) ;when
) ;when
when( member("column" INST~>prop~>name) && !CHECK_CR
ColPos = length(INST~>prop) - length(member("column"
INST~>prop~>name))
ColVal = nth(ColPos INST~>prop~>value)
when( ColVal >= RowCol_FLAG
CHECK_CR = 1
) ;when
) ;when
when(CHECK_CR SEL_2 = cons( INST SEL_2) ) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Pretty messy, huh?
But that's what I have at the moment.
For the list of vias that was targeted, print variable SEL_2.
Since my comments aren't put in properly, I'll explain here.

RowCol_FLAG :- minimum no. of rows/columns accepted to select
CHECK_CR :- marks if the current via needs to be selected or not
RowPos/ColPos :- since position of properties "row" & "column" vary in
the 'INST~>prop~>name' list, a marker is needed so that the value
from 'INST~>prop~>value' is according to 'INST~>prop~>name'.
RowVal/ColVal :- value for property "row" & "column" respectively

Best regards,
I-FAB

rick
Guest

Mon Feb 08, 2010 7:11 pm   



On Feb 5, 12:28 am, I-F AB <cop0...@gmail.com> wrote:
Quote:
On Feb 5, 10:14 am, I-F AB <cop0...@gmail.com> wrote:



On Feb 3, 11:52 pm, rick <ej...@pacbell.net> wrote:

On Feb 2, 10:55 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:

rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation.   The search that works is for via by name which
wont allow me to select specific
configurations.   Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

Hi,

I've got a code for ICFB5.141 to select only vias in the layout top
cell:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cvID = hiGetCurrentWindow()~>cellView
tfID = techGetTechFile(cvID)
CutDevs = techGetDeviceInClass(tfID "syContact"
"symbolic")                     /*get list of contacts from techfile*/

SEL > > list()                                                                                               /
*initialize*/
foreach( INST
cvID~>instances                                                                 /
*get list of instances*/
   when( member(INST~>cellName
CutDevs)                                             /*check which are
vias*/
        SEL = cons( INST SEL )
   ) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This code is quite laborious at it checks each instance in the layout.
Mind you, the techfile has to have definition of symContactDevice() to
work and the vias have to be those created using "Create > contact"
command (or the 'o' default Virtuoso bindkey).

Now, the next step is to differentiate between which vias have column/
row properties greater than a certain value e.g. row > 4 or column
4.
I'll get to that part in a while since the only way I can see is by
accessing   "INST ~> prop ~> value"  and  "INST ~> prop ~> name"
which seems  messy. I'll get to this later.

Anyone got any other method?

Best regards,
I-FAB

OK, the next half of the code is as follows:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RowCol_FLAG = 4
SEL_2 = list()
foreach( INST SEL
   CHECK_CR = nil
   when( member("row" INST~>prop~>name)
     RowPos = length(INST~>prop) - length(member("row"
INST~>prop~>name))
     RowVal = nth(RowPos INST~>prop~>value)
     when( RowVal >= RowCol_FLAG
        CHECK_CR = 1
     ) ;when
   ) ;when
   when( member("column" INST~>prop~>name) && !CHECK_CR
     ColPos = length(INST~>prop) - length(member("column"
INST~>prop~>name))
     ColVal = nth(ColPos INST~>prop~>value)
     when( ColVal >= RowCol_FLAG
        CHECK_CR = 1
     ) ;when
   ) ;when
   when(CHECK_CR   SEL_2 = cons( INST SEL_2)   ) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Pretty messy, huh?
But that's what I have at the moment.
For the list of vias that was targeted, print variable SEL_2.
Since my comments aren't put in properly, I'll explain here.

RowCol_FLAG   :- minimum no. of rows/columns accepted to select
CHECK_CR       :- marks if the current via needs to be selected or not
RowPos/ColPos :- since position of properties "row" & "column" vary in
the  'INST~>prop~>name' list, a marker is needed so that the value
from 'INST~>prop~>value' is according to 'INST~>prop~>name'.
RowVal/ColVal   :- value for property "row" & "column" respectively

Best regards,
I-FAB

WOW!!!! can I just append the top half with the second half?

Thanks for all of your effort!!!!

Rick

I-F AB
Guest

Tue Feb 09, 2010 7:09 am   



On Feb 9, 12:11 am, rick <ej...@pacbell.net> wrote:
Quote:
On Feb 5, 12:28 am, I-F AB <cop0...@gmail.com> wrote:



On Feb 5, 10:14 am, I-F AB <cop0...@gmail.com> wrote:

On Feb 3, 11:52 pm, rick <ej...@pacbell.net> wrote:

On Feb 2, 10:55 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:

rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation.   The search that works is for via by name which
wont allow me to select specific
configurations.   Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

Hi,

I've got a code for ICFB5.141 to select only vias in the layout top
cell:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cvID = hiGetCurrentWindow()~>cellView
tfID = techGetTechFile(cvID)
CutDevs = techGetDeviceInClass(tfID "syContact"
"symbolic")                     /*get list of contacts from techfile*/

SEL > > > list()                                                                                               /
*initialize*/
foreach( INST
cvID~>instances                                                                 /
*get list of instances*/
   when( member(INST~>cellName
CutDevs)                                             /*check which are
vias*/
        SEL = cons( INST SEL )
   ) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This code is quite laborious at it checks each instance in the layout..
Mind you, the techfile has to have definition of symContactDevice() to
work and the vias have to be those created using "Create > contact"
command (or the 'o' default Virtuoso bindkey).

Now, the next step is to differentiate between which vias have column/
row properties greater than a certain value e.g. row > 4 or column
4.
I'll get to that part in a while since the only way I can see is by
accessing   "INST ~> prop ~> value"  and  "INST ~> prop ~> name"
which seems  messy. I'll get to this later.

Anyone got any other method?

Best regards,
I-FAB

OK, the next half of the code is as follows:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RowCol_FLAG = 4
SEL_2 = list()
foreach( INST SEL
   CHECK_CR = nil
   when( member("row" INST~>prop~>name)
     RowPos = length(INST~>prop) - length(member("row"
INST~>prop~>name))
     RowVal = nth(RowPos INST~>prop~>value)
     when( RowVal >= RowCol_FLAG
        CHECK_CR = 1
     ) ;when
   ) ;when
   when( member("column" INST~>prop~>name) && !CHECK_CR
     ColPos = length(INST~>prop) - length(member("column"
INST~>prop~>name))
     ColVal = nth(ColPos INST~>prop~>value)
     when( ColVal >= RowCol_FLAG
        CHECK_CR = 1
     ) ;when
   ) ;when
   when(CHECK_CR   SEL_2 = cons( INST SEL_2)   ) ;when
) ;foreach
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Pretty messy, huh?
But that's what I have at the moment.
For the list of vias that was targeted, print variable SEL_2.
Since my comments aren't put in properly, I'll explain here.

RowCol_FLAG   :- minimum no. of rows/columns accepted to select
CHECK_CR       :- marks if the current via needs to be selected or not
RowPos/ColPos :- since position of properties "row" & "column" vary in
the  'INST~>prop~>name' list, a marker is needed so that the value
from 'INST~>prop~>value' is according to 'INST~>prop~>name'.
RowVal/ColVal   :- value for property "row" & "column" respectively

Best regards,
I-FAB

WOW!!!!   can I just append the top half with the second half?

Thanks for all of your effort!!!!

Rick

Hi,

The bottom code is a continuation of the top-half, so you can just
append them together but you have to try it first to see if it works
without errors.
I'm trying to make the code technology independent but this is the
most I can do for now.

Best regards,
I-FAB

Andrew Beckett
Guest

Tue Feb 09, 2010 1:18 pm   



rick wrote, on 02/03/10 15:52:
Quote:
On Feb 2, 10:55 pm, Andrew Beckett<andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:
rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation. The search that works is for via by name which
wont allow me to select specific
configurations. Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

I think this will do what you want. Apologies if it got line wrapped

/* abFindContacts.il

Author A.D.Beckett
Group Custom IC (UK), Cadence Design Systems Ltd.
Language SKILL
Date Feb 09, 2010
Modified
By

Written for IC5141. Simple function to search
for contacts with a particular configuration.

abFindContacts(?row 2 ?column 3)

abFindContacts(?cellName "M1_M2" ?column 4)

Can specify row, column, cellName - or any combination.

Could select them by doing:

foreach(fig abFindContacts(?row 2 ?column 2) geSelectFig(fig))

***************************************************

SCCS Info: @(#) abFindContacts.il 02/09/10.11:09:09 1.1

*/

procedure(abFindContacts(@key (cellView geGetEditCellView()) row column cellName)
setof(inst cellView~>instances
leIsContact(inst) &&
(!row || (inst~>row || inst~>master~>superMaster~>parameters~>row)==row) &&
(!column || (inst~>column ||
inst~>master~>superMaster~>parameters~>column)==column) &&
(!cellName || inst~>cellName==cellName)
)
)

I-F AB
Guest

Wed Feb 10, 2010 4:22 am   



On Feb 9, 7:18 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
Quote:
rick wrote, on 02/03/10 15:52:



On Feb 2, 10:55 pm, Andrew Beckett<andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:
rick wrote, on 01/27/10 22:39:

I need select via arrays of different column/rows so I can change the
spacing and count due to a wide
metal rule violation.   The search that works is for via by name which
wont allow me to select specific
configurations.   Does anyone have a skill routine or something so I
can selective select the arrays?

Thanks

Rick

Rick,

Which version are you using? vias are represented very differently in IC5141 and
IC61X, so it's important to know that before anyone may be able to help.

Regards,

Andrew.

HI Andrew - didnt know that.....Im still using IC51

Rick

I think this will do what you want. Apologies if it got line wrapped

/* abFindContacts.il

Author     A.D.Beckett
Group      Custom IC (UK), Cadence Design Systems Ltd.
Language   SKILL
Date       Feb 09, 2010
Modified
By

Written for IC5141. Simple function to search
for contacts with a particular configuration.

abFindContacts(?row 2 ?column 3)

abFindContacts(?cellName "M1_M2" ?column 4)

Can specify row, column, cellName - or any combination.

Could select them by doing:

foreach(fig abFindContacts(?row 2 ?column 2) geSelectFig(fig))

***************************************************

SCCS Info: @(#) abFindContacts.il 02/09/10.11:09:09 1.1

*/

procedure(abFindContacts(@key (cellView geGetEditCellView()) row column cellName)
     setof(inst cellView~>instances
        leIsContact(inst) &&
        (!row || (inst~>row || inst~>master~>superMaster~>parameters~>row)==row) &&
        (!column || (inst~>column ||
inst~>master~>superMaster~>parameters~>column)==column) &&
        (!cellName || inst~>cellName==cellName)
     )
)

This is great!
I wasn't aware of "leIsContact" - my code footprints can definitely be
cut in half (memory & time)!
:-D

Best Regards,
I-FAB

elektroda.net NewsGroups Forum Index - Cadence - select via array

Arabic versionBulgarian versionCatalan versionCzech versionDanish versionGerman versionGreek versionEnglish versionSpanish versionFinnish versionFrench versionHindi versionCroatian versionIndonesian versionItalian versionHebrew versionJapanese versionKorean versionLithuanian versionLatvian versionDutch versionNorwegian versionPolish versionPortuguese versionRomanian versionRussian versionSlovak versionSlovenian versionSerbian versionSwedish versionTagalog versionUkrainian versionVietnamese versionChinese version
RTV map EDAboard.com map News map EDAboard.eu map EDAboard.de map EDAboard.co.uk map Opony