diff --git a/scripts/drc_lvs_doc/create_drc_samples.rb b/scripts/drc_lvs_doc/create_drc_samples.rb index feffbc2ad..bbc97987e 100644 --- a/scripts/drc_lvs_doc/create_drc_samples.rb +++ b/scripts/drc_lvs_doc/create_drc_samples.rb @@ -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" # ... diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index 6a349c45b..c8f124c5c 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -2896,14 +2896,14 @@ The following image shows the effect of the separation check (input1: red, input

Touching shapes

-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 -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.

-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:

@@ -2914,16 +2914,16 @@ the zero-distance violation of the separation check:

-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:

@@ -3443,10 +3443,10 @@ each other is more or equal than min and less than max 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". -
  • without_touching : With this option present, touching corners (aka "kissing +
  • without_touching_corners : With this option present, touching corners (aka "kissing corners") will not yield errors. The default is to produce errors in these cases.
  • -
  • without_coincident : 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 +
  • without_touching_edges : 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.
  • transparent : Performs the check without shielding (polygon layers only)
  • shielded : Performs the check with shielding (polygon layers only)
  • @@ -3555,12 +3555,12 @@ space_connected = metal1_nets.space(0.4.um, props_eq + props_copy)

    Touching shapes

    -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:

    diff --git a/src/doc/doc/images/drc_separation13.png b/src/doc/doc/images/drc_separation13.png index 0a18eac50..00de3a91c 100644 Binary files a/src/doc/doc/images/drc_separation13.png and b/src/doc/doc/images/drc_separation13.png differ diff --git a/src/doc/doc/images/drc_separation14.png b/src/doc/doc/images/drc_separation14.png index e6812a656..e9a4cca31 100644 Binary files a/src/doc/doc/images/drc_separation14.png and b/src/doc/doc/images/drc_separation14.png differ diff --git a/src/doc/doc/images/drc_width6.png b/src/doc/doc/images/drc_width6.png index 030ec7c39..50c558bfe 100644 Binary files a/src/doc/doc/images/drc_width6.png and b/src/doc/doc/images/drc_width6.png differ diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index 5b9296ac9..14eb0c842 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -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 diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index d8de4d8c4..ffa80b943 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -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 diff --git a/testdata/drc/drcSimpleTests_90.drc b/testdata/drc/drcSimpleTests_90.drc index c0e50e5ca..eb85f24ee 100644 --- a/testdata/drc/drcSimpleTests_90.drc +++ b/testdata/drc/drcSimpleTests_90.drc @@ -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) diff --git a/testdata/drc/drcSimpleTests_91.drc b/testdata/drc/drcSimpleTests_91.drc index 0425700f7..0b79b7773 100644 --- a/testdata/drc/drcSimpleTests_91.drc +++ b/testdata/drc/drcSimpleTests_91.drc @@ -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)