MAGIC Magic Mailing List
 
 

From: Tim Chuang (chuang AT siti DOT com.tw)
Date: Mon Jun 17 2002 - 06:38:32 EDT

  • Next message: R. Timothy Edwards: "Re: magic crash on "scalegrid""

    Dear Developers,
    
    Magic crashes right after I type the following commands,
    
    magic
    
    :scalegrid 1 4
    
    Segmentation fault
    
    Please help. Thank you.
    
    Regards,
    Tim Chuang
    
    
    
    
    
    >Dear Jeff,
    >   Thanks for all the comments.  Here are some further explanations and
    >some answers to your questions:
    >
    >> would there be anyway to override this to get back the old magic
    >> "snapping" effect?  (just curious).
    >
    >As written so far, you can't put magic in some mode where it acts like it
    >did before.  My opinion on this is that it is dangerous (not to mention
    >rude) for magic to alter input data without being told to do so explicitly.
    >The "snapping" effect *can* be forced, but only because the user intended
    >it.  For instance, if you load a CIF file with some geometry on quarter-
    >lambda spacing, magic's grid will jump to 4x resolution to accept the
    >input exactly (the same effect as specifying the command "scalegrid 1 4"
    >before doing the CIF read).  However, if after the CIF read, you decide
    >that it is better to snap the geometry to lambda boundaries, and fix any
    >resulting problems by hand, then you can specify "scalegrid 4 1" which will
    >force magic to go back to 1 lambda = 1 internal unit, snapping the geometry
    >as it goes.  This reproduces the result of magic's original behavior, the
    >main difference being that the user is aware that he/she is potentially
    >altering the geometry of the layout.  I had a situation like this recently,
    >where a file I received had one rectangle off the grid, apparently the
    >result of an unintended geometry change in Cadence.  All that was really
    >called for was to snap that one rectangle back onto the lambda grid.
    >
    >> not sure i understand this, since math 1/72 = 0.0138888888888889, so
    >> vertices got "rounded" to this number ?  or are they exact mulitples
    >> of it ?  wish you could give an example of a 2x2 lambda box,
    >> what the units and scale factors are after each scaling.
    >
    >Sorry, maybe not such a good example.  What I mean is that the CIF file
    >declares cells with the line "DS n 1 72", meaning that every geometry
    >value in the cell must be divided by 72 to get the equivalent measurement
    >in centimicrons (actually, it should be divided by 36, because magic
    >already multiplies all values by 2 to cover the problem of rectangle
    >centers landing at half-integer values).
    >
    >> i hacked the 'box' command to optionally take an extra scale factor,
    >> so for example, 'box 0 0 300 300 .3' means my integers are "microns":
    >> 
    >> :box 0 0 300 300 .3
    >> :box
    >> EDITbox width   height  llx     lly     urx     ury
    >>         1000    1000    0       0       1000    1000
    >> um AT 0 DOT 30 width   height  llx     lly     urx     ury
    >>         300.00  300.00  0.00    0.00    300.00  300.00
    >
    >That's basically what I had in mind, except that "natural" units of
    >micrometers would be stated relative to the current CIF output style;
    >that is, it would be saying that "if you write out CIF using the
    >current output style, then the measurement of this box would be xxx
    >microns".  Your method is more flexible, but I'm not sure if there's
    >much value to looking at measurements which magic doesn't know how
    >to generate.
    >
    >I'm waffling at the moment as to whether it makes more sense to print
    >values in all three units (internal, lambda, and microns), or to set
    >a "default units" property which will show values in the requested
    >units.
    >
    >> i remember how difficult trying to hack in 'major' and 'minor' grids
    >> was: i never got very far.  the 'minor' grid would be something like
    >> .01 or .005 um with the idea that you could draw most your stuff on
    >> the 'major' (lambda) grid but then occassionally 'pop into' the minor
    >> grid to tune certain dimensions.
    >
    >My implementation does more or less the same thing.  "internal units"
    >are equivalent to the "minor grid" and "lambda units" are equivalent
    >to the "major grid".  For the time being, I will leave the cursor box
    >on the minor grid, on the assumption that most people will continue
    >to work in the default 1 lambda = 1 internal unit ratio.  I have
    >built an entire chip for a 0.25 micron process using a 1 internal
    >unit = 0.1um grid, which at times was a royal pain but which worked
    >(as did the chip).
    >
    >> however, that assumes that the resolution of the drc rules is really
    >> in terms of the minor grid (or let's just say microns).  but the rules
    >> have to be 'intelligently' converted into lambdas to let me get
    >> drc-checking when i draw in lambdas, too.
    >
    >My implementation assumes that DRC rules are specified in lambda.
    >Magic starts off with a 1 lambda = 1 internal unit grid and makes the
    >grid finer as it needs to when reading CIF/GDS input, or if the user
    >makes the grid finer with a "scalegrid" command.  DRC rule distances are
    >then multiplied by the scalefactor, so that the DRC rules continue to
    >be measured in internal units, while a "drc why" command continues to
    >tell you the result in lambda (because it belongs to a fixed char *
    >string, I can't scale what it reports.  This method prevents the kind
    >of "tweaking" of DRC rules that you mentioned.  For that, the best way
    >would probably be to implement something mentioned a while ago in a
    >posting to magic-dev (possibly by you?), which is to allow DRC "styles"
    >in the same manner as the tech cifinput and cifoutput sections allow.
    >Each "DRC style" might then have a scalefactor, so you could specify
    >"conservative" rules at a resolution of the lambda grid, and more
    >exact, foundry-specified rules at a resolution of 1/10 the lambda grid.
    >If someone wants to work in the conservative rules, no action is
    >required, whereas if someone wants to work with foundry rules, it is
    >only necessary to specify a couple of startup commands in the .magic
    >file, like "scalegrid 1 10;  drc style foundry".  Probably it would
    >only be necessary to use "drc style foundry", because the scalefactor
    >in the drc style would force magic to run the "scalegrid 1 10"
    >command---which is better, because if magic discovered that all of the
    >drc rules were divisible by 10, it would divide out the common factor
    >rather than rescaling the grid (this is what I have it do when it reads
    >the cifinput/cifoutput sections in the tech file:  If I specify
    >"scalefactor 65 nanometers" for a 0.13 micron process, it treats this
    >as 6.5 centimicrons scaled in the output by a multiplier of 10, and
    >after discovering that all of the bloat/grow/shrink/squares rules are
    >divisible by 5, it reduces this automatically from 65:10 to 13:2.  For
    >these sections, however, this only has a bearing on how magic writes
    >out CIF, not the resolution of magic's internal units).
    >
    >> but in general such 'tweak's can't be automatically computed from a
    >> set of design rules (as there are competing tradeoffs, believe me), so
    >> they have to be done by the techfile developer and explicitly
    >> specified in the techfile -- that is, the drc rules would need both
    >> 'minor' and 'major' values and the bloating between them specified
    >> (and shrinking can be done also for shapes that can't abut across
    >> cells, like contacts)
    >
    >I think my previous paragraph properly addressed that issue.  Until/unless
    >I implement "drc styles", only the "conservative" lambda-based rulesets
    >will be possible, but that's no change from what is possible in the current
    >release.
    >
    >						Regards,
    >						Tim
    >  
    >
    > ------------------------------------------------------------------------
    


  •  
     
    Questions? Contact Rajit Manohar
    cornell logo