mirror of https://github.com/KLayout/klayout.git
Clarification of negative edge output for two-layer DRC's.
This commit is contained in:
parent
660b723678
commit
5e04ea6156
|
|
@ -269,6 +269,7 @@ gen = Gen::new
|
|||
|
||||
run_demo gen, "input1.separation(input2, 1.2, euclidian)", "drc_separation1.png"
|
||||
run_demo gen, "input1.drc(separation(input2, euclidian) < 1.2)", "drc_separation1u.png"
|
||||
run_demo gen, "input1.drc((separation(input2) >= 1.2).first_edges)", "drc_separation1un.png"
|
||||
|
||||
class Gen
|
||||
def produce(s1, s2)
|
||||
|
|
|
|||
|
|
@ -1024,7 +1024,7 @@ CODE
|
|||
#
|
||||
# With a lower and upper limit, the results are edges marking the positions on the
|
||||
# primary shape where the condition is met.
|
||||
# With a lower limit alone, these markers are formed by two, identical but opposite edges attached to
|
||||
# With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to
|
||||
# the primary shape. Without an upper limit only, the first edge of the marker is attached to the
|
||||
# primary shape while the second edge is attached to the shape of the "other" layer.
|
||||
#
|
||||
|
|
@ -1034,6 +1034,12 @@ CODE
|
|||
# @td @img(/images/drc_enc2u.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
# When "larger than" constraints are used, this function will produce the edges from the
|
||||
# first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
# the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the
|
||||
# actual edges from the first input (see \separation for an example).
|
||||
#
|
||||
|
||||
# %DRC%
|
||||
# @name separation
|
||||
|
|
@ -1049,10 +1055,6 @@ CODE
|
|||
# opposite and rectangle filtering. See \Layer#separation for details about opposite and
|
||||
# rectangle error filtering.
|
||||
#
|
||||
# When "larger than" constraints are used, this function will produce the edges from the
|
||||
# first layer. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
# the original polygon plus a reverse copy of that edge in the second member.
|
||||
#
|
||||
# @h3 Classic mode @/h3
|
||||
#
|
||||
# Like \enclosing, this function is available as a classic DRC function with a layer as the first
|
||||
|
|
@ -1085,6 +1087,23 @@ CODE
|
|||
# @td @img(/images/drc_separation1u.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
# When "larger than" constraints are used, this function will produce the edges from the
|
||||
# first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
# the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the
|
||||
# actual edges from the first input:
|
||||
#
|
||||
# @code
|
||||
# l1_edges_without_l2 = l1.drc((separation(l2) >= 1.0).first_edges)
|
||||
# @/code
|
||||
#
|
||||
# The following image shows the effect of such a negative-output separation check:
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
# @td @img(/images/drc_separation1un.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
|
||||
# %DRC%
|
||||
# @name overlap
|
||||
|
|
@ -1128,6 +1147,12 @@ CODE
|
|||
# @td @img(/images/drc_overlap2u.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
# When "larger than" constraints are used, this function will produce the edges from the
|
||||
# first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
# the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the
|
||||
# actual edges from the first input (see \separation for an example).
|
||||
#
|
||||
|
||||
# %DRC%
|
||||
# @name width
|
||||
|
|
@ -1184,7 +1209,7 @@ CODE
|
|||
#
|
||||
# With a lower and upper limit or with the "equal" condition, the results are edges marking the positions on the
|
||||
# primary shape where the condition is met.
|
||||
# With a lower limit alone, these markers are formed by two, identical but opposite edges attached to
|
||||
# With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to
|
||||
# the primary shape. Without an upper limit only, both edges are attached to different sides of the primary
|
||||
# shape.
|
||||
#
|
||||
|
|
|
|||
|
|
@ -586,7 +586,7 @@ These markers indicate the presence of the specified condition.
|
|||
</p><p>
|
||||
With a lower and upper limit, the results are edges marking the positions on the
|
||||
primary shape where the condition is met.
|
||||
With a lower limit alone, these markers are formed by two, identical but opposite edges attached to
|
||||
With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to
|
||||
the primary shape. Without an upper limit only, the first edge of the marker is attached to the
|
||||
primary shape while the second edge is attached to the shape of the "other" layer.
|
||||
</p><p>
|
||||
|
|
@ -596,6 +596,11 @@ primary shape while the second edge is attached to the shape of the "other" laye
|
|||
<td><img src="/images/drc_enc2u.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
When "larger than" constraints are used, this function will produce the edges from the
|
||||
first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the
|
||||
actual edges from the first input (see <a href="#separation">separation</a> for an example).
|
||||
</p>
|
||||
<a name="error"/><h2>"error" - Prints an error</h2>
|
||||
<keyword name="error"/>
|
||||
|
|
@ -1216,6 +1221,11 @@ errors = in.drc(overlap(other) < 0.2.um)
|
|||
<td><img src="/images/drc_overlap2u.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
When "larger than" constraints are used, this function will produce the edges from the
|
||||
first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the
|
||||
actual edges from the first input (see <a href="#separation">separation</a> for an example).
|
||||
</p>
|
||||
<a name="overlapping"/><h2>"overlapping" - Selects shapes overlapping with other shapes</h2>
|
||||
<keyword name="overlapping"/>
|
||||
|
|
@ -1511,6 +1521,23 @@ work in generating error markers.
|
|||
<td><img src="/images/drc_separation1u.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
When "larger than" constraints are used, this function will produce the edges from the
|
||||
first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from
|
||||
the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the
|
||||
actual edges from the first input:
|
||||
</p><p>
|
||||
<pre>
|
||||
l1_edges_without_l2 = l1.drc((separation(l2) >= 1.0).first_edges)
|
||||
</pre>
|
||||
</p><p>
|
||||
The following image shows the effect of such a negative-output separation check:
|
||||
</p><p>
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="/images/drc_separation1un.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
<a name="silent"/><h2>"silent" - Resets verbose mode</h2>
|
||||
<keyword name="silent"/>
|
||||
|
|
@ -1863,7 +1890,7 @@ errors = in.drc(0.1.um <= width < 0.2.um)
|
|||
</p><p>
|
||||
With a lower and upper limit or with the "equal" condition, the results are edges marking the positions on the
|
||||
primary shape where the condition is met.
|
||||
With a lower limit alone, these markers are formed by two, identical but opposite edges attached to
|
||||
With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to
|
||||
the primary shape. Without an upper limit only, both edges are attached to different sides of the primary
|
||||
shape.
|
||||
</p><p>
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ new_layer = layer.collect { |polygon| polygon.transformed(t) }
|
|||
<keyword name="collect_to_edge_pairs"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>layer.collect { |object| ... }</tt></li>
|
||||
<li><tt>layer.collect_to_edge_pairs { |object| ... }</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
This method is similar to <a href="#collect">collect</a>, but creates an edge pair layer. It expects the block to
|
||||
|
|
@ -224,7 +224,7 @@ deliver <class_doc href="EdgePair">EdgePair</class_doc>, <class_doc href="DEdgeP
|
|||
<keyword name="collect_to_edges"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>layer.collect { |object| ... }</tt></li>
|
||||
<li><tt>layer.collect_to_edges { |object| ... }</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
This method is similar to <a href="#collect">collect</a>, but creates an edge layer. It expects the block to
|
||||
|
|
@ -235,7 +235,7 @@ contours will be turned into edge sequences.
|
|||
<keyword name="collect_to_region"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>layer.collect { |object| ... }</tt></li>
|
||||
<li><tt>layer.collect_to_region { |object| ... }</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
This method is similar to <a href="#collect">collect</a>, but creates a polygon layer. It expects the block to
|
||||
|
|
@ -1438,7 +1438,7 @@ See <a href="#clean">clean</a> for a discussion of the raw state.
|
|||
<p>
|
||||
See <a href="#isolated">isolated</a> for a description of that method
|
||||
</p>
|
||||
<a name="isolated"/><h2>"isolated" - An isolation check</h2>
|
||||
<a name="isolated"/><h2>"isolated" - An inter-polygon isolation check</h2>
|
||||
<keyword name="isolated"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
|
|
@ -1449,8 +1449,8 @@ See <a href="#isolated">isolated</a> for a description of that method
|
|||
<b>Note: </b>"isolated" and "iso" are available as operators for the "universal DRC" function <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> within
|
||||
the <a href="#DRC">DRC</a> framework. These variants have more options and are more intuitive to use. See <a href="/about/drc_ref_global.xml#isolated">isolated</a> for more details.
|
||||
</p><p>
|
||||
See <a href="#space">space</a> for a description of this method.
|
||||
In contrast to <a href="#space">space</a>, this
|
||||
See <a href="#space">space</a> for a description of this method. "isolated" is the space check variant which checks different polygons only.
|
||||
In contrast to <a href="#space">space</a>, the "isolated"
|
||||
method is available for polygon layers only, since only on such layers
|
||||
different polygons can be identified.
|
||||
</p><p>
|
||||
|
|
@ -1845,7 +1845,7 @@ This method is available for polygons only.
|
|||
It returns a new layer containing the selected shapes. A version which modifies self
|
||||
is <a href="#select_not_overlapping">select_not_overlapping</a>.
|
||||
</p>
|
||||
<a name="notch"/><h2>"notch" - An intra-region spacing check</h2>
|
||||
<a name="notch"/><h2>"notch" - An intra-polygon spacing check</h2>
|
||||
<keyword name="notch"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
|
|
@ -1855,8 +1855,9 @@ is <a href="#select_not_overlapping">select_not_overlapping</a>.
|
|||
<b>Note: </b>"notch" is available as an operator for the "universal DRC" function <a href="/about/drc_ref_layer.xml#drc">Layer#drc</a> within
|
||||
the <a href="#DRC">DRC</a> framework. This variant has more options and is more intuitive to use. See <a href="/about/drc_ref_global.xml#notch">notch</a> for more details.
|
||||
</p><p>
|
||||
See <a href="#space">space</a> for a description of this method.
|
||||
In contrast to <a href="#space">space</a>, this
|
||||
See <a href="#space">space</a> for a description of this method.
|
||||
"notch" is the space check variant which finds space violations within a single polygon, but not against other polygons.
|
||||
In contrast to <a href="#space">space</a>, the "notch"
|
||||
method is available for polygon layers only, since only on such layers
|
||||
different polygons can be identified. Also, opposite and rectangle error
|
||||
filtering is not available for this method.
|
||||
|
|
@ -1918,6 +1919,9 @@ on polygons and edges (input1: red, input2: blue):
|
|||
<td><img src="/images/drc_or2.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
In deep mode, "or" or "|" does not imply merging. In deep mode,
|
||||
"or" is an alias for "+" ("add").
|
||||
</p>
|
||||
<a name="output"/><h2>"output" - Outputs the content of the layer</h2>
|
||||
<keyword name="output"/>
|
||||
|
|
@ -2688,12 +2692,17 @@ The following images show the effect of various forms of the "sized" method:
|
|||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>layer.smoothed(d)</tt></li>
|
||||
<li><tt>layer.smoothed(d, hv_keep)</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
"Smoothing" returns a simplified version of the polygons. Simplification is
|
||||
achieved by removing vertices unless the resulting polygon deviates by more
|
||||
than the given distance d from the original polygon.
|
||||
</p><p>
|
||||
"hv_keep" is a boolean parameter which makes the smoothing function maintain
|
||||
horizontal or vertical edges. The default is false, meaning horizontal or
|
||||
vertical edges may be changed into tilted ones.
|
||||
</p><p>
|
||||
This method return a layer wit the modified polygons. Merged semantics applies for this
|
||||
method (see <a href="#raw">raw</a> and <a href="#clean">clean</a>).
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -99,6 +99,25 @@ connect(contact, metal1)
|
|||
errors = antenna_check(gate, metal1, 50.0)
|
||||
</pre>
|
||||
</p><p>
|
||||
Usually antenna checks apply to multiple metal layers. In this case,
|
||||
the connectivity needs to be extended after the first check to include
|
||||
the next metal layers. This can be achieved with incremental connects:
|
||||
</p><p>
|
||||
<pre>
|
||||
# provide connections up to metal1
|
||||
connect(gate, poly)
|
||||
connect(poly, contact)
|
||||
connect(contact, metal1)
|
||||
metal1_errors = antenna_check(gate, metal1, 50.0)
|
||||
|
||||
# now *add* connections up to metal2
|
||||
connect(metal1, via1)
|
||||
connect(via1, metal2)
|
||||
metal2_errors = antenna_check(gate, metal2, 50.0)
|
||||
|
||||
... continue this scheme with further metal layers ...
|
||||
</pre>
|
||||
</p><p>
|
||||
Plasma induced damage can be rectified by including diodes
|
||||
which create a safe current path for discharging the metal
|
||||
islands. Such diodes can be identified with a recognition layer
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
|
|
@ -18,6 +18,7 @@
|
|||
<file alias="drc_space3u.png">doc/images/drc_space3u.png</file>
|
||||
<file alias="drc_separation1.png">doc/images/drc_separation1.png</file>
|
||||
<file alias="drc_separation1u.png">doc/images/drc_separation1u.png</file>
|
||||
<file alias="drc_separation1un.png">doc/images/drc_separation1un.png</file>
|
||||
<file alias="drc_separation2.png">doc/images/drc_separation2.png</file>
|
||||
<file alias="drc_separation3.png">doc/images/drc_separation3.png</file>
|
||||
<file alias="drc_separation4.png">doc/images/drc_separation4.png</file>
|
||||
|
|
|
|||
Loading…
Reference in New Issue