diff --git a/scripts/drc_lvs_doc/create_drc_samples.rb b/scripts/drc_lvs_doc/create_drc_samples.rb index 5a9c1c332..18450e1df 100644 --- a/scripts/drc_lvs_doc/create_drc_samples.rb +++ b/scripts/drc_lvs_doc/create_drc_samples.rb @@ -939,10 +939,10 @@ end gen = Gen::new -run_demo gen, "input1.sized(1.um, steps(1), inside(input2))", "drc_sized_inside1.png" -run_demo gen, "input1.sized(2.um, steps(2), inside(input2))", "drc_sized_inside2.png" -run_demo gen, "input1.sized(3.um, steps(3), inside(input2))", "drc_sized_inside3.png" -run_demo gen, "input1.sized(10.um, steps(10), inside(input2))", "drc_sized_inside4.png" +run_demo gen, "input1.sized(1.um, steps(1), size_inside(input2))", "drc_sized_inside1.png" +run_demo gen, "input1.sized(2.um, steps(2), size_inside(input2))", "drc_sized_inside2.png" +run_demo gen, "input1.sized(3.um, steps(3), size_inside(input2))", "drc_sized_inside3.png" +run_demo gen, "input1.sized(10.um, steps(10), size_inside(input2))", "drc_sized_inside4.png" class Gen def produce(s1, s2) diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index 1ebe933d4..4a3f99e18 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -3056,11 +3056,11 @@ The following images shows the effect of some rectangle filter modes:

Usage:

See sized for a description of the options. @@ -3071,12 +3071,12 @@ it is called on. The input layer is returned and available for further processin

Usage:

This method requires a polygon layer. It will apply a bias per edge of the polygons @@ -3128,32 +3128,32 @@ The following images show the effect of various forms of the "sized" method:

-The "inside" option and the "steps" option implement incremental size. Incremental +The "size_inside" option and the "steps" option implement incremental size. Incremental size means that the sizing value is applied in n steps. Between the steps, the sized -shape is confined to the "inside" layer by means of a boolean "AND" operation. +shape is confined to the "size_inside" layer by means of a boolean "AND" operation.

This scheme is used to implement latch-up rules where a device active region has to -be close to a well tap. By using the well layer as the "inside" layer, the size function +be close to a well tap. By using the well layer as the "size_inside" layer, the size function follows the well contours. The steps have to selected such that the per-step size value is smaller than the minimum space of the well shapes. With that, the sized shapes will not cross over to neighbor well regions. Specifically, the per-step size has to be less than about 70% of the minimum space to account for the minimum corner-to-corner case with Euclidian space measurements.

-"inside" and "steps" can be used with positive sizing values only. +"size_inside" and "steps" can be used with positive sizing values only. A steps value of 0 will not execute any sizing at all.

-"outside" acts like "inside", but instead of confining the sized region to the +"size_outside" acts like "size_inside", but instead of confining the sized region to the inside of the given layer, it is confined to be outside of that layer. Technically, a boolean "NOT" is performed instead of a boolean "AND".

-An example for the "inside" option is this: +An example for the "size_inside" option is this:

-ntap.sized(30.um, inside(nwell), steps(100))
+ntap.sized(30.um, size_inside(nwell), steps(100))
 

-The effect of the "inside" option is shown here: +The effect of the "size_inside" option is shown here:

diff --git a/src/doc/doc/about/drc_ref_netter.xml b/src/doc/doc/about/drc_ref_netter.xml index e299ae380..dac86f2ed 100644 --- a/src/doc/doc/about/drc_ref_netter.xml +++ b/src/doc/doc/about/drc_ref_netter.xml @@ -427,6 +427,8 @@ the netter object.

Usage:

Layer names are listed in the LayoutToNetlist (L2N) or LVS database. They @@ -455,6 +457,12 @@ first time.

name can only be used once on a layer and the layer names must be unique (not taken by another layer). +

+The layer/datatype or LayerInfo specification is optional and will +be used to configure the internal layout. This information is also +persisted inside database files. Specifying a layer/datatype information +is useful, if a layer is not an original layer, but is to be restored +to an actual layout layer later.

"name_prefix" - Specifies the name prefix for auto-generated layer names

diff --git a/src/doc/doc/images/drc_sized_inside1.png b/src/doc/doc/images/drc_sized_inside1.png index e013d4407..c0b69096a 100644 Binary files a/src/doc/doc/images/drc_sized_inside1.png and b/src/doc/doc/images/drc_sized_inside1.png differ diff --git a/src/doc/doc/images/drc_sized_inside2.png b/src/doc/doc/images/drc_sized_inside2.png index 4600f454a..0db6f427d 100644 Binary files a/src/doc/doc/images/drc_sized_inside2.png and b/src/doc/doc/images/drc_sized_inside2.png differ diff --git a/src/doc/doc/images/drc_sized_inside3.png b/src/doc/doc/images/drc_sized_inside3.png index d1e5cb5bb..03fa77f63 100644 Binary files a/src/doc/doc/images/drc_sized_inside3.png and b/src/doc/doc/images/drc_sized_inside3.png differ diff --git a/src/doc/doc/images/drc_sized_inside4.png b/src/doc/doc/images/drc_sized_inside4.png index d7f82284e..4845ec9f1 100644 Binary files a/src/doc/doc/images/drc_sized_inside4.png and b/src/doc/doc/images/drc_sized_inside4.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 90a63eb43..bcf27580b 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -317,11 +317,11 @@ module DRC DRCSizingSteps::new(arg) end - def inside(arg) + def size_inside(arg) DRCSizingInside::new(arg) end - def outside(arg) + def size_outside(arg) DRCSizingOutside::new(arg) end diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 3887691a6..0bb26948d 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -4678,12 +4678,12 @@ TP_SCRIPT # %DRC% # @name sized # @brief Polygon sizing (per-edge biasing) - # @synopsis layer.sized(d [, mode] [, inside(l) [, steps(n)]]) - # @synopsis layer.sized(d, inside(l) [, steps(n)] [, mode]) - # @synopsis layer.sized(d, outside(l) [, steps(n)] [, mode]) + # @synopsis layer.sized(d [, mode] [, size_inside(l) [, steps(n)]]) + # @synopsis layer.sized(d, size_inside(l) [, steps(n)] [, mode]) + # @synopsis layer.sized(d, size_outside(l) [, steps(n)] [, mode]) # @synopsis layer.sized(dx, dy [, mode]) - # @synopsis layer.sized(dx, dy, inside(l) [, steps(n)] [, mode]) - # @synopsis layer.sized(dx, dy, outside(l) [, steps(n)] [, mode]) + # @synopsis layer.sized(dx, dy, size_inside(l) [, steps(n)] [, mode]) + # @synopsis layer.sized(dx, dy, size_outside(l) [, steps(n)] [, mode]) # # This method requires a polygon layer. It will apply a bias per edge of the polygons # and return the biased layer. The layer that this method is called on is not modified. @@ -4734,32 +4734,32 @@ TP_SCRIPT # @/tr # @/table # - # The "inside" option and the "steps" option implement incremental size. Incremental + # The "size_inside" option and the "steps" option implement incremental size. Incremental # size means that the sizing value is applied in n steps. Between the steps, the sized - # shape is confined to the "inside" layer by means of a boolean "AND" operation. + # shape is confined to the "size_inside" layer by means of a boolean "AND" operation. # # This scheme is used to implement latch-up rules where a device active region has to - # be close to a well tap. By using the well layer as the "inside" layer, the size function + # be close to a well tap. By using the well layer as the "size_inside" layer, the size function # follows the well contours. The steps have to selected such that the per-step size value # is smaller than the minimum space of the well shapes. With that, the sized shapes will # not cross over to neighbor well regions. Specifically, the per-step size has to be less # than about 70% of the minimum space to account for the minimum corner-to-corner case # with Euclidian space measurements. # - # "inside" and "steps" can be used with positive sizing values only. + # "size_inside" and "steps" can be used with positive sizing values only. # A steps value of 0 will not execute any sizing at all. # - # "outside" acts like "inside", but instead of confining the sized region to the + # "size_outside" acts like "size_inside", but instead of confining the sized region to the # inside of the given layer, it is confined to be outside of that layer. Technically, # a boolean "NOT" is performed instead of a boolean "AND". # - # An example for the "inside" option is this: + # An example for the "size_inside" option is this: # # @code - # ntap.sized(30.um, inside(nwell), steps(100)) + # ntap.sized(30.um, size_inside(nwell), steps(100)) # @/code # - # The effect of the "inside" option is shown here: + # The effect of the "size_inside" option is shown here: # # @table # @tr @@ -4777,11 +4777,11 @@ TP_SCRIPT # @name size # @brief Polygon sizing (per-edge biasing, modifies the layer) # @synopsis layer.size(d [, mode]) - # @synopsis layer.size(d, inside(l) [, steps(n)] [, mode]) - # @synopsis layer.size(d, outside(l) [, steps(n)] [, mode]) + # @synopsis layer.size(d, size_inside(l) [, steps(n)] [, mode]) + # @synopsis layer.size(d, size_outside(l) [, steps(n)] [, mode]) # @synopsis layer.size(dx, dy [, mode]) - # @synopsis layer.size(dx, dy, inside(l) [, steps(n)] [, mode]) - # @synopsis layer.size(dx, dy, outside(l) [, steps(n)] [, mode]) + # @synopsis layer.size(dx, dy, size_inside(l) [, steps(n)] [, mode]) + # @synopsis layer.size(dx, dy, size_outside(l) [, steps(n)] [, mode]) # # See \sized for a description of the options. # The size method basically does the same but modifies the layer diff --git a/testdata/drc/drcSimpleTests_130.drc b/testdata/drc/drcSimpleTests_130.drc index 3d538f929..a8bf10a8c 100644 --- a/testdata/drc/drcSimpleTests_130.drc +++ b/testdata/drc/drcSimpleTests_130.drc @@ -12,26 +12,26 @@ l2 = input(2, 0) l1.output(1, 0) l2.output(2, 0) -l1.sized(0.0, steps(50), inside(l2)).output(100, 0) -l1.sized(20.0, steps(0), inside(l2)).output(101, 0) +l1.sized(0.0, steps(50), size_inside(l2)).output(100, 0) +l1.sized(20.0, steps(0), size_inside(l2)).output(101, 0) -l1.sized(20.0, steps(50), inside(l2)).output(110, 0) -l1.sized(50.0, steps(50), outside(l2)).output(111, 0) +l1.sized(20.0, steps(50), size_inside(l2)).output(110, 0) +l1.sized(50.0, steps(50), size_outside(l2)).output(111, 0) l1d = l1.dup -l1d.size(20.0, steps(50), inside(l2)) +l1d.size(20.0, steps(50), size_inside(l2)) l1d.output(120, 0) l1d = l1.dup -l1d.size(50.0, steps(50), outside(l2)) +l1d.size(50.0, steps(50), size_outside(l2)) l1d.output(121, 0) -l1.sized(10.0, 20.0, steps(50), inside(l2)).output(130, 0) -l1.sized(25.0, 50.0, steps(50), outside(l2)).output(131, 0) +l1.sized(10.0, 20.0, steps(50), size_inside(l2)).output(130, 0) +l1.sized(25.0, 50.0, steps(50), size_outside(l2)).output(131, 0) error = nil begin - l2.sized(-1.0, steps(50), outside(l2)) + l2.sized(-1.0, steps(50), size_outside(l2)) rescue error = true end @@ -41,7 +41,7 @@ end error = nil begin - l2.sized(-1.0, 2.0, steps(50), outside(l2)) + l2.sized(-1.0, 2.0, steps(50), size_outside(l2)) rescue error = true end