Magic Mailing List |
|
From: Philippe Pouliquen (philippe AT alpha DOT ece.jhu.edu) Date: Mon Mar 24 2003 - 15:45:05 EST
On Sun, 23 Mar 2003, Jeff Sondeen wrote: > > but this won't address the diagonal spacing drc rule problem, eg. if > contact spacing is 3 lambda, an array of contacts spaced diagonally > apart by (2,3) lambda will meet it (since sqrt(9+4) > 3) but magic will > require (3,3) spacing. The case for contacts is a bit confusing because Magic tech files usually include the metal overlap in the contact tile. So let's stick with normal layers such as the metal layers. If the metal spacing is supposed to be 4, then two squares of metal diagonally apart by (3,3) will satisfy the spacing rule using euclidean distance, but not Manhattan distance. But if the spacing is supposed to be 3 (or less), then it is not possible to place two squares of metal diagonally apart by (x,y) where either x or y are integers less than 3, because the euclidean distance will also be less than 3. In principle, the tech file can be re-written to deal with small diagonal distances of 4 or 5. The idea is to break the spacing rule back down into its component edge rules, and then make the corner extension distance (cornerDist) different from the spacing (d) (see pages 27 to 31 in maint2.ps). For a spacing of 4, you would need to special case the position (3,3) as follows: Start with the following rule: spacing m2 m2 4 touching_ok \ "Metal 2 spacing must be at least 4" Magic implements this as: edge m2 space/metal2 4 space/metal2 space/metal2 4 \ "Metal 2 spacing must be at least 4" In the above rule, cornerDist = d = 4. Change the rule into the following two rules: edge m2 space/metal2 4 space/metal2 space/metal2 3 \ "Metal 2 spacing must be at least 4" edge m2 space/metal2 3 space/metal2 space/metal2 4 \ "Metal 2 spacing must be at least 4" Now Magic will "appear" to check euclidean distances on Metal2 spacing. For a spacing of 5, you need to check (3,4), (4,4), and (4,3). For a spacing of 6, you need to check (4,5), (5,5), and (5,4). In both cases the spacing rule becomes two edge rules, just like above. But when you get to 7, you need to check (5,5) as well as (4,6), (5,6), (6,6), (6,5), and (6,4). This makes the spacing rule break into three edge rules. So obviously this becomes quite painful for large spacings such as Nwell. It also gets complicated for different tile types, and contacts. I'm going to go back to being a blissful end-user now, because I'm certainly not volunteering to change Jeff's tech files!!! :-) Philippe
|
|