Anyone tried creating automatic substrate ring

Guest
Hi ,
Has anyone tried creating a substrate ring(I mean substrate contact's
for a transistor) automatically.
By the above statement i mean, if you have an instance you click on it
and run a procedure.Then a substrate contact gets created
automatically which fits nicely to the width or length of the
instance...

Currently,with the help of Andrew and other Folks in previous posts, I
have done the following..
I created a substrate contact(using my own template) separately and
then i have the instance..
And I have written a procedure which automatically aligns the two
(instance and the substrate contact,eventually resulting in a
substrate contact that fits the length of the instance boundary)..
I don't know how to create the substrate ring automatically(for
eg.,here we need to enter two points with a mouse to create a
multipart path.Is it possible for specifying a "list"/set of co-
ordinates that we already now and the mPP gets created automatically)
Any comments/help regarding this(I don't need a code ,i just need to
know how to do it or some commands that might be helpful in doing
it)....

Regards,
Lokesh rajendran.
 
Wow people!!! I found what i wanted ...The option that i discussed
above is available in Virtuoso Layout Turbo...
I accidentally passed through the document and found it(Virtuoso
Layout Editor Turbo User Guide).
Cool..However i have to modify the feature in such a way that i need
the mPP on only one edge of the instance instead of enclosing it(i
feel enclosing occupies more space)..

Regards,
Lokesh rajendran.



On Jun 2, 10:37 am, lokeshr...@gmail.com wrote:
Hi ,
Has anyone tried creating a substrate ring(I mean substrate contact's
for a transistor) automatically.
By the above statement i mean, if you have an instance you click on it
and run a procedure.Then a substrate contact gets created
automatically which fits nicely to the width or length of the
instance...

Currently,with the help of Andrew and other Folks in previous posts, I
have done the following..
I created a substrate contact(using my own template) separately and
then i have the instance..
And I have written a procedure which automatically aligns the two
(instance and the substrate contact,eventually resulting in a
substrate contact that fits the length of the instance boundary)..
I don't know how to create the substrate ring automatically(for
eg.,here we need to enter two points with a mouse to create a
multipart path.Is it possible for specifying a "list"/set of co-
ordinates that we already now and the mPP gets created automatically)
Any comments/help regarding this(I don't need a code ,i just need to
know how to do it or some commands that might be helpful in doing
it)....

Regards,
Lokesh rajendran.
 
Hey i would highly appreciate if some people experienced( in the above
case),comments on it.
Regards,
Lokesh rajendran.

On Jun 2, 3:56 pm, lokeshr...@gmail.com wrote:
Wow people!!! I found what i wanted ...The option that i discussed
above is available in Virtuoso Layout Turbo...
I accidentally passed through the document and found it(Virtuoso
Layout Editor Turbo User Guide).
Cool..However i have to modify the feature in such a way that i need
the mPP on only one edge of the instance instead of enclosing it(i
feel enclosing occupies more space)..

Regards,
Lokesh rajendran.

On Jun 2, 10:37 am, lokeshr...@gmail.com wrote:

Hi ,
Has anyone tried creating a substrate ring(I mean substrate contact's
for a transistor) automatically.
By the above statement i mean, if you have an instance you click on it
and run a procedure.Then a substrate contact gets created
automatically which fits nicely to the width or length of the
instance...

Currently,with the help of Andrew and other Folks in previous posts, I
have done the following..
I created a substrate contact(using my own template) separately and
then i have the instance..
And I have written a procedure which automatically aligns the two
(instance and the substrate contact,eventually resulting in a
substrate contact that fits the length of the instance boundary)..
I don't know how to create the substrate ring automatically(for
eg.,here we need to enter two points with a mouse to create a
multipart path.Is it possible for specifying a "list"/set of co-
ordinates that we already now and the mPP gets created automatically)
Any comments/help regarding this(I don't need a code ,i just need to
know how to do it or some commands that might be helpful in doing
it)....

Regards,
Lokesh rajendran.
 
In VXL mode you can use the Create Gaurdring command from the Create
pulldown. On the GUI you specify the MPP you want and the spacing
around the selected component(s).

It works good.

Tim
 
On Jun 2, 10:06 pm, Tim <TimR...@gmail.com> wrote:
In VXL mode you can use the Create Gaurdring command from the Create
pulldown. On the GUI you specify the MPP you want and the spacing
around the selected component(s).

It works good.

Tim
Hi Tim,
Thanks for your reply.
But I'm not looking for any GUI mode for creation of guard ring.I'm
just trying to do it in skill.(In my second post I have mentioned
about the GUI mode of creation of guard ring...)
Hi...Andrew and Riad,
I would highly appreciate your comments for this post..
Regards,
Lokesh rajendran.
 
lokeshraje@gmail.com wrote, on 06/04/09 08:11:
On Jun 2, 10:06 pm, Tim <TimR...@gmail.com> wrote:
In VXL mode you can use the Create Gaurdring command from the Create
pulldown. On the GUI you specify the MPP you want and the spacing
around the selected component(s).

It works good.

Tim

Hi Tim,
Thanks for your reply.
But I'm not looking for any GUI mode for creation of guard ring.I'm
just trying to do it in skill.(In my second post I have mentioned
about the GUI mode of creation of guard ring...)
Hi...Andrew and Riad,
I would highly appreciate your comments for this post..
Regards,
Lokesh rajendran.
You could use rodCreatePath() - you'd need to determine where you want to put
the ring though.

Also, if you have an existing MPP template for the guard ring, you could use my
function CCSdrawMPPUsingTemplate from sourcelink.cadence.com solution number
11323850 . You'd still need to figure out the location for the guard ring though.

Regards,

Andrew.
 
Hi andrew,
could you please post the code here.(I dont have an access to
sourcelink..since i dont have any corporate mail id)
Thanks and regards,
Lokesh



On Jun 8, 7:18 pm, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
lokeshr...@gmail.com wrote, on 06/04/09 08:11:



On Jun 2, 10:06 pm, Tim <TimR...@gmail.com> wrote:
In VXL mode you can use the Create Gaurdring command from the Create
pulldown. On the GUI you specify the MPP you want and the spacing
around the selected component(s).

It works good.

Tim

Hi Tim,
Thanks for your reply.
But I'm not looking for any GUI mode for creation of guard ring.I'm
just trying to do it in skill.(In my second post I have mentioned
about the GUI mode of creation of guard ring...)
Hi...Andrew and Riad,
I would highly appreciate your comments for this post..
Regards,
Lokesh rajendran.

You could use rodCreatePath() - you'd need to determine where you want to put
the ring though.

Also, if you have an existing MPP template for the guard ring, you could use my
function CCSdrawMPPUsingTemplate from sourcelink.cadence.com solution number
11323850 . You'd still need to figure out the location for the guard ring though.

Regards,

Andrew.
 
noreply wrote, on 06/11/09 09:28:
Hi andrew,
could you please post the code here.(I dont have an access to
sourcelink..since i dont have any corporate mail id)
Thanks and regards,
Lokesh
Here it is:


/* CCSdrawMPPUsingTemplate.ils

Language SKILL
Date Mar 30, 2007
SKILL Lint 100%

Draw a multipart path given a template. For example:

CCSdrawMPPUsingTemplate("mytemplate" ?cvId cvId
?pts list(0:0 10:0 10:10)
)

This code uses SKILL++ semantics, so the file suffix ".ils" must
be retained.

As the code is SKILL++, in order to get 100% use:
skIgnoreMessage('STRICT)
and then "draw", "rod" and "CCS" as package prefixes

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

SCCS Info: @(#) CCSdrawMPPUsingTemplate.ils 03/30/07.13:40:48 1.1

*/
/*******************************************************************************
* DISCLAIMER: The following code is provided for Cadence customers to use at *
* their own risk. The code may require modification to satisfy the *
* requirements of any user. The code and any modifications to the code may *
* not be compatible with current or future versions of Cadence products. *
* THE CODE IS PROVIDED "AS IS" AND WITH NO WARRANTIES, INCLUDING WITHOUT *
* LIMITATION ANY EXPRESS WARRANTIES OR IMPLIED WARRANTIES OF MERCHANTABILITY *
* OR FITNESS FOR A PARTICULAR USE. *
*******************************************************************************/

(define CCSdrawMPPUsingTemplate nil)

(let (templateMapping)
;----------------------------------------------------------------------
; Define the MPP position to keyword mapping data
;----------------------------------------------------------------------
(setq templateMapping (makeTable 'templateMapping nil))
(setarray templateMapping
'main
'(?layer ?width ?choppable ?endType ?beginExt ?endExt
?justification ?offset connectivity)
)
(setarray templateMapping
'offset
'(?layer ?width ?choppable ?sep ?justification ?beginOffset
?endOffset connectivity)
)
(setarray templateMapping
'connectivity
'(?termIOType ?pin ?pinAccessDir ?pinLabel ?pinLabelHeight
?pinLabelLayer ?pinLabelJust ?pinLabelFont
?pinLabelDrafting ?pinLabelOrient
?pinLabelRefHandle ?pinLabelOffsetPoint)
)
(setarray templateMapping
'enclosure
'(?layer ?enclosure ?choppable ?beginOffset ?endOffset
connectivity)
)
(setarray templateMapping
'subrect
'(?layer ?width ?length ?choppable ?sep ?justification ?space
?beginOffset ?endOffset ?gap connectivity
?beginSegOffset ?endSegOffset ?diagonal)
)

/***************************************************************
* *
* (mapUsingTemplate lst templateList) *
* *
* PRIVATE function to map a positional list to a list of *
* keyword arguments - given the list of values and the *
* list of keywords. The keyword list can also contain *
* references to other template maps (e.g. connectivity) *
* *
***************************************************************/
(defun mapUsingTemplate (lst templateList)
(let (subTemplate)
(foreach mapcan (item keyArg) lst templateList
(setq subTemplate (arrayref templateMapping keyArg))
;---------------------------------------------------------
; If there's a sub template (e.g. connectivity) map over
; that recursively, otherwise return the value with the
; keyword argument
;---------------------------------------------------------
(if subTemplate
(mapUsingTemplate item subTemplate)
(list keyArg item)
)
)
)
)

/***************************************************************
* *
* (templateToArgs template) *
* *
* PRIVATE function to map a complete MPP template to *
* the corresponding argument list for (rodCreatePath). *
* *
***************************************************************/
(defun templateToArgs (template)
(let (templateList)
(foreach mapcan (entry templateMap)
template '(main (?offsetSubPath offset)
(?encSubPath enclosure)
(?subRect subrect))
(if (listp templateMap)
;-------------------------------------------------------
; lists indicate that there is a list of lists to be mapped
;-------------------------------------------------------
(progn
(setq templateList
(arrayref templateMapping (cadr templateMap)))
(list
(car templateMap)
(foreach mapcar subEntry entry
(mapUsingTemplate subEntry templateList))
)
)
;-------------------------------------------------------
; other entries indicate that there is a single list
;-------------------------------------------------------
(progn
(setq templateList
(arrayref templateMapping templateMap))
(mapUsingTemplate entry templateList)
)
)
)
)
)

/*********************************************************************
* *
* (drawMPPUsingTemplate templateName @key (cvId (geGetEditCellView)) *
* @rest args "tg") *
* *
* PUBLIC function (exported as CCSdrawMPPUsingTemplate) to *
* draw a multi-part path using a named template. Need to *
* provide ?cvId and ?pts arguments in general *
* *
*********************************************************************/
(defun drawMPPUsingTemplate (templateName @key (cvId (geGetEditCellView))
@rest args "tg")
(let (tfId template mappedTemplate)
(setq tfId (techGetTechFile cvId))
(setq template (techGetMPPTemplateByName tfId templateName))
(if template
(progn
(setq mappedTemplate (templateToArgs template))
(apply rodCreatePath
`(
?cvId ,cvId
,@args
,@mappedTemplate
))
)
(error "MPP template %s cannot be found in technology library %s"
templateName (getSGq tfId libName))
)
)
)

;----------------------------------------------------------------------
; Export the one public function
;----------------------------------------------------------------------
(setq CCSdrawMPPUsingTemplate drawMPPUsingTemplate)
)
 

Welcome to EDABoard.com

Sponsor

Back
Top