From be00f308f9f5edfb854a8569c893b9b78bbc86a1 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Wed, 24 Jan 2024 22:01:27 +0100 Subject: [PATCH] Updating documentation --- scripts/drc_lvs_doc/create_drc_samples.rb | 70 ++++++++++++++++++++++ src/db/db/gsiDeclDbRegion.cc | 7 ++- src/doc/doc/about/drc_ref_layer.xml | 67 +++++++++++++++++++-- src/doc/doc/images/drc_separation12.png | Bin 0 -> 5998 bytes src/doc/doc/images/drc_separation13.png | Bin 0 -> 6171 bytes src/doc/doc/images/drc_separation14.png | Bin 0 -> 6195 bytes src/doc/doc/images/drc_width5.png | Bin 0 -> 6312 bytes src/doc/doc/images/drc_width6.png | Bin 0 -> 6427 bytes src/doc/docDRCLVSResources.qrc | 5 ++ src/drc/drc/built-in-macros/_drc_layer.rb | 6 +- 10 files changed, 146 insertions(+), 9 deletions(-) create mode 100644 src/doc/doc/images/drc_separation12.png create mode 100644 src/doc/doc/images/drc_separation13.png create mode 100644 src/doc/doc/images/drc_separation14.png create mode 100644 src/doc/doc/images/drc_width5.png create mode 100644 src/doc/doc/images/drc_width6.png diff --git a/scripts/drc_lvs_doc/create_drc_samples.rb b/scripts/drc_lvs_doc/create_drc_samples.rb index 5594555be..feffbc2ad 100644 --- a/scripts/drc_lvs_doc/create_drc_samples.rb +++ b/scripts/drc_lvs_doc/create_drc_samples.rb @@ -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 diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc index 2c33ddb34..5aef1d2fc 100644 --- a/src/db/db/gsiDeclDbRegion.cc +++ b/src/db/db/gsiDeclDbRegion.cc @@ -3270,17 +3270,18 @@ gsi::Enum 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 " diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index 2e5e6b2b9..6a349c45b 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -2894,7 +2894,45 @@ The following image shows the effect of the separation check (input1: red, input

-

opposite and rectangle error filtering

+

Touching shapes

+

+Like width and space, the separation check also supports the "without_touching" option. +

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

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

+ + + + + +
+

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

+ + + + + +
+

+

Opposite and rectangle error filtering

The options for the separation check are those available for the width or space method plus opposite and rectangle error filtering. @@ -3405,10 +3443,15 @@ 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". -

  • transparent : performs the check without shielding (polygon layers only)
  • -
  • shielded : performs the check with shielding (polygon layers only)
  • +
  • without_touching : 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 +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)
  • props_eq , props_ne , props_copy : (only props_copy applies to width check) - -see "Properties constraints" below.
  • +See "Properties constraints" below.

    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) +

    +

    Touching shapes

    +

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

    +The following images illustrate the effect of the "without_touching" option: +

    + + + + + +

    "with_angle" - Selects edges by their angle

    diff --git a/src/doc/doc/images/drc_separation12.png b/src/doc/doc/images/drc_separation12.png new file mode 100644 index 0000000000000000000000000000000000000000..70847f7910710720edaf95a43c2d4ab03337efc3 GIT binary patch literal 5998 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 literal 0 HcmV?d00001 diff --git a/src/doc/doc/images/drc_separation13.png b/src/doc/doc/images/drc_separation13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a18eac5058560e17de7f670cf26560a73ebfeef GIT binary patch literal 6171 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 literal 0 HcmV?d00001 diff --git a/src/doc/doc/images/drc_width5.png b/src/doc/doc/images/drc_width5.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb7818143cf99f030f51f3c8fc310d9aa26f4ae GIT binary patch literal 6312 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 H@8rJ#m#1B% literal 0 HcmV?d00001 diff --git a/src/doc/docDRCLVSResources.qrc b/src/doc/docDRCLVSResources.qrc index e91766fe5..e4449b7ed 100644 --- a/src/doc/docDRCLVSResources.qrc +++ b/src/doc/docDRCLVSResources.qrc @@ -4,6 +4,8 @@ doc/images/drc_width2.png doc/images/drc_width3.png doc/images/drc_width4.png + doc/images/drc_width5.png + doc/images/drc_width6.png doc/images/drc_width1u.png doc/images/drc_width2u.png doc/images/drc_width3u.png @@ -29,6 +31,9 @@ doc/images/drc_separation9.png doc/images/drc_separation10.png doc/images/drc_separation11.png + doc/images/drc_separation12.png + doc/images/drc_separation13.png + doc/images/drc_separation14.png doc/images/drc_raw1.png doc/images/drc_raw2.png doc/images/drc_raw3.png diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 3fa5c0bf2..bf0af2d20 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -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 #