select via array

R

rick

Guest
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 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.
 
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
 
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
 
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
 
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
 
On Feb 9, 12:11 am, rick <ej...@pacbell.net> wrote:
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
 
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)
)
)
 
On Feb 9, 7:18 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
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
 

Welcome to EDABoard.com

Sponsor

Back
Top