Renamed new DRC options to: without_touching_corners and without_touching_edges as this is more consistent

This commit is contained in:
Matthias Koefferlein 2024-02-06 20:53:17 +01:00
parent e08429ee44
commit a2877358a5
9 changed files with 46 additions and 46 deletions

View File

@ -206,7 +206,7 @@ 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"
run_demo gen, "input.width(1.0, without_touching_corners)", "drc_width6.png"
class Gen
def produce(s1, s2)
@ -448,8 +448,8 @@ 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"
run_demo gen, "input1.sep(input2, 1.0, without_touching_corners)", "drc_separation13.png"
run_demo gen, "input1.sep(input2, 1.0, without_touching_edges)", "drc_separation14.png"
# ...

View File

@ -2896,14 +2896,14 @@ The following image shows the effect of the separation check (input1: red, input
</p><p>
<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.
Like <a href="#width">width</a> and <a href="#space">space</a>, the separation check also supports the "without_touching_corners" option.
</p><p>
This option will turn off errors that arise due to
collinear edges touching in one corner (the "kissing corners" configuration).
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 following images illustrate the effect of the "without_touching_corners" 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>
@ -2914,16 +2914,16 @@ the zero-distance violation of the separation check:
</tr>
</table>
</p><p>
Another option is "without_coincident" which turns off errors that arise
Another option is "without_touching_edges" 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
The "without_touching_edges" option is a stronger version of "without_touching_corners" and
makes sense only for two-layer checks.
</p><p>
The following images illustrate the effect of the "without_coincident" option:
The following images illustrate the effect of the "without_touching_edges" option:
</p><p>
<table>
<tr>
@ -3443,10 +3443,10 @@ 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>without_touching </b>: With this option present, touching corners (aka "kissing
<li><b>without_touching_corners </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
<li><b>without_touching_edges </b>: With this option present, coincident edges will not yield errors.
This is a stronger version of "without_touching_corners" 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>
@ -3555,12 +3555,12 @@ space_connected = metal1_nets.space(0.4.um, props_eq + props_copy)
</p><p>
<h3>Touching shapes </h3>
</p><p>
The "without_touching" option will turn off errors that arise due to
The "without_touching_corners" 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:
The following images illustrate the effect of the "without_touching_corners" option:
</p><p>
<table>
<tr>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -322,14 +322,14 @@ module DRC
end
end
def without_touching(f = true)
self._context("without_touching") do
def without_touching_corners(f = true)
self._context("without_touching_corners") do
DRCZeroDistanceMode::new(f ? RBA::Region::IncludeZeroDistanceWhenOverlapping : RBA::Region::IncludeZeroDistanceWhenTouching)
end
end
def without_coincident(f = true)
self._context("without_coincident") do
def without_touching_edges(f = true)
self._context("without_touching_edges") do
DRCZeroDistanceMode::new(f ? RBA::Region::NeverIncludeZeroDistance : RBA::Region::IncludeZeroDistanceWhenTouching)
end
end

View File

@ -3687,10 +3687,10 @@ CODE
# but is more intuitive, as "projecting" is written with a condition, like
# "projecting < 2.um". Available operators are: "==", "<", "<=", ">" and ">=".
# Double-bounded ranges are also available, like: "0.5 <= projecting < 2.0". @/li
# @li @b without_touching @/b: With this option present, touching corners (aka "kissing
# @li @b without_touching_corners @/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
# @li @b without_touching_edges @/b: With this option present, coincident edges will not yield errors.
# This is a stronger version of "without_touching_corners" 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
@ -3799,12 +3799,12 @@ CODE
#
# @h3 Touching shapes @/h3
#
# The "without_touching" option will turn off errors that arise due to
# The "without_touching_corners" 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.
#
# The following images illustrate the effect of the "without_touching" option:
# The following images illustrate the effect of the "without_touching_corners" option:
#
# @table
# @tr
@ -3934,14 +3934,14 @@ CODE
#
# @h3 Touching shapes @/h3
#
# Like \width and \space, the separation check also supports the "without_touching" option.
# Like \width and \space, the separation check also supports the "without_touching_corners" option.
#
# This option will turn off errors that arise due to
# 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.
#
# The following images illustrate the effect of the "without_touching" option.
# The following images illustrate the effect of the "without_touching_corners" 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:
#
@ -3952,16 +3952,16 @@ CODE
# @/tr
# @/table
#
# Another option is "without_coincident" which turns off errors that arise
# Another option is "without_touching_edges" 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.
#
# The "without_coincident" option is a stronger version of "without_touching" and
# The "without_touching_edges" option is a stronger version of "without_touching_corners" and
# makes sense only for two-layer checks.
#
# The following images illustrate the effect of the "without_coincident" option:
# The following images illustrate the effect of the "without_touching_edges" option:
#
# @table
# @tr

View File

@ -14,21 +14,21 @@ l1.output(1, 0)
l2.output(2, 0)
l1.width(600.nm).output(100, 0)
l1.width(600.nm, without_touching).output(101, 0)
l1.width(600.nm, without_coincident).output(102, 0)
l1.width(600.nm, without_touching_corners).output(101, 0)
l1.width(600.nm, without_touching_edges).output(102, 0)
l1.space(600.nm).output(200, 0)
l1.space(600.nm, without_touching).output(201, 0)
l1.space(600.nm, without_coincident).output(202, 0)
l1.space(600.nm, without_touching_corners).output(201, 0)
l1.space(600.nm, without_touching_edges).output(202, 0)
l1_raw.space(600.nm).output(210, 0)
l1_raw.space(600.nm, without_touching).output(211, 0)
l1_raw.space(600.nm, without_coincident).output(212, 0)
l1_raw.space(600.nm, without_touching_corners).output(211, 0)
l1_raw.space(600.nm, without_touching_edges).output(212, 0)
l1.sep(l2, 600.nm).output(300, 0)
l1.sep(l2, 600.nm, without_touching).output(301, 0)
l1.sep(l2, 600.nm, without_coincident).output(302, 0)
l1.sep(l2, 600.nm, without_touching_corners).output(301, 0)
l1.sep(l2, 600.nm, without_touching_edges).output(302, 0)
l1.drc(space < 600.nm).output(400, 0)
l1.drc(space(without_touching) < 600.nm).output(401, 0)
l1.drc(space(without_coincident) < 600.nm).output(402, 0)
l1.drc(space(without_touching_corners) < 600.nm).output(401, 0)
l1.drc(space(without_touching_edges) < 600.nm).output(402, 0)

View File

@ -11,24 +11,24 @@ l1 = input(1, 0)
l1.output(1, 0)
l1.space(600.nm).output(100, 0)
l1.space(600.nm, without_touching).output(101, 0)
l1.space(600.nm, without_coincident).output(102, 0)
l1.space(600.nm, without_touching_corners).output(101, 0)
l1.space(600.nm, without_touching_edges).output(102, 0)
l1.space(600.nm, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(103, 0)
l1.space(600.nm, projection).output(110, 0)
l1.space(600.nm, projection, without_touching).output(111, 0)
l1.space(600.nm, projection, without_coincident).output(112, 0)
l1.space(600.nm, projection, without_touching_corners).output(111, 0)
l1.space(600.nm, projection, without_touching_edges).output(112, 0)
l1.space(600.nm, projection, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(113, 0)
l1.space(600.nm, square).output(120, 0)
l1.space(600.nm, square, without_touching).output(121, 0)
l1.space(600.nm, square, without_coincident).output(122, 0)
l1.space(600.nm, square, without_touching_corners).output(121, 0)
l1.space(600.nm, square, without_touching_edges).output(122, 0)
l1.space(600.nm, square, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(123, 0)
l1.data.min_coherence = true
l1.space(600.nm).output(200, 0)
l1.space(600.nm, without_touching).output(201, 0)
l1.space(600.nm, without_coincident).output(202, 0)
l1.space(600.nm, without_touching_corners).output(201, 0)
l1.space(600.nm, without_touching_edges).output(202, 0)
l1.space(600.nm, DRCZeroDistanceMode::new(RBA::ZeroDistanceMode::IncludeZeroDistanceWhenCollinearAndTouching)).output(203, 0)