mirror of https://github.com/KLayout/klayout.git
Simple test for collinear mode feature
This commit is contained in:
parent
78c5e229ff
commit
1b887dbbb3
|
|
@ -328,6 +328,12 @@ module DRC
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def without_coincident(f = true)
|
||||||
|
self._context("without_coincident") do
|
||||||
|
DRCCollinearMode::new(f ? RBA::Region::NeverIncludeCollinear : RBA::Region::IncludeCollinearWhenTouch)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def euclidian
|
def euclidian
|
||||||
DRCMetrics::new(RBA::Region::Euclidian)
|
DRCMetrics::new(RBA::Region::Euclidian)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -3689,6 +3689,9 @@ CODE
|
||||||
# Double-bounded ranges are also available, like: "0.5 <= projecting < 2.0". @/li
|
# 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 @/b: With this option present, touching corners (aka "kissing
|
||||||
# corners") will not yield errors. The default is to produce errors in these cases. @/li
|
# 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 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 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) -
|
# @li @b props_eq @/b, @b props_ne @/b, @b props_copy @/b: (only props_copy applies to width check) -
|
||||||
|
|
@ -3796,12 +3799,12 @@ CODE
|
||||||
#
|
#
|
||||||
# @h3 Touching shapes @/h3
|
# @h3 Touching shapes @/h3
|
||||||
#
|
#
|
||||||
# The \without_touching option will turn off errors that arise due to
|
# The "without_touching" option will turn off errors that arise due to
|
||||||
# the "kissing corner" configuration (or "checkerboard pattern"). Formally
|
# the "kissing corner" configuration (or "checkerboard pattern"). Formally
|
||||||
# this is a width violation across the diagonal, but when considering this
|
# this is a width violation across the diagonal, but when considering this
|
||||||
# configuration as disconnected boxes, no error should be reported.
|
# 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" option:
|
||||||
#
|
#
|
||||||
# @table
|
# @table
|
||||||
# @tr
|
# @tr
|
||||||
|
|
@ -3809,7 +3812,6 @@ CODE
|
||||||
# @td @img(/images/drc_width6.png) @/td
|
# @td @img(/images/drc_width6.png) @/td
|
||||||
# @/tr
|
# @/tr
|
||||||
# @/table
|
# @/table
|
||||||
#
|
|
||||||
|
|
||||||
# %DRC%
|
# %DRC%
|
||||||
# @name space
|
# @name space
|
||||||
|
|
@ -3932,14 +3934,14 @@ CODE
|
||||||
#
|
#
|
||||||
# @h3 Touching shapes @/h3
|
# @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" option.
|
||||||
#
|
#
|
||||||
# This option will turn off errors that arise due to
|
# This option will turn off errors that arise due to
|
||||||
# collinear edges touching in one corner (the "kissing corners" configuration).
|
# collinear edges touching in one corner (the "kissing corners" configuration).
|
||||||
# By default, such edges will yield an error, as they
|
# 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.
|
# 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:
|
||||||
#
|
#
|
||||||
# @table
|
# @table
|
||||||
# @tr
|
# @tr
|
||||||
|
|
@ -3948,6 +3950,24 @@ CODE
|
||||||
# @/tr
|
# @/tr
|
||||||
# @/table
|
# @/table
|
||||||
#
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# The "without_coincident" option is a stronger version of "without_touching" and
|
||||||
|
# makes sense only for two-layer checks.
|
||||||
|
#
|
||||||
|
# The following images illustrate the effect of the "without_coincident" option:
|
||||||
|
#
|
||||||
|
# @table
|
||||||
|
# @tr
|
||||||
|
# @td @img(/images/drc_separation14.png) @/td
|
||||||
|
# @td @img(/images/drc_separation15.png) @/td
|
||||||
|
# @/tr
|
||||||
|
# @/table
|
||||||
|
#
|
||||||
# @h3 Opposite and rectangle error filtering @/h3
|
# @h3 Opposite and rectangle error filtering @/h3
|
||||||
#
|
#
|
||||||
# The options for the separation check are those available for the \width or \space
|
# The options for the separation check are those available for the \width or \space
|
||||||
|
|
|
||||||
|
|
@ -1617,3 +1617,12 @@ TEST(89_deep_with_mag_cop_size_aniso)
|
||||||
run_test (_this, "89", true);
|
run_test (_this, "89", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(90_collinear_mode)
|
||||||
|
{
|
||||||
|
run_test (_this, "90", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(90d_collinear_mode)
|
||||||
|
{
|
||||||
|
run_test (_this, "90", true);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
|
||||||
|
source $drc_test_source
|
||||||
|
target $drc_test_target
|
||||||
|
|
||||||
|
if $drc_test_deep
|
||||||
|
deep
|
||||||
|
end
|
||||||
|
|
||||||
|
l1 = input(1, 0)
|
||||||
|
l1_raw = input(1, 0).raw
|
||||||
|
l2 = input(2, 0)
|
||||||
|
|
||||||
|
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.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_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.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.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)
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue