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

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

+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: +
+
![]() |
+
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:
This method is similar to collect, but creates an edge pair layer. It expects the block to
@@ -224,7 +224,7 @@ deliver
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
-Usage:
-See space for a description of this method. -In contrast to space, this +See space for a description of this method. "isolated" is the space check variant which checks different polygons only. +In contrast to space, the "isolated" method is available for polygon layers only, since only on such layers different polygons can be identified.
@@ -1845,7 +1845,7 @@ This method is available for polygons only. It returns a new layer containing the selected shapes. A version which modifies self is select_not_overlapping.
-Usage:
-See space for a description of this method. -In contrast to space, this +See space for a description of this method. +"notch" is the space check variant which finds space violations within a single polygon, but not against other polygons. +In contrast to space, the "notch" method is available for polygon layers only, since only on such layers different polygons can be identified. Also, opposite and rectangle error filtering is not available for this method. @@ -1918,6 +1919,9 @@ on polygons and edges (input1: red, input2: blue):

+In deep mode, "or" or "|" does not imply merging. In deep mode, +"or" is an alias for "+" ("add").
Usage:
"Smoothing" returns a simplified version of the polygons. Simplification is achieved by removing vertices unless the resulting polygon deviates by more than the given distance d from the original polygon.
+"hv_keep" is a boolean parameter which makes the smoothing function maintain +horizontal or vertical edges. The default is false, meaning horizontal or +vertical edges may be changed into tilted ones. +
This method return a layer wit the modified polygons. Merged semantics applies for this method (see raw and clean).
diff --git a/src/lay/lay/doc/about/drc_ref_netter.xml b/src/lay/lay/doc/about/drc_ref_netter.xml index 25d84a583..8e8cf429d 100644 --- a/src/lay/lay/doc/about/drc_ref_netter.xml +++ b/src/lay/lay/doc/about/drc_ref_netter.xml @@ -99,6 +99,25 @@ connect(contact, metal1) errors = antenna_check(gate, metal1, 50.0)+Usually antenna checks apply to multiple metal layers. In this case, +the connectivity needs to be extended after the first check to include +the next metal layers. This can be achieved with incremental connects: +
+
+# provide connections up to metal1 +connect(gate, poly) +connect(poly, contact) +connect(contact, metal1) +metal1_errors = antenna_check(gate, metal1, 50.0) + +# now *add* connections up to metal2 +connect(metal1, via1) +connect(via1, metal2) +metal2_errors = antenna_check(gate, metal2, 50.0) + +... continue this scheme with further metal layers ... ++
Plasma induced damage can be rectified by including diodes
which create a safe current path for discharging the metal
islands. Such diodes can be identified with a recognition layer
diff --git a/src/lay/lay/doc/images/drc_separation1un.png b/src/lay/lay/doc/images/drc_separation1un.png
new file mode 100644
index 000000000..26a5fbd91
Binary files /dev/null and b/src/lay/lay/doc/images/drc_separation1un.png differ
diff --git a/src/lay/lay/layDRCLVSHelpResources.qrc b/src/lay/lay/layDRCLVSHelpResources.qrc
index cdc914da3..d11b89b5e 100644
--- a/src/lay/lay/layDRCLVSHelpResources.qrc
+++ b/src/lay/lay/layDRCLVSHelpResources.qrc
@@ -18,6 +18,7 @@