MAGIC Magic Mailing List
 
 

From: R. Timothy Edwards (tim AT stravinsky DOT jhuapl.edu)
Date: Mon Jun 16 2003 - 12:20:09 EDT

  • Next message: Stefan Jones: "tclspice-0.2.11 released"

    Dear Jeff,
    
    > now it's worse, at least with tsmc.90 nm, there are like 5 'wide
    > metal' bins, se we really need rules like
    > 
    >       width < 5  space=2
    >  5 <= width < 10 space=4
    > 10 <= width      space=6
    > ...
    
    I *think* that a set of widespacing rules will actually work correctly
    here, as certain rules tend to "shadow" other ones.  However, there is
    (still! $#@!) an error with the way I implemented the widespacing rule,
    and once I fix that, I'll check whether they can be layered like your
    example.
    
    > this (>= 5 bins of spacings) also applies to via spacing: a 2x2 array
    > can be spaced closer than a 3x3 (to 5x5) array, and so on.
    
    That can be implemented in the cifoutput rules:  e.g., take all areas
    of via, shrink by half the size of a 3x3 array, and expand, which
    removes all the 2x2-sized via areas.  Then with the proper boolean
    logic, you can do "squares" operations separately on 2x2 via arrays
    and larger arrays (of course, for more bins, it gets rather
    complicated).  I did this for the UMC process, which required a
    different border on via areas larger than some amount.
    
    > > 3) layer height and width (for 3-D rendering and precise geometry
    > >    extraction for passing to field-solver tools) can be put in the
    > >    extract section, using the line
    > > 
    > >       height <layer(s)> <height_above_substrate> <layer_thickness>
    > > 
    > >    Units are in lambda and may be floating-point.
    >
    > it would be easier if the units were microns.
    
    Magic's extract section is all lambda-based and apparently intended
    to be purely scalable.  With extraction separate from CIF I/O, there's
    no way to ensure that the two match up.  I have been thinking, however,
    that it might be better to "package" the extract, cifinput, and
    cifoutput sections under a single "style", instead of the other way
    around.  That way, you always ensure that extraction matches output,
    and problems like lambda vs. microns in the extract section go away.
    
    > > 
    > > 4) extended "contact" line in the extract section takes the same
    > >    arguments as the "squares" command in the cifoutput section.
    > >    Otherwise, the extractor makes a different count of contact cuts
    > >    than actually ends up in the output, so extracted values (mainly
    > >    resistance through contacts) can be incorrect.  The syntax is:
    > > 
    > are you saying that the only difference is that the extractor counts
    > the "correct" number of contacts for a 'contact' than for a squares' ?
    
    Yes.  The previous method calculates the number of squares differently
    for extraction than for physical output, and so the calculated resistance
    through contact regions can be way off.
    
    > ("correct" modulo the off-lambda issues).  what i'd really like is a
    > mode where you get a drc violation unless your contacts are exactly
    > sized to generate on-lambda contacts.
    
    I think it makes more sense for the cifoutput "squares" function to
    take an extra argument "onlambda" which ensures that contacts will
    always be written out on the lambda grid.
    
    > the problem with contacts is that they take up too many 'types' (as i
    > think those 'images' are).  i already ran out of types for tsmc.90 nm
    > and had to scrap the 'HV' (high voltage) diffusions, and now just
    > implement HV (thick oxide) transistors with 3 types: 'to' 'ntfet' and
    > 'ptfet' (similar to low- and high- threshold transistors).  this
    > limits the drc checking, tho, and requires that you generally have to
    > draw the 'to' layer itself to get (limited) drc checking of it.
    
    I am partially through re-coding large portions of magic's core
    painting routines to completely overhaul the contact image problem.
    The difficulty lies in some rather poorly designed structures, in
    which each contact layer is given a "home plane" and lists neigboring
    "above" and "below" planes, and the "residue" types for each of those
    three planes.  This creates the three-planes-maximum limit for
    contacts.  The way the code is written around these structures
    necessitates the creation of a new layer type for each contact
    image on each plane.  I redesigned everything so that each contact
    has only one type, and that type gets put on each plane that the
    contact connects to.  Each contact type defines all the residues on
    all the contacted planes, so there is 1) no meaningful idea of a
    "home plane", 2) no limit on the number of planes contacted, 3)
    no restriction of adjacency for the contacted planes, and 4) no
    requirement that two contact types can't have the same residues
    (so "generic" contact types can be defined to connect the same
    layers as their "specific" equivalents).  These changes are a huge
    benefit for deep-submicron technologies, removing all the limitations
    you mentioned.
    
    Philippe was the first person to suggest this change to me, and
    suggested that instead of just "contacts", the idea of layer
    images on multiple planes could be extended to devices as well,
    so that, for instance, an "nfet" would be an image existing on
    plane "poly" and plane "diffusion".  One benefit of this is that
    in double-poly processes, you can define poly and poly2 to be
    on different planes, and (where the process allows it), have
    poly-poly2 caps but also allow poly to cross poly2 on field
    oxide.
    
    > it would really be nice if magic had an 'edge-to-edge' drc rule, since
    > many new tsmc.90 rules prohibit an edge of one layer (say 'to') near
    > and edge of another (say 'nwell') UNLESS they align.  that is, if an
    > edge of 'to' is < X of an edge of 'nwell', you must align the edges
    > (or space them further apart by >= X).
    
    I thought the "touching_ok" flag on spacing rules was supposed to
    account for that.
    
    > there's even more grizzly
    > rules, like: a corner of layer1 cannot be within X of a corner of
    > layer2, unless one of their dx or dy offsets (distances between the
    > points) is Y.
    
    Doesn't this work with the edge4way rule just by specifying the
    appropriate distance for the corner extension?  If it doesn't
    work with a single rule, then it should work by having the normal
    spacing rule "shadow" the corner rule.  At least, I think so.
    
    					Regards,
    					Tim
    


  •  
     
    Questions? Contact Rajit Manohar
    cornell logo