|
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
|
|
|
|