From 5e04ea6156f1c2ccda3d2d4646437fc3569687ac Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Wed, 26 May 2021 01:12:35 +0200 Subject: [PATCH] Clarification of negative edge output for two-layer DRC's. --- scripts/create_drc_samples.rb | 1 + .../built-in-macros/_drc_cop_integration.rb | 37 +++++++++++++++--- src/lay/lay/doc/about/drc_ref_global.xml | 31 ++++++++++++++- src/lay/lay/doc/about/drc_ref_layer.xml | 27 ++++++++----- src/lay/lay/doc/about/drc_ref_netter.xml | 19 +++++++++ src/lay/lay/doc/images/drc_separation1un.png | Bin 0 -> 9768 bytes src/lay/lay/layDRCLVSHelpResources.qrc | 1 + 7 files changed, 99 insertions(+), 17 deletions(-) create mode 100644 src/lay/lay/doc/images/drc_separation1un.png diff --git a/scripts/create_drc_samples.rb b/scripts/create_drc_samples.rb index 02be4140d..f7963be5d 100644 --- a/scripts/create_drc_samples.rb +++ b/scripts/create_drc_samples.rb @@ -269,6 +269,7 @@ gen = Gen::new run_demo gen, "input1.separation(input2, 1.2, euclidian)", "drc_separation1.png" run_demo gen, "input1.drc(separation(input2, euclidian) < 1.2)", "drc_separation1u.png" +run_demo gen, "input1.drc((separation(input2) >= 1.2).first_edges)", "drc_separation1un.png" class Gen def produce(s1, s2) diff --git a/src/drc/drc/built-in-macros/_drc_cop_integration.rb b/src/drc/drc/built-in-macros/_drc_cop_integration.rb index f047cf3bb..a53504a73 100644 --- a/src/drc/drc/built-in-macros/_drc_cop_integration.rb +++ b/src/drc/drc/built-in-macros/_drc_cop_integration.rb @@ -1024,7 +1024,7 @@ CODE # # With a lower and upper limit, the results are edges marking the positions on the # primary shape where the condition is met. - # With a lower limit alone, these markers are formed by two, identical but opposite edges attached to + # With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to # the primary shape. Without an upper limit only, the first edge of the marker is attached to the # primary shape while the second edge is attached to the shape of the "other" layer. # @@ -1034,6 +1034,12 @@ CODE # @td @img(/images/drc_enc2u.png) @/td # @/tr # @/table + # + # When "larger than" constraints are used, this function will produce the edges from the + # first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from + # the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the + # actual edges from the first input (see \separation for an example). + # # %DRC% # @name separation @@ -1049,10 +1055,6 @@ CODE # opposite and rectangle filtering. See \Layer#separation for details about opposite and # rectangle error filtering. # - # When "larger than" constraints are used, this function will produce the edges from the - # first layer. The result will still be edge pairs for consistency, but each edge pair holds one edge from - # the original polygon plus a reverse copy of that edge in the second member. - # # @h3 Classic mode @/h3 # # Like \enclosing, this function is available as a classic DRC function with a layer as the first @@ -1085,6 +1087,23 @@ CODE # @td @img(/images/drc_separation1u.png) @/td # @/tr # @/table + # + # When "larger than" constraints are used, this function will produce the edges from the + # first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from + # the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the + # actual edges from the first input: + # + # @code + # l1_edges_without_l2 = l1.drc((separation(l2) >= 1.0).first_edges) + # @/code + # + # The following image shows the effect of such a negative-output separation check: + # + # @table + # @tr + # @td @img(/images/drc_separation1un.png) @/td + # @/tr + # @/table # %DRC% # @name overlap @@ -1128,6 +1147,12 @@ CODE # @td @img(/images/drc_overlap2u.png) @/td # @/tr # @/table + # + # When "larger than" constraints are used, this function will produce the edges from the + # first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from + # the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the + # actual edges from the first input (see \separation for an example). + # # %DRC% # @name width @@ -1184,7 +1209,7 @@ CODE # # With a lower and upper limit or with the "equal" condition, the results are edges marking the positions on the # primary shape where the condition is met. - # With a lower limit alone, these markers are formed by two, identical but opposite edges attached to + # With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to # the primary shape. Without an upper limit only, both edges are attached to different sides of the primary # shape. # diff --git a/src/lay/lay/doc/about/drc_ref_global.xml b/src/lay/lay/doc/about/drc_ref_global.xml index d383f6227..cf4e00cce 100644 --- a/src/lay/lay/doc/about/drc_ref_global.xml +++ b/src/lay/lay/doc/about/drc_ref_global.xml @@ -586,7 +586,7 @@ These markers indicate the presence of the specified condition.

With a lower and upper limit, the results are edges marking the positions on the primary shape where the condition is met. -With a lower limit alone, these markers are formed by two, identical but opposite edges attached to +With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to the primary shape. Without an upper limit only, the first edge of the marker is attached to the primary shape while the second edge is attached to the shape of the "other" layer.

@@ -596,6 +596,11 @@ primary shape while the second edge is attached to the shape of the "other" laye +

+When "larger than" constraints are used, this function will produce the edges from the +first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from +the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the +actual edges from the first input (see separation for an example).

"error" - Prints an error

@@ -1216,6 +1221,11 @@ errors = in.drc(overlap(other) < 0.2.um) +

+When "larger than" constraints are used, this function will produce the edges from the +first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from +the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the +actual edges from the first input (see separation for an example).

"overlapping" - Selects shapes overlapping with other shapes

@@ -1511,6 +1521,23 @@ work in generating error markers. +

+When "larger than" constraints are used, this function will produce the edges from the +first layer only. The result will still be edge pairs for consistency, but each edge pair holds one edge from +the original polygon plus a reverse copy of that edge in the second member. Use "first_edges" to extract the +actual edges from the first input: +

+

+l1_edges_without_l2 = l1.drc((separation(l2) >= 1.0).first_edges)
+
+

+The following image shows the effect of such a negative-output separation check: +

+ + + + +

"silent" - Resets verbose mode

@@ -1863,7 +1890,7 @@ errors = in.drc(0.1.um <= width < 0.2.um)

With a lower and upper limit or with the "equal" condition, the results are edges marking the positions on the primary shape where the condition is met. -With a lower limit alone, these markers are formed by two, identical but opposite edges attached to +With a lower limit alone, the results are edge pairs which are formed by two identical, but opposite edges attached to the primary shape. Without an upper limit only, both edges are attached to different sides of the primary shape.

diff --git a/src/lay/lay/doc/about/drc_ref_layer.xml b/src/lay/lay/doc/about/drc_ref_layer.xml index 4b9b0554c..e7d077cd2 100644 --- a/src/lay/lay/doc/about/drc_ref_layer.xml +++ b/src/lay/lay/doc/about/drc_ref_layer.xml @@ -214,7 +214,7 @@ new_layer = layer.collect { |polygon| polygon.transformed(t) }

Usage:

    -
  • layer.collect { |object| ... }
  • +
  • layer.collect_to_edge_pairs { |object| ... }

This method is similar to collect, but creates an edge pair layer. It expects the block to @@ -224,7 +224,7 @@ deliver EdgePair,

Usage:

This method is similar to collect, but creates an edge layer. It expects the block to @@ -235,7 +235,7 @@ contours will be turned into edge sequences.

Usage:

This method is similar to collect, but creates a polygon layer. It expects the block to @@ -1438,7 +1438,7 @@ See clean for a discussion of the raw state.

See isolated for a description of that method

-

"isolated" - An isolation check

+

"isolated" - An inter-polygon isolation check

Usage: