mirror of https://github.com/KLayout/klayout.git
Added documentation for new DRC feature
This commit is contained in:
parent
58d53636cb
commit
10880e078b
|
|
@ -914,6 +914,36 @@ run_demo gen, "input.sized(1.um, octagon_limit)", "drc_sized4.png"
|
|||
run_demo gen, "input.sized(1.um, square_limit)", "drc_sized5.png"
|
||||
run_demo gen, "input.sized(1.um, acute_limit)", "drc_sized6.png"
|
||||
|
||||
class Gen
|
||||
def produce(s1, s2)
|
||||
pts = [
|
||||
RBA::Point::new(1000, 1000),
|
||||
RBA::Point::new(1000, 2000),
|
||||
RBA::Point::new(2000, 2000),
|
||||
RBA::Point::new(2000, 1000)
|
||||
];
|
||||
s1.insert(RBA::Polygon::new(pts))
|
||||
pts = [
|
||||
RBA::Point::new(1000, 1000),
|
||||
RBA::Point::new(1000, 7000),
|
||||
RBA::Point::new(6000, 7000),
|
||||
RBA::Point::new(6000, 1000),
|
||||
RBA::Point::new(5000, 1000),
|
||||
RBA::Point::new(5000, 6000),
|
||||
RBA::Point::new(2000, 6000),
|
||||
RBA::Point::new(2000, 1000)
|
||||
];
|
||||
s2.insert(RBA::Polygon::new(pts))
|
||||
end
|
||||
end
|
||||
|
||||
gen = Gen::new
|
||||
|
||||
run_demo gen, "input1.sized(1.um, steps(1), inside(input2))", "drc_sized_inside1.png"
|
||||
run_demo gen, "input1.sized(2.um, steps(2), inside(input2))", "drc_sized_inside2.png"
|
||||
run_demo gen, "input1.sized(3.um, steps(3), inside(input2))", "drc_sized_inside3.png"
|
||||
run_demo gen, "input1.sized(10.um, steps(10), inside(input2))", "drc_sized_inside4.png"
|
||||
|
||||
class Gen
|
||||
def produce(s1, s2)
|
||||
pts = [
|
||||
|
|
|
|||
|
|
@ -3056,18 +3056,27 @@ The following images shows the effect of some rectangle filter modes:
|
|||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>layer.size(d [, mode])</tt></li>
|
||||
<li><tt>layer.size(dx, dy [, mode]))</tt></li>
|
||||
<li><tt>layer.size(d, inside(l) [, steps(n)] [, mode])</tt></li>
|
||||
<li><tt>layer.size(d, outside(l) [, steps(n)] [, mode])</tt></li>
|
||||
<li><tt>layer.size(dx, dy [, mode])</tt></li>
|
||||
<li><tt>layer.size(dx, dy, inside(l) [, steps(n)] [, mode])</tt></li>
|
||||
<li><tt>layer.size(dx, dy, outside(l) [, steps(n)] [, mode])</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
See <a href="#sized">sized</a>. The size method basically does the same but modifies the layer
|
||||
See <a href="#sized">sized</a> for a description of the options.
|
||||
The size method basically does the same but modifies the layer
|
||||
it is called on. The input layer is returned and available for further processing.
|
||||
</p>
|
||||
<a name="sized"/><h2>"sized" - Polygon sizing (per-edge biasing)</h2>
|
||||
<keyword name="sized"/>
|
||||
<p>Usage:</p>
|
||||
<ul>
|
||||
<li><tt>layer.sized(d [, mode])</tt></li>
|
||||
<li><tt>layer.sized(dx, dy [, mode]))</tt></li>
|
||||
<li><tt>layer.sized(d [, mode] [, inside(l) [, steps(n)]])</tt></li>
|
||||
<li><tt>layer.sized(d, inside(l) [, steps(n)] [, mode])</tt></li>
|
||||
<li><tt>layer.sized(d, outside(l) [, steps(n)] [, mode])</tt></li>
|
||||
<li><tt>layer.sized(dx, dy [, mode])</tt></li>
|
||||
<li><tt>layer.sized(dx, dy, inside(l) [, steps(n)] [, mode])</tt></li>
|
||||
<li><tt>layer.sized(dx, dy, outside(l) [, steps(n)] [, mode])</tt></li>
|
||||
</ul>
|
||||
<p>
|
||||
This method requires a polygon layer. It will apply a bias per edge of the polygons
|
||||
|
|
@ -3100,6 +3109,30 @@ layer.sized(300.nm).raw.merged(2)
|
|||
Bias values can be given as floating-point values (in micron) or integer values (in
|
||||
database units). To explicitly specify the unit, use the unit denominators.
|
||||
</p><p>
|
||||
The "inside" option and the "steps" option implement incremental size. Incremental
|
||||
size means that the sizing value is applied in n steps. Between the steps, the sized
|
||||
shape is confined to the "inside" layer by means of a boolean "AND" operation.
|
||||
</p><p>
|
||||
This scheme is used to implement latch-up rules where a device active region has to
|
||||
be close to a well tap. By using the well layer as the "inside" layer, the size function
|
||||
follows the well contours. The steps have to selected such that the per-step size value
|
||||
is smaller than the minimum space of the well shapes. With that, the sized shapes will
|
||||
not cross over to neighbor well regions. Specifically, the per-step size has to be less
|
||||
than about 70% of the minimum space to account for the minimum corner-to-corner case
|
||||
with Euclidian space measurements.
|
||||
</p><p>
|
||||
"inside" and "steps" can be used with positive sizing values only.
|
||||
</p><p>
|
||||
"outside" acts like "inside", but instead of confining the sized region to the
|
||||
inside of the given layer, it is confined to be outside of that layer. Technically,
|
||||
a boolean "NOT" is performed instead of a boolean "AND".
|
||||
</p><p>
|
||||
An example for the "inside" option is this:
|
||||
</p><p>
|
||||
<pre>
|
||||
ntap.sized(30.um, inside(nwell), steps(100))
|
||||
</pre>
|
||||
</p><p>
|
||||
<a href="#size">size</a> is working like <a href="#sized">sized</a> but modifies the layer it is called on.
|
||||
</p><p>
|
||||
The following images show the effect of various forms of the "sized" method:
|
||||
|
|
@ -3118,6 +3151,19 @@ The following images show the effect of various forms of the "sized" method:
|
|||
<td><img src="/images/drc_sized6.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p><p>
|
||||
The effect of the "inside" option is shown here:
|
||||
</p><p>
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="/images/drc_sized_inside1.png"/></td>
|
||||
<td><img src="/images/drc_sized_inside2.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="/images/drc_sized_inside3.png"/></td>
|
||||
<td><img src="/images/drc_sized_inside4.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
<a name="smoothed"/><h2>"smoothed" - Smoothes the polygons of the region</h2>
|
||||
<keyword name="smoothed"/>
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
|
|
@ -125,6 +125,10 @@
|
|||
<file alias="drc_sized4.png">doc/images/drc_sized4.png</file>
|
||||
<file alias="drc_sized5.png">doc/images/drc_sized5.png</file>
|
||||
<file alias="drc_sized6.png">doc/images/drc_sized6.png</file>
|
||||
<file alias="drc_sized_inside1.png">doc/images/drc_sized_inside1.png</file>
|
||||
<file alias="drc_sized_inside2.png">doc/images/drc_sized_inside2.png</file>
|
||||
<file alias="drc_sized_inside3.png">doc/images/drc_sized_inside3.png</file>
|
||||
<file alias="drc_sized_inside4.png">doc/images/drc_sized_inside4.png</file>
|
||||
<file alias="drc_with_angle1.png">doc/images/drc_with_angle1.png</file>
|
||||
<file alias="drc_with_angle2.png">doc/images/drc_with_angle2.png</file>
|
||||
<file alias="drc_with_angle3.png">doc/images/drc_with_angle3.png</file>
|
||||
|
|
|
|||
|
|
@ -4688,6 +4688,8 @@ TP_SCRIPT
|
|||
# This method requires a polygon layer. It will apply a bias per edge of the polygons
|
||||
# and return the biased layer. The layer that this method is called on is not modified.
|
||||
#
|
||||
# The alternative method \size works like \sized but modifies the layer it is called on.
|
||||
#
|
||||
# In the single-value form, that bias is applied both in horizontal or vertical direction.
|
||||
# In the two-value form, the horizontal and vertical bias can be specified separately.
|
||||
#
|
||||
|
|
@ -4715,32 +4717,6 @@ TP_SCRIPT
|
|||
# Bias values can be given as floating-point values (in micron) or integer values (in
|
||||
# database units). To explicitly specify the unit, use the unit denominators.
|
||||
#
|
||||
# The "inside" option and the "steps" option implement incremental size. Incremental
|
||||
# size means that the sizing value is applied in n steps. Between the steps, the sized
|
||||
# shape is confined to the "inside" layer by means of a boolean "AND" operation.
|
||||
#
|
||||
# This scheme is used to implement latch-up rules where a device active region has to
|
||||
# be close to a well tap. By using the well layer as the "inside" layer, the size function
|
||||
# follows the well contours. The steps have to selected such that the per-step size value
|
||||
# is smaller than the minimum space of the well shapes. With that, the sized shapes will
|
||||
# not cross over to neighbor well regions. Specifically, the per-step size has to be less
|
||||
# than about 70% of the minimum space to account for the minimum corner-to-corner case
|
||||
# with Euclidian space measurements.
|
||||
#
|
||||
# "inside" and "steps" can be used with positive sizing values only.
|
||||
#
|
||||
# "outside" acts like "inside", but instead of confining the sized region to the
|
||||
# inside of the given layer, it is confined to be outside of that layer. Technically,
|
||||
# a boolean "NOT" is performed instead of a boolean "AND".
|
||||
#
|
||||
# An example for the "inside" option is this:
|
||||
#
|
||||
# @code
|
||||
# ntap.sized(30.um, inside(nwell), steps(100))
|
||||
# @/code
|
||||
#
|
||||
# \size is working like \sized but modifies the layer it is called on.
|
||||
#
|
||||
# The following images show the effect of various forms of the "sized" method:
|
||||
#
|
||||
# @table
|
||||
|
|
@ -4757,6 +4733,45 @@ TP_SCRIPT
|
|||
# @td @img(/images/drc_sized6.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
# The "inside" option and the "steps" option implement incremental size. Incremental
|
||||
# size means that the sizing value is applied in n steps. Between the steps, the sized
|
||||
# shape is confined to the "inside" layer by means of a boolean "AND" operation.
|
||||
#
|
||||
# This scheme is used to implement latch-up rules where a device active region has to
|
||||
# be close to a well tap. By using the well layer as the "inside" layer, the size function
|
||||
# follows the well contours. The steps have to selected such that the per-step size value
|
||||
# is smaller than the minimum space of the well shapes. With that, the sized shapes will
|
||||
# not cross over to neighbor well regions. Specifically, the per-step size has to be less
|
||||
# than about 70% of the minimum space to account for the minimum corner-to-corner case
|
||||
# with Euclidian space measurements.
|
||||
#
|
||||
# "inside" and "steps" can be used with positive sizing values only.
|
||||
# A steps value of 0 will not execute any sizing at all.
|
||||
#
|
||||
# "outside" acts like "inside", but instead of confining the sized region to the
|
||||
# inside of the given layer, it is confined to be outside of that layer. Technically,
|
||||
# a boolean "NOT" is performed instead of a boolean "AND".
|
||||
#
|
||||
# An example for the "inside" option is this:
|
||||
#
|
||||
# @code
|
||||
# ntap.sized(30.um, inside(nwell), steps(100))
|
||||
# @/code
|
||||
#
|
||||
# The effect of the "inside" option is shown here:
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
# @td @img(/images/drc_sized_inside1.png) @/td
|
||||
# @td @img(/images/drc_sized_inside2.png) @/td
|
||||
# @/tr
|
||||
# @tr
|
||||
# @td @img(/images/drc_sized_inside3.png) @/td
|
||||
# @td @img(/images/drc_sized_inside4.png) @/td
|
||||
# @/tr
|
||||
# @/table
|
||||
#
|
||||
|
||||
# %DRC%
|
||||
# @name size
|
||||
|
|
|
|||
Loading…
Reference in New Issue