Labels in Virtuoso

Discussion in 'Cadence' started by trisha.woods, Oct 25, 2005.

  1. trisha.woods

    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
     
    trisha.woods, Oct 25, 2005
    #1
  2. 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
     
    Bernd Fischer, Oct 25, 2005
    #2
  3. trisha.woods

    trisha.woods Guest

    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.
     
    trisha.woods, Oct 25, 2005
    #3
  4. 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
     
    Bernd Fischer, Oct 25, 2005
    #4
  5. trisha.woods

    trisha.woods Guest

    Sorry small mistake in the last sentence. I want to make sure that the
    labels are on metal 1 and not metal2.
     
    trisha.woods, Oct 25, 2005
    #5
  6. 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
     
    Bernd Fischer, Oct 26, 2005
    #6
  7. trisha.woods

    S. Badel Guest

    Hi All,
    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
     
    S. Badel, Oct 27, 2005
    #7
  8. trisha.woods

    Tim Guest

    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
     
    Tim, Oct 27, 2005
    #8
  9. trisha.woods

    trisha.woods Guest

    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.
     
    trisha.woods, Oct 28, 2005
    #9
  10. 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
     
    Bernd Fischer, Oct 28, 2005
    #10
  11. trisha.woods

    trisha.woods Guest

    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.
     
    trisha.woods, Oct 28, 2005
    #11
  12. trisha.woods

    S. Badel Guest

    I want to
    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)
    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
     
    S. Badel, Oct 31, 2005
    #12
  13. 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
     
    Gerry Vandevalk, Oct 31, 2005
    #13
  14. 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.
     
    Ed Mr. Diva Kalenda, Nov 2, 2005
    #14
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.