Labels in Virtuoso

T

trisha.woods

Guest
Hi All,
If I have two metal rails (e.g. metal1 and metal2) overlapping
each other. How to create a label on (lets say) metal2? The skill
function dbCreateLabel() does not take "metal layer" (on which the
label is to be created) as an input.

Thanks
Trisha
 
Why does dbCreateLabel did not take the
metal layer ans an input?

dbCreateLabel(
d_cellView
( tx_layer [ t_purpose ] ) <- you can assign any lpp you want to this!
l_point
t_label
t_just
t_orient
t_font
x_height
)

Which layer should be the label layer?
On which layer should the label be created?

Your explanation is a bit spare or I don't understand it!

e.g select the metal2 rail

d_selSet = car( geGetSelSet( ) )
l_lpp = d_selSet~>lpp
n_x = xCoord( upperRight( d_selSet~>bBox ) )*0.5
n_y = yCoord( upperRight( d_selSet~>bBox ) )*0.5

dbCreateLabel(
d_cellView ;; your value
l_lpp
n_x:n_y
t_label ;; your value
t_just ;; your value
t_orient ;; your value
t_font ;; your value
x_height ;; your value
)

Bernd


trisha.woods wrote:
Hi All,
If I have two metal rails (e.g. metal1 and metal2) overlapping
each other. How to create a label on (lets say) metal2? The skill
function dbCreateLabel() does not take "metal layer" (on which the
label is to be created) as an input.

Thanks
Trisha
 
But this creates the label string with l_lpp instead of "text". I think
the label string should be in "text", but the label itself should be
located on the metal-layer. Else the lable may not get extracted.

Let me be more elaborate: I want to create labels on specific metal
layer in the power grid so that I can measure the IR drop at these
points. The power grid is connected to VDD and GND pins. I want these
labels to appear in the extracted RC netlist. At some places the metal2
and metal1 are overlapping so while creating lables I want to make sure
that the labels are on metal1 and metal2.
 
I think
dbGetOverlaps
dbGetTrueOverlaps
might be able to help here.

Create two list one with all metal1 shapes and
one with all metal2 shapes then check the intersection of
the bounding boxes.

I'll post a small example tomorrow, it's getting late here now.

Bernd


trisha.woods wrote:
But this creates the label string with l_lpp instead of "text". I think
the label string should be in "text", but the label itself should be
located on the metal-layer. Else the lable may not get extracted.

Let me be more elaborate: I want to create labels on specific metal
layer in the power grid so that I can measure the IR drop at these
points. The power grid is connected to VDD and GND pins. I want these
labels to appear in the extracted RC netlist. At some places the metal2
and metal1 are overlapping so while creating lables I want to make sure
that the labels are on metal1 and metal2.
 
Sorry small mistake in the last sentence. I want to make sure that the
labels are on metal 1 and not metal2.
 
Some example code as promised, just how it probably could look like!

;; limitation works only for rectangels and 2 point paths

d_cvId = geGetEditCellView( )
l_metal1 = '( "METAL1" "drawing" ) ;; put your metal1 layer here
l_metal2 = '( "METAL2" "drawing" ) ;; put your metal2 layer here
l_labelLayer = '( "text" "drawing" ) ;; put your text layer here

l_metal1Shapes = setof(
shape
d_cvId~>shapes
shape~>lpp == l_metal1 &&
( shape~>objType == "rect" ||
( shape~>objType == "path" &&
shape~>nPoints == 2 ) )
)

l_metal2Shapes = setof(
shape
d_cvId~>shapes
shape~>lpp == l_metal2 &&
( shape~>objType == "rect" ||
( shape~>objType == "path" &&
shape~>nPoints == 2 ) )
)

;; dbLayerAndNot is a 5.1 function in previous versions it was layerAndNot
l_tmpShapes = dbLayerAndNot(
d_cvId
l_labelLayer
l_metal1Shapes
l_metal2Shapes
)

foreach( d_shape l_tmpShapes

n_uRx = xCoord( upperRight( d_shape~>bBox ) )
n_lLx = xCoord( lowerLeft( d_shape~>bBox ) )
n_uRy = yCoord( upperRight( d_shape~>bBox ) )
n_lLy = yCoord( lowerLeft( d_shape~>bBox ) )
n_x = n_lLx + ( ( n_uRx - n_lLx ) * 0.5 )
n_y = n_lLy + ( ( n_uRy - n_lLy ) * 0.5 )
l_point = ( n_x:n_y )

dbCreateLabel(
d_cvId
l_labelLayer
l_point
symbolToString(gensym( "myLabel" ) )
"centerCenter"
"R0"
"roman"
0.5
)

dbDeleteObject( d_shape )
)



Bernd

trisha.woods wrote:
Sorry small mistake in the last sentence. I want to make sure that the
labels are on metal 1 and not metal2.
 
I want to
insert a label so that when I extract the layout I can access that
label and measure voltage or current at that point.
This is really dependant on the tool. Specifically, wether you are using
assura or diva for layout extraction, that will depend on how the rule deck
was written. different strategies I have seen in different kits include

- a label on the metal layer with same purpose (ie M1/dg)
- a label on the metal layer with different purpose (ie M1/net)
- a label on one specific layer with the purpose identifying the metal (ie NET/m1)
- a label on specific layers, one for each metal (ie m1_text, m2_text, etc)

Actually, I have a power grid (layout) that I want to extract and
simulate using spice. I want to measure IR drop at certain strategic
points in the power-grid layout.
You will not be allowed to insert multiple labels on the power grid, because
the whole grid is electrically the same net. Assura/Diva will complain about that.
As Bernd pointed out, you can use voltagestorm for that - I expect that since this
is the purpose of this tool you will find some facilities for that.

Otherwise if you extract the grid into pieces of resistance with assura/diva, the tool
will break the net and assign a generated net name to each piece. It might not be
easy finding out wich of these 1000s of nets is the one corresponding to the "strategic
point" you want to look at.

cheers
stéphane
 
Bernd Fischer > wrote:
Some example code as promised, just how it probably could look like!

;; limitation works only for rectangels and 2 point paths

d_cvId = geGetEditCellView( )
l_metal1 = '( "METAL1" "drawing" ) ;; put your metal1 layer here
l_metal2 = '( "METAL2" "drawing" ) ;; put your metal2 layer here
l_labelLayer = '( "text" "drawing" ) ;; put your text layer here

l_metal1Shapes = setof(
shape
d_cvId~>shapes
shape~>lpp == l_metal1 &&
( shape~>objType == "rect" ||
( shape~>objType == "path" &&
shape~>nPoints == 2 ) )
)

l_metal2Shapes = setof(
shape
d_cvId~>shapes
shape~>lpp == l_metal2 &&
( shape~>objType == "rect" ||
( shape~>objType == "path" &&
shape~>nPoints == 2 ) )
)

;; dbLayerAndNot is a 5.1 function in previous versions it was layerAndNot
l_tmpShapes = dbLayerAndNot(
d_cvId
l_labelLayer
l_metal1Shapes
l_metal2Shapes
)

foreach( d_shape l_tmpShapes

n_uRx = xCoord( upperRight( d_shape~>bBox ) )
n_lLx = xCoord( lowerLeft( d_shape~>bBox ) )
n_uRy = yCoord( upperRight( d_shape~>bBox ) )
n_lLy = yCoord( lowerLeft( d_shape~>bBox ) )
n_x = n_lLx + ( ( n_uRx - n_lLx ) * 0.5 )
n_y = n_lLy + ( ( n_uRy - n_lLy ) * 0.5 )
l_point = ( n_x:n_y )
Hi Bernd,
there is also a centerBox() , if you like.


dbCreateLabel(
d_cvId
l_labelLayer
l_point
symbolToString(gensym( "myLabel" ) )
"centerCenter"
"R0"
"roman"
0.5
)

dbDeleteObject( d_shape )
)



Bernd

trisha.woods wrote:

Sorry small mistake in the last sentence. I want to make sure that the
labels are on metal 1 and not metal2.
 
Note:

You can write code to label multiple conductors.
( many do, but I consider this bad practice in general, but I do have
reasons for wanting it occasionally.)

OR

You can write code to have a specific layer only label another specific
layer.

( I am not a fan of "attaching" a label to a pin/polygon with the origin of
the label outside of the layer. Streaming out & in breaks these! )
Some cadence tools do strange (w.r.t my defn/ above) things with labels
....Cadence assumes the 1st case above only .. ( a real pain that
I usually hack over in each label gui I find ... I repeat ... A real pain
.... )

I prefer to make a kit that had both kinds of labels .

I would use a "text" "label" to label the first one of the conductors it
finds.
(useful for labeling the TOP metal when you don't know what the top is or
when flags can change the top layer for different
process options

I would use a M<x> <label> for a label on the layer M<x> only ( and include
label layers for ALL conductors that are extracted
and possibly all via's too.

Note that Labels on conductors that are not over contacts or devices are
problematic when interfaced with parasitic resistance extraction ...
( I have a solution for that too, but it is even more involved .. )


-- Gerry


"S. Badel" <stephane.badel@REMOVETHISepfl.ch> wrote in message
news:4365dfa1$1@epflnews.epfl.ch...
I want to
insert a label so that when I extract the layout I can access that
label and measure voltage or current at that point.

This is really dependant on the tool. Specifically, wether you are using
assura or diva for layout extraction, that will depend on how the rule
deck
was written. different strategies I have seen in different kits include

- a label on the metal layer with same purpose (ie M1/dg)
- a label on the metal layer with different purpose (ie M1/net)
- a label on one specific layer with the purpose identifying the metal
(ie NET/m1)
- a label on specific layers, one for each metal (ie m1_text, m2_text,
etc)

Actually, I have a power grid (layout) that I want to extract and
simulate using spice. I want to measure IR drop at certain strategic
points in the power-grid layout.

You will not be allowed to insert multiple labels on the power grid,
because
the whole grid is electrically the same net. Assura/Diva will complain
about that.
As Bernd pointed out, you can use voltagestorm for that - I expect that
since this
is the purpose of this tool you will find some facilities for that.

Otherwise if you extract the grid into pieces of resistance with
assura/diva, the tool
will break the net and assign a generated net name to each piece. It might
not be
easy finding out wich of these 1000s of nets is the one corresponding to
the "strategic
point" you want to look at.

cheers
stéphane
 
On Mon, 31 Oct 2005 10:10:57 +0100, "S. Badel"
<stephane.badel@REMOVETHISepfl.ch> wrote:

I want to
insert a label so that when I extract the layout I can access that
label and measure voltage or current at that point.

This is really dependant on the tool. Specifically, wether you are using
assura or diva for layout extraction, that will depend on how the rule deck
was written. different strategies I have seen in different kits include

- a label on the metal layer with same purpose (ie M1/dg)
- a label on the metal layer with different purpose (ie M1/net)
- a label on one specific layer with the purpose identifying the metal (ie NET/m1)
- a label on specific layers, one for each metal (ie m1_text, m2_text, etc)

Actually, I have a power grid (layout) that I want to extract and
simulate using spice. I want to measure IR drop at certain strategic
points in the power-grid layout.

You will not be allowed to insert multiple labels on the power grid, because
the whole grid is electrically the same net. Assura/Diva will complain about that.
As Bernd pointed out, you can use voltagestorm for that - I expect that since this
is the purpose of this tool you will find some facilities for that.

Otherwise if you extract the grid into pieces of resistance with assura/diva, the tool
will break the net and assign a generated net name to each piece. It might not be
easy finding out wich of these 1000s of nets is the one corresponding to the "strategic
point" you want to look at.

cheers
stéphane
I would add a temporary top level pin that is thin and slices across the
conductor at the points you want to measure then do resistance analysis.
Pins are named and always retained as distinct points in the resistor
mesh. This will definitely work in Diva, and I believe it will also work
in Assura-RCX.

Ed "Mr. Diva" Kalenda
Cadence Design Systems

This is just me blathering, not the company, since they don't let talk for them.
 
Hi All,
If I have two metal rails (e.g. metal1 and metal2) overlapping
each other. How to create a label on (lets say) metal2? The skill
function dbCreateLabel() does not take "metal layer" (on which the
label is to be created) as an input.
I might be wrong, but I have this strange feeling that you somehow believe
that the label will be "attached" to one of the metal shapes. I suppose, for
LVS purposes you want to give a name to the net, and you'd like to be able to
choose which shape (MET1 or MET2) the label will "act on", isn't it?

If this is the case, then you're thinking the wrong way. meaning, the label might
get "attached" to any shape which overlaps it's origin point. The choice of which
shape will get the label name depends on the way each tool will interpret this.
Specifically, for LVS, it depends on the rule deck. There will be either an order of
priority, or there will be a different flavor of label (different layers and/or purposes)
that act on different metal layers.

If it's not the case, then simply forget about my answer and kindly accept my apologizes ;)

cheers,

stéphane
 
If it is for LVS it can also depend on the tool. I had a layout where
the pin label was off to the side of the pin and a different metal run
ran over its origin point. Diva LVS was fine but Assura gave me an
error. Of course it could also have been the rule files but I'm not
sure how different they were.

Tim
 
Hi,
Stéphane you are right. I thought that the label is attached to a
particular layer in the layout (in this case metal layer). I want to
insert a label so that when I extract the layout I can access that
label and measure voltage or current at that point.
Actually, I have a power grid (layout) that I want to extract and
simulate using spice. I want to measure IR drop at certain strategic
points in the power-grid layout. I thought that inserting lables at
those points would do the job. How else can I do it ?

Would appreciate your comments.
Thanks
Trisha.
 
This is bit of confusing here.

* For me a label on a shape, is just a label which origin point is on that
shape. That might be enough for some LVS and extraction tools, because
that's the way pins are recognized if you run a LVS on GDSII basis.

* A label which is attached to a shape does not mean that the shape
gets the net information from this label. Attach means that the label
and the shape are physical connected.
E.g. if you use the SKILL command 'leAttachFig', this will
attach a child figure to a parent figure, so that if you move the
parent to a new point the child will follow, but this has nothing
to do with assigning a net to a shape.

* Assign a net to a shape, this is usually done if you create a pin
in the Virtuoso Layout Editor, then you'll have a shape which has
connectivity attributes as pin and net.
Also if the net already exist you can use the menu command
'Connectivity -> Add Shape to Net', to assign that net to one
more shape.

But this all depends on the tools you are using.
You say that your pins on the power grid are VDD and GND,
and they should appear in your extracted netlist, they normally
should do. What a extraction tool is doing, it slices up you
VDD and GND net in pieces of R's so that you have one VDD net, then
a parasitic R, then a VDD subnet, a R and so on. With this you can
simulate your IR drop.
In a normal flow Cadence Spectre + Assura this works, optional
you can use VoltageStorm.

I don't know where your problem exactly is located here and which
tools for simulation and extraction you are using?

Bernd


trisha.woods wrote:
Hi,
Stéphane you are right. I thought that the label is attached to a
particular layer in the layout (in this case metal layer). I want to
insert a label so that when I extract the layout I can access that
label and measure voltage or current at that point.
Actually, I have a power grid (layout) that I want to extract and
simulate using spice. I want to measure IR drop at certain strategic
points in the power-grid layout. I thought that inserting lables at
those points would do the job. How else can I do it ?

Would appreciate your comments.
Thanks
Trisha.
 
Thanks Bernd,
The problem was to somehow get the "points" (labels/pins)
extracted which I can measure signals at. And you have really explained
well how I can do that using pins. Let me try using 'Connectivity ->
Add Shape to Net' and see if this works. I am using Diva to extract and
Spectre to simulate. I am using the divaEXT.rul that comes with the
GSCLib_3.0 (supplied by cadence crete).

Thanks so much.
Trisha.
 

Welcome to EDABoard.com

Sponsor

Back
Top