MAGIC Magic Mailing List
 
 

From: R. Timothy Edwards (tim AT stravinsky DOT jhuapl.edu)
Date: Fri Jan 11 2002 - 17:58:25 EST

  • Next message: Jeff W. Sondeen: "Re: pending changes to Magic"

    Dear Magic Hackers,
       I have almost finished my changes to the CIF and Calma sections of Magic,
    so before I commit the changes (which are substantial) to the CVS source, I
    will give a brief description of what it all does, and if anyone sees any
    logical flaws in the new methods, please let me know before I commit the code
    changes.
    
       1) I have expanded the "scalegrid" command which I added a while back so
    	that it can be invoked at any time with the expected result.  Before,
    	it altered the CIF and DRC distances to match the new scaling.  Now,
    	it alters all existing geometry as well.  This allows me to play
    	games with CIF input and output.
       2) The "calmaonly" parameter to "scalefactor" was already deprecated, and
    	so it is now simply ignored.
       3) The "reducer" parameter to "scalefactor" was just confusing, and if
    	the CIF bloat/grow/shrink values weren't divisible by the reducer,
    	then the CIF output would be in error.  Now, any reducer value is
    	ignored, and magic figures out its own reducer by finding the greatest
    	common factor between the CIF operation distances and the scalefactor.
       4) The "nanometers" parameter is retained, although it no longer must be
    	accompanied by "calmaonly".  "nanometers" still does exactly what it
    	used to---it declares that all values are nanometers instead of
    	centimicrons, so magic can handle output for deep submicron processes
    	like 0.13 (scalefactor = 6.5 in centimicrons, 65 in nanometers).
       5) The scalefactor can be specified by a decimal, so "scalefactor 6.5" is
    	allowed.  However, CIF operation distance values are still in
    	centimicrons and must be integer values, so in most cases it will
    	probably make more sense to use "nanometers".
       6) During CIF or GDS reads, magic checks every value before scaling, both
    	at the input level for CIF only (scaling by the multiplier/reducer
    	amounts declared in the cell "DS" definition), and during the conversion
    	from CIF units to magic units.  If fractional centimicrons result
    	from a CIF read, the CIF planes will be redefined so that the input
    	can be read exactly, without realigning itself to an integer boundary.
    	When converting to magic units, the same consideration applies, except
    	that some half-lambda geometry is allowed, such as for box centers
    	and for contacts (which can be placed on the half-lambda grid
    	by the "squares" operation in CIF output).  Otherwise, fractional-lambda
    	geometry causes magic to redefine its basic grid unit so that the input
    	geometry is not altered.
    
    I tested the code out by writing out a CIF file at 0.065um, reading it back in
    a 0.09um style, then writing it back out in a 0.065um style.  It preserved the
    geometry as specified throughout all of the operations, although the final
    output is some awful thing measured in angstroms (units of 1/72 centimicron,
    to be precise).
    
    There are a couple of things I still need to do.  By relaxing the 1 Magic unit =
    1 lambda restriction, it is necessary to have magic start measuring boxes in
    lambda rather than internal Magic units, or perhaps both (and perhaps it should
    also give measurements in microns according to the current CIF output style).
    It might also be useful to define a 'drawing grid' spacing in lambda instead of
    magic units to make it easier to move around and draw simple geometry when the
    magic grid is very finely defined.  I was thinking perhaps that mouse click
    operations on the cursor box might always snap to the lambda boundary, whereas
    specific "box" commands could be made to move around on a finer scale, if
    necessary.  This sort of suggests that all geometry-related commands should
    accept values either in lambda or in internal units (maybe even in microns).
    You could say "move e 10" (lambda) or "move e 10i" (internal) or "move e 1um"
    (according to current CIF output style) or even "move e 10.5" (lambda, if
    1 lambda = 2 internal units or finer).  I would like some feedback on this
    before launching into another massive code rewrite.
    
    						Regards,
    						Tim
    


  •  
     
    Questions? Contact Rajit Manohar
    cornell logo