From 10880e078b3826488b0061adc8f93be6ada66e02 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 25 Jun 2024 22:20:48 +0200 Subject: [PATCH] Added documentation for new DRC feature --- scripts/drc_lvs_doc/create_drc_samples.rb | 30 ++++++++++ src/doc/doc/about/drc_ref_layer.xml | 54 +++++++++++++++-- src/doc/doc/images/drc_sized_inside1.png | Bin 0 -> 6696 bytes src/doc/doc/images/drc_sized_inside2.png | Bin 0 -> 6900 bytes src/doc/doc/images/drc_sized_inside3.png | Bin 0 -> 7080 bytes src/doc/doc/images/drc_sized_inside4.png | Bin 0 -> 6697 bytes src/doc/docDRCLVSResources.qrc | 4 ++ src/drc/drc/built-in-macros/_drc_layer.rb | 67 +++++++++++++--------- 8 files changed, 125 insertions(+), 30 deletions(-) create mode 100644 src/doc/doc/images/drc_sized_inside1.png create mode 100644 src/doc/doc/images/drc_sized_inside2.png create mode 100644 src/doc/doc/images/drc_sized_inside3.png create mode 100644 src/doc/doc/images/drc_sized_inside4.png diff --git a/scripts/drc_lvs_doc/create_drc_samples.rb b/scripts/drc_lvs_doc/create_drc_samples.rb index 2799b88e1..5a9c1c332 100644 --- a/scripts/drc_lvs_doc/create_drc_samples.rb +++ b/scripts/drc_lvs_doc/create_drc_samples.rb @@ -914,6 +914,36 @@ run_demo gen, "input.sized(1.um, octagon_limit)", "drc_sized4.png" run_demo gen, "input.sized(1.um, square_limit)", "drc_sized5.png" run_demo gen, "input.sized(1.um, acute_limit)", "drc_sized6.png" +class Gen + def produce(s1, s2) + pts = [ + RBA::Point::new(1000, 1000), + RBA::Point::new(1000, 2000), + RBA::Point::new(2000, 2000), + RBA::Point::new(2000, 1000) + ]; + s1.insert(RBA::Polygon::new(pts)) + pts = [ + RBA::Point::new(1000, 1000), + RBA::Point::new(1000, 7000), + RBA::Point::new(6000, 7000), + RBA::Point::new(6000, 1000), + RBA::Point::new(5000, 1000), + RBA::Point::new(5000, 6000), + RBA::Point::new(2000, 6000), + RBA::Point::new(2000, 1000) + ]; + s2.insert(RBA::Polygon::new(pts)) + end +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" + class Gen def produce(s1, s2) pts = [ diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index 9dd40b6ca..7b03a95e1 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -3056,18 +3056,27 @@ The following images shows the effect of some rectangle filter modes:

Usage:

-See sized. The size method basically does the same but modifies the layer +See sized for a description of the options. +The size method basically does the same but modifies the layer it is called on. The input layer is returned and available for further processing.

"sized" - Polygon sizing (per-edge biasing)

Usage:

    -
  • layer.sized(d [, mode])
  • -
  • layer.sized(dx, dy [, mode]))
  • +
  • layer.sized(d [, mode] [, inside(l) [, steps(n)]])
  • +
  • layer.sized(d, inside(l) [, steps(n)] [, mode])
  • +
  • layer.sized(d, outside(l) [, steps(n)] [, mode])
  • +
  • layer.sized(dx, dy [, mode])
  • +
  • layer.sized(dx, dy, inside(l) [, steps(n)] [, mode])
  • +
  • layer.sized(dx, dy, outside(l) [, steps(n)] [, mode])

This method requires a polygon layer. It will apply a bias per edge of the polygons @@ -3100,6 +3109,30 @@ layer.sized(300.nm).raw.merged(2) Bias values can be given as floating-point values (in micron) or integer values (in database units). To explicitly specify the unit, use the unit denominators.

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

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

+"outside" acts like "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: +

+

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

size is working like sized but modifies the layer it is called on.

The following images show the effect of various forms of the "sized" method: @@ -3118,6 +3151,19 @@ The following images show the effect of various forms of the "sized" method: +

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

+ + + + + + + + + +

"smoothed" - Smoothes the polygons of the region

diff --git a/src/doc/doc/images/drc_sized_inside1.png b/src/doc/doc/images/drc_sized_inside1.png new file mode 100644 index 0000000000000000000000000000000000000000..e013d4407f38172b5b6dc2d5fc59227a059a9d66 GIT binary patch literal 6696 zcmdT}dstFwx5shHtO+Okx~C3_I*mD~bn(t4O-h-X(_~hPnMtLofntV;QMcialm+nZ3-}jK%QsSu-RT-2O4fFEj)xz5KRS* zRUWp(tuOfU=Bue9H$Jro?sh9%noGyHj5aQ*XnirS$K!D}Y?csVds3K&*zdydjJUI^ zG9vl8mTqweofF)1RfRU8MU`OZo~4EF99tzCOSE25v@(iooDD4D{aEElRH;x$3_OU{_JYy8=;u3qc)(D6*+~8*L=G*nN`DXW{8&* zA~_m6{6L9!69Nhqk+MIo^X$yG|e+&)%*-MK(+CC63}+BE|nl~iQ)L5*u-h*ZQ3 zW?p&*=doi{rO$Lz=dqzzPnF_qlI~!kuTXi0RnG+`L#Y-LIa2+c;r-85Z!ag*98t=C zN807+&?3p+?uHAm7O^tj&Csg7r#&jaGKm@B$*cB+vX{5ve5siwXx$i!M#$4@ zHKd|sia2p|%~zQj93+WnMx})(BHPHN<)|blx&OoLUA^~kIjn`6*LYIzp3yd`;GCKs zm;mdgbdgp35`F+Gh(he%5RyS3Rc5yx6e~pwusc;RQ_64I$+_X9Yzl?TJn6z8YEBE5 zRXw@Nx7R6A`+IvbDX-2~EwmKV=TRcxbZ1`BUF?c^ny|EFYj5%eP>nGQFQ{Ze z2DR$8eL3B7)pi%V7F#i={{iQNPJ+&s6HBiBxHd%b5q$H*D!zSaXjH zg+PWbXIJY!MXuV&^9+VCje(Z)x63m&1z@axY+Y~SGeyr1I7e{*Zy*-1cBrv4Ne9E! z?M?;BsHdC{z|V7MKL;MB7~sp(JgLW;rhzQib6GD5OO5qbT~GZhe<036^rsevK(=`D zo>9C_9TvhsmV;aBCBe$d05mEEAoHhyfhbW3s~pQrmkr-psftM9U0S(woZ6@v?0ZKF{l0ZDyenCfz{%fz)BmX)}#J<3_ZiX zu(%PJIm6M-uLWT!cdJ4}g$M>=^IS)~?NZ}(b7)qo-W_vC*1eS-CRrK4m5Ph}$ta@6 zxw(XVpps)2VvqCtp;FO9oZ0|Nw5e&gOX$&`pJw|xqTA6P9Bv=LX!r1*%>kyS!Be?I z3)WOBIEoC8S$VGfsCT8J5Og+l90hQ-2_TRP^+^D87&P*!_cniQ{-$ESZ6A%B0Zf0l zVq+2^KUg)SUvCF5=Q2^sk=7c1@E-&WOtaKFATX(Cl1Qtk_8KdfzhOcXx+VMK(nWUKyDZuI;1j~?Fd{j6Ri)w1P>JBbO(83 z({w3}8Gcl4_u%+=5Nt}9jXT>YXlX5RXPF&%?h@L(wwNg00J;~u!2T!8Abqx&e}f}^ z4IXE_MHkNr(b}-Kzac+hloL0?JUCzUW%{aq_gouoWd&=BugyQT1xPbJYF&<@pLyMU zXWgSjbbc^tQzeJIpY2=F($>~C@>+V2m#f5;Bzj-z?NX}A01HrYd)O4}fU+^SrH?<7 z7~!F7Ym*5#9gQxQE87lfwB4$Hh4bk0sYaK>_~yPv=x2HK4&=*XX$R~bh{k6KsNc}f zryxa(i;g%gi*$XOFEq%Tdx-Re=;L(1Rj9`{=y>d{t;aHwi?ZNPh^K%t9}e$lM~0NS zhrepRUVeB(z>L+*+h$SCL$h2Ht#<|q9bn^lesTLt@aGez0l&oZG|!bTwbBO@ztjpdpN zskK91!g7`qomOB+hLi}g$l~BzbwNv?;0{c_)eQM#iRu9gr_ii)OOZUrYRTJL+@I3JxAvU)3V3@WS3Hjd%t- zICM#jtC*0;@q_PNeh=PkJn=Pnyw3Lsv*B+K@@8-HF^#NT3yi?&RYWLwuN}^#hh0Ap z`Bg6u);&=sM}Wg1ckV@iVv|#CB1hk|{q%Tw= z{Leb|4!Pw?b-p>AEg$sr-(q5X?&FOnU^h_-{{;GYO*1*@|DO2Y0G(7LKUo96RV-B$ z3(DE#r_RfD+!ZF6cvbAMkM=vsZI`Gk5&PN}AAI|xSU!5srYc8NHOv)Li0x|G%PjY& zlw`#o;D@!Z)_dA^xs!B0$r9kLZD>E6qN`DNCus>Dx*AkhiHC7Rd&MgsmzTlNHSS0Oz&edKgpUqC@VDOQx+?+BSS_?vE^V%}5 zqJ-2z(LH%e*W9s_4`izB8l+LKu@NXHCDDuRBy?1X-Cb!9c#=}_uJattF|MS;u}ntg zXky2|oio{lS^|GieV8wC)=+76++^DV>@&Zc+#c=7$nAQ06#}d|9^Az#*7av*!$+a6 zWq|?gDrQ|dcVi&|ciNIKaoveWeI7r^&E=8(BrM7r?~^l-svmvXJ#f|=&R(mL6WFj9 zMFR+jU|l))+6o+zUH6Xxmm5%~An)>9@^w4H8lxn>@53QF!_S^&ahlH97NMwiWLcb` zGmg^9rAfbz&4M{Bj8N!(m(?RlzU;SFmp6l_NJT3PFs28-XK`XgX@2tS^*-E-3#rbn zELl2-tm8_!U9`uH8)7Z6z_(mUAn0JvKe@?gS`dnkZD76cM&Qz`sbf|)7`h;)XZVDB zLJ09Gosq_skapowbCIqyk*W}She;imw>UyU9{Q=@3n&gR@y6$LKi3;`HN!1l6$pE{ z89jD21*`Yr<3;s z7V$|$>!PC_7Btl?x`4GSLS#i#b!F+l*;*7P1HmI1F$Dwwl61OeGXS+navMA$cP~x? zAqLVqbUKG@6lko#>!ccf5LY+J<=7tDpw6`|&(L zgWFc}DXQ$o$oL$cAh1yva$0bhfqvpu8PD(;kcmWM0%15wEBCwBI+&Ri7A#t4QcAxO zY)A+eA(*}eveMF)Q>CS{2Go;1G0#}EZf&q!(-hw><<@SmpsA#45+gA%auw^L3zI!N zLc!ak&We8&-KpcdXtVj00jA2&3H2;`oAu+N&MXd6>A>-P)5Vi<<%w16N&0bBj93_rI_|2AhDR!CrHK0?fc zVOm+M^hLs#UJO?nK%cBBP0>Jb19;IVHT3%e0_sbZgu8<|A@$Th>)*DF9a>qU^{+Bd zWWf7776EnedN`;_@3;I#@NUaFS-(|_oxeC4k&FG-lUhiK0gf>Np#Tl+ zj3@4t@R#v&R6jk%;h-vsDin{J4k*ixh_tx=4thS1VN4qPN7yW5hms%mBIO}s(c^Z4 z^=N7`YZ}I}AY>N+FdZ@0AOVMtXqyj(oQUiGYvnN1wK!nov z`HOk*_(9iRuUFAZ(x4AO$b=~RK6=aPZ*=p36!@WIMVGgec9v!P`czX~l<$wnL1Y`xXG5j4j)F z9x1->f%Z#P>Zkg59G;uBq5NUf>9yYY#hkfFZLnzV}xpy5;% zA=D~%h##quZEo;$K$C0ENVDM&V9N&r!RX7n|7hL+k4>zPty*>Yx4# zXf?$=8>6wE=PgNN;~?;-7zU~SY=42-moH-3xzl4mw@yegYZvyI-*ot6?tX1i81hoW zN`o6fqirk-d(~M6kd#p8m~8al(%XcVPOM+8fIR=cdboCz&ggg!?ZL`&jY^;H-}|m9 I@eDomFO~Y7q5uE@ literal 0 HcmV?d00001 diff --git a/src/doc/doc/images/drc_sized_inside2.png b/src/doc/doc/images/drc_sized_inside2.png new file mode 100644 index 0000000000000000000000000000000000000000..4600f454ab35cf7c4cb7550975c3bd59ebd427a4 GIT binary patch literal 6900 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 S7sdPGW88gUSFX*Em;MX=yaS8? literal 0 HcmV?d00001 diff --git a/src/doc/docDRCLVSResources.qrc b/src/doc/docDRCLVSResources.qrc index 905f12d19..8aa37dbed 100644 --- a/src/doc/docDRCLVSResources.qrc +++ b/src/doc/docDRCLVSResources.qrc @@ -125,6 +125,10 @@ doc/images/drc_sized4.png doc/images/drc_sized5.png doc/images/drc_sized6.png + doc/images/drc_sized_inside1.png + doc/images/drc_sized_inside2.png + doc/images/drc_sized_inside3.png + doc/images/drc_sized_inside4.png doc/images/drc_with_angle1.png doc/images/drc_with_angle2.png doc/images/drc_with_angle3.png diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 71cb01ccb..3887691a6 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -4688,6 +4688,8 @@ TP_SCRIPT # 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. # + # The alternative method \size works like \sized but modifies the layer it is called on. + # # In the single-value form, that bias is applied both in horizontal or vertical direction. # In the two-value form, the horizontal and vertical bias can be specified separately. # @@ -4715,32 +4717,6 @@ TP_SCRIPT # Bias values can be given as floating-point values (in micron) or integer values (in # database units). To explicitly specify the unit, use the unit denominators. # - # The "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. - # - # 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 - # 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. - # - # "outside" acts like "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: - # - # @code - # ntap.sized(30.um, inside(nwell), steps(100)) - # @/code - # - # \size is working like \sized but modifies the layer it is called on. - # # The following images show the effect of various forms of the "sized" method: # # @table @@ -4757,6 +4733,45 @@ TP_SCRIPT # @td @img(/images/drc_sized6.png) @/td # @/tr # @/table + # + # The "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. + # + # 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 + # 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. + # 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 + # 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: + # + # @code + # ntap.sized(30.um, inside(nwell), steps(100)) + # @/code + # + # The effect of the "inside" option is shown here: + # + # @table + # @tr + # @td @img(/images/drc_sized_inside1.png) @/td + # @td @img(/images/drc_sized_inside2.png) @/td + # @/tr + # @tr + # @td @img(/images/drc_sized_inside3.png) @/td + # @td @img(/images/drc_sized_inside4.png) @/td + # @/tr + # @/table + # # %DRC% # @name size