Updating documentation

This commit is contained in:
Matthias Koefferlein 2024-01-24 22:01:27 +01:00
parent 1b887dbbb3
commit be00f308f9
10 changed files with 146 additions and 9 deletions

View File

@ -177,6 +177,37 @@ run_demo gen, "input.width(1.2, projection)", "drc_width2.png"
run_demo gen, "input.width(1.2, square)", "drc_width3.png"
run_demo gen, "input.width(1.2, whole_edges)", "drc_width4.png"
class Gen
def produce(s1, s2)
pts = [
RBA::Point::new(0, 0),
RBA::Point::new(2000, 0),
RBA::Point::new(2000, 2000),
RBA::Point::new(0, 2000)
];
s1.insert(RBA::Polygon::new(pts))
pts = [
RBA::Point::new(2000, 2000),
RBA::Point::new(4000, 2000),
RBA::Point::new(4000, 4000),
RBA::Point::new(2000, 4000)
];
s1.insert(RBA::Polygon::new(pts))
pts = [
RBA::Point::new( 500, 4000),
RBA::Point::new(2500, 4000),
RBA::Point::new(2500, 6000),
RBA::Point::new( 500, 6000)
];
s1.insert(RBA::Polygon::new(pts))
end
end
gen = Gen::new
run_demo gen, "input.width(1.0)", "drc_width5.png"
run_demo gen, "input.width(1.0, without_touching)", "drc_width6.png"
class Gen
def produce(s1, s2)
pts = [
@ -381,6 +412,45 @@ run_demo gen, "input1.sep(input2, 1.0, projection,\n" +
" one_side_allowed,\n" +
" two_opposite_sides_allowed)", "drc_separation11.png"
class Gen
def produce(s1, s2)
pts = [
RBA::Point::new(0, 0),
RBA::Point::new(2000, 0),
RBA::Point::new(2000, 1500),
RBA::Point::new(0, 1500)
];
s2.insert(RBA::Polygon::new(pts))
pts = [
RBA::Point::new(2000, 1500),
RBA::Point::new(3500, 1500),
RBA::Point::new(3500, 3500),
RBA::Point::new(2000, 3500)
];
s1.insert(RBA::Polygon::new(pts))
pts = [
RBA::Point::new(1000, 3500),
RBA::Point::new(3000, 3500),
RBA::Point::new(3000, 5000),
RBA::Point::new(1000, 5000)
];
s2.insert(RBA::Polygon::new(pts))
pts = [
RBA::Point::new(1000, 5500),
RBA::Point::new(3000, 5500),
RBA::Point::new(3000, 7000),
RBA::Point::new(1000, 7000)
];
s1.insert(RBA::Polygon::new(pts))
end
end
gen = Gen::new
run_demo gen, "input1.sep(input2, 1.0)", "drc_separation12.png"
run_demo gen, "input1.sep(input2, 1.0, without_touching)", "drc_separation13.png"
run_demo gen, "input1.sep(input2, 1.0, without_coincident)", "drc_separation14.png"
# ...
class Gen

View File

@ -3270,17 +3270,18 @@ gsi::Enum<db::collinear_mode_type> decl_CollinearMode ("db", "CollinearMode",
) +
gsi::enum_const ("AlwaysIncludeCollinear", db::AlwaysIncludeCollinear,
"@brief Specifies that check functions should always include collinear edges\n"
"With this specification, the check functions will also check edges which are collinear."
"With this specification, the check functions will also check edges which are collinear (in line). "
"This also checks edges that are not connected - i.e. do not touch."
) +
gsi::enum_const ("IncludeCollinearWhenTouch", db::IncludeCollinearWhenTouch,
"@brief Specifies that check functions should include collinear edges when they touch\n"
"With this specification, the check functions will also check edges which are collinear, but only if they share at least one point. "
"This is the mode that allows checking the 'kissing corner' cases."
"This is the mode that includes checking the 'kissing corner' cases."
) +
gsi::enum_const ("IncludeCollinearWhenOverlap", db::IncludeCollinearWhenOverlap,
"@brief Specifies that check functions should include collinear edges when they overlap\n"
"With this specification, the check functions will also check edges which are collinear, but only if they share more than a single point. "
"This is the mode that allows checking the 'kissing corner' cases."
"This is the mode that excludes the 'kissing corner' cases."
),
"@brief This class represents the collinear_mode type for \\Region#width and related checks.\n"
"This mode determines how collinear edges are treated in the DRC checks. Formally these edges do neither represent "

View File

@ -2894,7 +2894,45 @@ The following image shows the effect of the separation check (input1: red, input
</tr>
</table>
</p><p>
<h3>opposite and rectangle error filtering </h3>
<h3>Touching shapes </h3>
</p><p>
Like <a href="#width">width</a> and <a href="#space">space</a>, the separation check also supports the "without_touching" option.
</p><p>
This option will turn off errors that arise due to
collinear edges touching in one corner (the "kissing corners" configuration).
By default, such edges will yield an error, as they
form a zero-distance situation. With this option in place, no errors will be reported.
</p><p>
The following images illustrate the effect of the "without_touching" option.
The white line at the top of the bottom red shape is actually an edge pair indicating
the zero-distance violation of the separation check:
</p><p>
<table>
<tr>
<td><img src="/images/drc_separation12.png"/></td>
<td><img src="/images/drc_separation13.png"/></td>
</tr>
</table>
</p><p>
Another option is "without_coincident" which turns off errors that arise
at coincident edges. Formally such edges represent a zero-distance situation, hence
are flagged by default. Turning off the check in this case can be helpful when
separating a layer into two parts (e.g. thin/wide metal separation) and an error
between touching regions is not desired.
</p><p>
The "without_coincident" option is a stronger version of "without_touching" and
makes sense only for two-layer checks.
</p><p>
The following images illustrate the effect of the "without_coincident" option:
</p><p>
<table>
<tr>
<td><img src="/images/drc_separation12.png"/></td>
<td><img src="/images/drc_separation14.png"/></td>
</tr>
</table>
</p><p>
<h3>Opposite and rectangle error filtering </h3>
</p><p>
The options for the separation check are those available for the <a href="#width">width</a> or <a href="#space">space</a>
method plus opposite and rectangle error filtering.
@ -3405,10 +3443,15 @@ each other is more or equal than min and less than max </li>
but is more intuitive, as "projecting" is written with a condition, like
"projecting &lt; 2.um". Available operators are: "==", "&lt;", "&lt;=", "&gt;" and "&gt;=".
Double-bounded ranges are also available, like: "0.5 &lt;= projecting &lt; 2.0". </li>
<li><b>transparent </b>: performs the check without shielding (polygon layers only) </li>
<li><b>shielded </b>: performs the check with shielding (polygon layers only) </li>
<li><b>without_touching </b>: With this option present, touching corners (aka "kissing
corners") will not yield errors. The default is to produce errors in these cases. </li>
<li><b>without_coincident </b>: With this option present, coincident edges will not yield errors.
This is a stronger version of "without_touching" and makes sense only for two-layer checks
or raw-mode input layers. It is listed here for completeness. </li>
<li><b>transparent </b>: Performs the check without shielding (polygon layers only) </li>
<li><b>shielded </b>: Performs the check with shielding (polygon layers only) </li>
<li><b>props_eq </b>, <b>props_ne </b>, <b>props_copy </b>: (only props_copy applies to width check) -
see "Properties constraints" below. </li>
See "Properties constraints" below. </li>
</ul>
</p><p>
Note that without the angle_limit, acute corners will always be reported, since two
@ -3509,6 +3552,22 @@ shape's properties to the output too:
space_not_connected = metal1_nets.space(0.4.um, props_ne + props_copy)
space_connected = metal1_nets.space(0.4.um, props_eq + props_copy)
</pre>
</p><p>
<h3>Touching shapes </h3>
</p><p>
The "without_touching" option will turn off errors that arise due to
the "kissing corner" configuration (or "checkerboard pattern"). Formally
this is a width violation across the diagonal, but when considering this
configuration as disconnected boxes, no error should be reported.
</p><p>
The following images illustrate the effect of the "without_touching" option:
</p><p>
<table>
<tr>
<td><img src="/images/drc_width5.png"/></td>
<td><img src="/images/drc_width6.png"/></td>
</tr>
</table>
</p>
<a name="with_angle"/><h2>"with_angle" - Selects edges by their angle</h2>
<keyword name="with_angle"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -4,6 +4,8 @@
<file alias="drc_width2.png">doc/images/drc_width2.png</file>
<file alias="drc_width3.png">doc/images/drc_width3.png</file>
<file alias="drc_width4.png">doc/images/drc_width4.png</file>
<file alias="drc_width5.png">doc/images/drc_width5.png</file>
<file alias="drc_width6.png">doc/images/drc_width6.png</file>
<file alias="drc_width1u.png">doc/images/drc_width1u.png</file>
<file alias="drc_width2u.png">doc/images/drc_width2u.png</file>
<file alias="drc_width3u.png">doc/images/drc_width3u.png</file>
@ -29,6 +31,9 @@
<file alias="drc_separation9.png">doc/images/drc_separation9.png</file>
<file alias="drc_separation10.png">doc/images/drc_separation10.png</file>
<file alias="drc_separation11.png">doc/images/drc_separation11.png</file>
<file alias="drc_separation12.png">doc/images/drc_separation12.png</file>
<file alias="drc_separation13.png">doc/images/drc_separation13.png</file>
<file alias="drc_separation14.png">doc/images/drc_separation14.png</file>
<file alias="drc_raw1.png">doc/images/drc_raw1.png</file>
<file alias="drc_raw2.png">doc/images/drc_raw2.png</file>
<file alias="drc_raw3.png">doc/images/drc_raw3.png</file>

View File

@ -3941,7 +3941,9 @@ CODE
# By default, such edges will yield an error, as they
# form a zero-distance situation. With this option in place, no errors will be reported.
#
# The following images illustrate the effect of the "without_touching" option:
# The following images illustrate the effect of the "without_touching" option.
# The white line at the top of the bottom red shape is actually an edge pair indicating
# the zero-distance violation of the separation check:
#
# @table
# @tr
@ -3963,8 +3965,8 @@ CODE
#
# @table
# @tr
# @td @img(/images/drc_separation12.png) @/td
# @td @img(/images/drc_separation14.png) @/td
# @td @img(/images/drc_separation15.png) @/td
# @/tr
# @/table
#