Adding complete technology LEF file.

Updating sky130_fd_sc_hd 0.0.2.

Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/tech/sky130_fd_sc_hd.tlef b/tech/sky130_fd_sc_hd.tlef
index 6b5a296..00e4222 100644
--- a/tech/sky130_fd_sc_hd.tlef
+++ b/tech/sky130_fd_sc_hd.tlef
@@ -14,7 +14,7 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 
-VERSION 5.6 ;
+VERSION 5.7 ;
 
 BUSBITCHARS "[]" ;
 DIVIDERCHAR "/" ;
@@ -30,14 +30,743 @@
 
 # High density, single height
 SITE unithd
-    SYMMETRY y ;
-    CLASS CORE ;
-    SIZE 0.460 BY 2.720 ;
+  SYMMETRY Y ;
+  CLASS CORE ;
+  SIZE 0.46 BY 2.72 ;
 END unithd
 
 # High density, double height
 SITE unithddbl
-    SYMMETRY y ;
-    CLASS CORE ;
-    SIZE 0.460 BY 5.44 ;
-END unithd
+  SYMMETRY Y ;
+  CLASS CORE ;
+  SIZE 0.46 BY 5.44 ;
+END unithddbl
+
+LAYER li1
+  TYPE ROUTING ;
+  DIRECTION VERTICAL ;
+
+  PITCH 0.46 0.34 ;
+  OFFSET 0.23 0.17 ;
+
+  WIDTH 0.17 ;          # LI 1
+  # SPACING  0.17 ;     # LI 2
+  SPACINGTABLE
+     PARALLELRUNLENGTH 0
+     WIDTH 0 0.17 ;
+  AREA 0.0561 ;         # LI 6
+  THICKNESS 0.1 ;
+  RESISTANCE RPERSQ 12.2 ;
+
+  ANTENNAMODEL OXIDE1 ;
+  ANTENNADIFFSIDEAREARATIO PWL ( ( 0 75 ) ( 0.0125 75 ) ( 0.0225 85.125 ) ( 22.5 10200 ) ) ;
+END li1
+
+LAYER mcon
+  TYPE CUT ;
+
+  WIDTH 0.17 ;                # Mcon 1
+  SPACING 0.19 ;              # Mcon 2
+  ENCLOSURE BELOW 0 0 ;       # Mcon 4
+  ENCLOSURE ABOVE 0.03 0.06 ; # Met1 4 / Met1 5
+
+  ANTENNADIFFAREARATIO PWL ( ( 0 3 ) ( 0.0125 3 ) ( 0.0225 3.405 ) ( 22.5 408 ) ) ;
+  DCCURRENTDENSITY AVERAGE 0.36 ; # mA per via Iavg_max at Tj = 90oC
+
+END mcon
+
+LAYER met1
+  TYPE ROUTING ;
+  DIRECTION HORIZONTAL ;
+
+  PITCH 0.34 ;
+  OFFSET 0.17 ;
+
+  WIDTH 0.14 ;                     # Met1 1
+  # SPACING 0.14 ;                 # Met1 2
+  # SPACING 0.28 RANGE 3.001 100 ; # Met1 3b
+  SPACINGTABLE
+     PARALLELRUNLENGTH 0
+     WIDTH 0 0.14
+     WIDTH 3 0.28 ;
+  AREA 0.083 ;                     # Met1 6
+  THICKNESS 0.35 ;
+
+  ANTENNAMODEL OXIDE1 ;
+  ANTENNADIFFSIDEAREARATIO PWL ( ( 0 400 ) ( 0.0125 400 ) ( 0.0225 2609 ) ( 22.5 11600 ) ) ;
+
+  EDGECAPACITANCE 1.79E-6 ;
+  CAPACITANCE CPERSQDIST 25.8E-6 ;
+  DCCURRENTDENSITY AVERAGE 2.8 ; # mA/um Iavg_max at Tj = 90oC
+  ACCURRENTDENSITY RMS 6.1 ; # mA/um Irms_max at Tj = 90oC
+  MAXIMUMDENSITY 70 ;
+  DENSITYCHECKWINDOW 700 700 ;
+  DENSITYCHECKSTEP 70 ;
+
+  RESISTANCE RPERSQ 0.125 ;
+END met1
+
+LAYER via
+  TYPE CUT ;
+  WIDTH 0.15 ;                  # Via 1a
+  SPACING 0.17 ;                # Via 2
+  ENCLOSURE BELOW 0.055 0.085 ; # Via 4a / Via 5a
+  ENCLOSURE ABOVE 0.055 0.085 ; # Met2 4 / Met2 5
+
+  ANTENNADIFFAREARATIO PWL ( ( 0 6 ) ( 0.0125 6 ) ( 0.0225 6.81 ) ( 22.5 816 ) ) ;
+  DCCURRENTDENSITY AVERAGE 0.29 ; # mA per via Iavg_max at Tj = 90oC
+END via
+
+LAYER met2
+  TYPE ROUTING ;
+  DIRECTION VERTICAL ;
+
+  PITCH 0.46 ;
+  OFFSET 0.23 ;
+
+  WIDTH 0.14 ;                        # Met2 1
+  # SPACING  0.14 ;                   # Met2 2
+  # SPACING  0.28 RANGE 3.001 100 ;   # Met2 3b
+  SPACINGTABLE
+     PARALLELRUNLENGTH 0
+     WIDTH 0 0.14
+     WIDTH 3 0.28 ;
+  AREA 0.0676 ;                       # Met2 6
+  THICKNESS 0.35 ;
+
+  CAPACITANCE CPERSQDIST 17.5E-6 ;
+  RESISTANCE RPERSQ 0.125 ;
+  DCCURRENTDENSITY AVERAGE 2.8 ; # mA/um Iavg_max at Tj = 90oC
+  ACCURRENTDENSITY RMS 6.1 ; # mA/um Irms_max at Tj = 90oC
+
+  ANTENNAMODEL OXIDE1 ;
+  ANTENNADIFFSIDEAREARATIO PWL ( ( 0 400 ) ( 0.0125 400 ) ( 0.0225 2609 ) ( 22.5 11600 ) ) ;
+
+  MAXIMUMDENSITY 70 ;
+  DENSITYCHECKWINDOW 700 700 ;
+  DENSITYCHECKSTEP 70 ;
+END met2
+
+# ******** Layer via2, type routing, number 44 **************
+LAYER via2
+  TYPE CUT ;
+  WIDTH 0.2 ;                   # Via2 1
+  SPACING 0.2 ;                 # Via2 2
+  ENCLOSURE BELOW 0.04 0.085 ;  # Via2 4
+  ENCLOSURE ABOVE 0.065 0.065 ; # Met3 4
+  ANTENNADIFFAREARATIO PWL ( ( 0 6 ) ( 0.0125 6 ) ( 0.0225 6.81 ) ( 22.5 816 ) ) ;
+  DCCURRENTDENSITY AVERAGE 0.48 ; # mA per via Iavg_max at Tj = 90oC
+END via2
+
+LAYER met3
+  TYPE ROUTING ;
+  DIRECTION HORIZONTAL ;
+
+  PITCH 0.68 ;
+  OFFSET 0.34 ;
+
+  WIDTH 0.3 ;              # Met3 1
+  # SPACING 0.3 ;          # Met3 2
+  SPACINGTABLE
+     PARALLELRUNLENGTH 0
+     WIDTH 0 0.3
+     WIDTH 3 0.4 ;
+  AREA 0.24 ;              # Met3 6
+  THICKNESS 0.8 ;
+
+  EDGECAPACITANCE 1.86E-6 ;
+  CAPACITANCE CPERSQDIST 12.6E-6 ;
+  RESISTANCE RPERSQ 0.047 ;
+  DCCURRENTDENSITY AVERAGE 6.8 ; # mA/um Iavg_max at Tj = 90oC
+  ACCURRENTDENSITY RMS 14.9 ; # mA/um Irms_max at Tj = 90oC
+
+  ANTENNAMODEL OXIDE1 ;
+  ANTENNADIFFSIDEAREARATIO PWL ( ( 0 400 ) ( 0.0125 400 ) ( 0.0225 2609 ) ( 22.5 11600 ) ) ;
+
+  MAXIMUMDENSITY 70 ;
+  DENSITYCHECKWINDOW 700 700 ;
+  DENSITYCHECKSTEP 70 ;
+END met3
+
+LAYER via3
+  TYPE CUT ;
+  WIDTH 0.2 ;                   # Via3 1
+  SPACING 0.2 ;                 # Via3 2
+  ENCLOSURE BELOW 0.06 0.09 ;   # Via3 4 / Via3 5
+  ENCLOSURE ABOVE 0.065 0.065 ; # Met4 3
+  ANTENNADIFFAREARATIO PWL ( ( 0 6 ) ( 0.0125 6 ) ( 0.0225 6.81 ) ( 22.5 816 ) ) ;
+  DCCURRENTDENSITY AVERAGE 0.48 ; # mA per via Iavg_max at Tj = 90oC
+END via3
+
+LAYER met4
+  TYPE ROUTING ;
+  DIRECTION VERTICAL ;
+
+  PITCH 0.92 ;
+  OFFSET 0.46 ;
+
+  WIDTH 0.3 ;             # Met4 1
+  # SPACING  0.3 ;             # Met4 2
+  SPACINGTABLE
+     PARALLELRUNLENGTH 0
+     WIDTH 0 0.3
+     WIDTH 3 0.4 ;
+  AREA 0.24 ;            # Met4 4a
+
+  THICKNESS 0.8 ;
+
+  EDGECAPACITANCE 1.29E-6 ;
+  CAPACITANCE CPERSQDIST 8.67E-6 ;
+  RESISTANCE RPERSQ 0.047 ;
+  DCCURRENTDENSITY AVERAGE 6.8 ; # mA/um Iavg_max at Tj = 90oC
+  ACCURRENTDENSITY RMS 14.9 ; # mA/um Irms_max at Tj = 90oC
+
+  ANTENNAMODEL OXIDE1 ;
+  ANTENNADIFFSIDEAREARATIO PWL ( ( 0 400 ) ( 0.0125 400 ) ( 0.0225 2609 ) ( 22.5 11600 ) ) ;
+
+  MAXIMUMDENSITY 70 ;
+  DENSITYCHECKWINDOW 700 700 ;
+  DENSITYCHECKSTEP 70 ;
+END met4
+
+LAYER via4
+  TYPE CUT ;
+
+  WIDTH 0.8 ;                 # Via4 1
+  SPACING 0.8 ;               # Via4 2
+  ENCLOSURE BELOW 0.19 0.19 ; # Via4 4
+  ENCLOSURE ABOVE 0.31 0.31 ; # Met5 3
+  ANTENNADIFFAREARATIO PWL ( ( 0 6 ) ( 0.0125 6 ) ( 0.0225 6.81 ) ( 22.5 816 ) ) ;
+  DCCURRENTDENSITY AVERAGE 2.49 ; # mA per via Iavg_max at Tj = 90oC
+END via4
+
+LAYER met5
+  TYPE ROUTING ;
+  DIRECTION HORIZONTAL ;
+
+  PITCH 3.4 ;
+  OFFSET 1.7 ;
+
+  WIDTH 1.6 ;            # Met5 1
+  #SPACING  1.6 ;        # Met5 2
+  SPACINGTABLE
+     PARALLELRUNLENGTH 0
+     WIDTH 0 1.6 ;
+  AREA 4 ;               # Met5 4
+
+  THICKNESS 1.2 ;
+
+  EDGECAPACITANCE 4.96E-6 ;
+  CAPACITANCE CPERSQDIST 6.48E-6 ;
+  RESISTANCE RPERSQ 0.0285 ;
+  DCCURRENTDENSITY AVERAGE 10.17 ; # mA/um Iavg_max at Tj = 90oC
+  ACCURRENTDENSITY RMS 22.34 ; # mA/um Irms_max at Tj = 90oC
+
+  ANTENNAMODEL OXIDE1 ;
+  ANTENNADIFFSIDEAREARATIO PWL ( ( 0 400 ) ( 0.0125 400 ) ( 0.0225 2609 ) ( 22.5 11600 ) ) ;
+END met5
+
+
+### Routing via cells section   ###
+# Plus via rule, metals are along the prefered direction
+VIA L1M1_PR DEFAULT
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER li1 ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER met1 ;
+  RECT -0.145 -0.115 0.145 0.115 ;
+END L1M1_PR
+
+VIARULE L1M1_PR GENERATE
+  LAYER li1 ;
+  ENCLOSURE 0 0 ;
+  LAYER met1 ;
+  ENCLOSURE 0.06 0.03 ;
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  SPACING 0.36 BY 0.36 ;
+END L1M1_PR
+
+# Plus via rule, metals are along the non prefered direction
+VIA L1M1_PR_R DEFAULT
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER li1 ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER met1 ;
+  RECT -0.115 -0.145 0.115 0.145 ;
+END L1M1_PR_R
+
+VIARULE L1M1_PR_R GENERATE
+  LAYER li1 ;
+  ENCLOSURE 0 0 ;
+  LAYER met1 ;
+  ENCLOSURE 0.03 0.06 ;
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  SPACING 0.36 BY 0.36 ;
+END L1M1_PR_R
+
+# Minus via rule, lower layer metal is along prefered direction
+VIA L1M1_PR_M DEFAULT
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER li1 ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER met1 ;
+  RECT -0.115 -0.145 0.115 0.145 ;
+END L1M1_PR_M
+
+VIARULE L1M1_PR_M GENERATE
+  LAYER li1 ;
+  ENCLOSURE 0 0 ;
+  LAYER met1 ;
+  ENCLOSURE 0.03 0.06 ;
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  SPACING 0.36 BY 0.36 ;
+END L1M1_PR_M
+
+# Minus via rule, upper layer metal is along prefered direction
+VIA L1M1_PR_MR DEFAULT
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER li1 ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER met1 ;
+  RECT -0.145 -0.115 0.145 0.115 ;
+END L1M1_PR_MR
+
+VIARULE L1M1_PR_MR GENERATE
+  LAYER li1 ;
+  ENCLOSURE 0 0 ;
+  LAYER met1 ;
+  ENCLOSURE 0.06 0.03 ;
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  SPACING 0.36 BY 0.36 ;
+END L1M1_PR_MR
+
+# Centered via rule, we really do not want to use it
+VIA L1M1_PR_C DEFAULT
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER li1 ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  LAYER met1 ;
+  RECT -0.145 -0.145 0.145 0.145 ;
+END L1M1_PR_C
+
+VIARULE L1M1_PR_C GENERATE
+  LAYER li1 ;
+  ENCLOSURE 0 0 ;
+  LAYER met1 ;
+  ENCLOSURE 0.06 0.06 ;
+  LAYER mcon ;
+  RECT -0.085 -0.085 0.085 0.085 ;
+  SPACING 0.36 BY 0.36 ;
+END L1M1_PR_C
+
+# Plus via rule, metals are along the prefered direction
+VIA M1M2_PR DEFAULT
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  LAYER met1 ;
+  RECT -0.16 -0.13 0.16 0.13 ;
+  LAYER met2 ;
+  RECT -0.13 -0.16 0.13 0.16 ;
+END M1M2_PR
+
+VIARULE M1M2_PR GENERATE
+  LAYER met1 ;
+  ENCLOSURE 0.085 0.055 ;
+  LAYER met2 ;
+  ENCLOSURE 0.055 0.085 ;
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  SPACING 0.32 BY 0.32 ;
+END M1M2_PR
+
+# Plus via rule, metals are along the non prefered direction
+VIA M1M2_PR_R DEFAULT
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  LAYER met1 ;
+  RECT -0.13 -0.16 0.13 0.16 ;
+  LAYER met2 ;
+  RECT -0.16 -0.13 0.16 0.13 ;
+END M1M2_PR_R
+
+VIARULE M1M2_PR_R GENERATE
+  LAYER met1 ;
+  ENCLOSURE 0.055 0.085 ;
+  LAYER met2 ;
+  ENCLOSURE 0.085 0.055 ;
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  SPACING 0.32 BY 0.32 ;
+END M1M2_PR_R
+
+# Minus via rule, lower layer metal is along prefered direction
+VIA M1M2_PR_M DEFAULT
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  LAYER met1 ;
+  RECT -0.16 -0.13 0.16 0.13 ;
+  LAYER met2 ;
+  RECT -0.16 -0.13 0.16 0.13 ;
+END M1M2_PR_M
+
+VIARULE M1M2_PR_M GENERATE
+  LAYER met1 ;
+  ENCLOSURE 0.085 0.055 ;
+  LAYER met2 ;
+  ENCLOSURE 0.085 0.055 ;
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  SPACING 0.32 BY 0.32 ;
+END M1M2_PR_M
+
+# Minus via rule, upper layer metal is along prefered direction
+VIA M1M2_PR_MR DEFAULT
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  LAYER met1 ;
+  RECT -0.13 -0.16 0.13 0.16 ;
+  LAYER met2 ;
+  RECT -0.13 -0.16 0.13 0.16 ;
+END M1M2_PR_MR
+
+VIARULE M1M2_PR_MR GENERATE
+  LAYER met1 ;
+  ENCLOSURE 0.055 0.085 ;
+  LAYER met2 ;
+  ENCLOSURE 0.055 0.085 ;
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  SPACING 0.32 BY 0.32 ;
+END M1M2_PR_MR
+
+# Centered via rule, we really do not want to use it
+VIA M1M2_PR_C DEFAULT
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  LAYER met1 ;
+  RECT -0.16 -0.16 0.16 0.16 ;
+  LAYER met2 ;
+  RECT -0.16 -0.16 0.16 0.16 ;
+END M1M2_PR_C
+
+VIARULE M1M2_PR_C GENERATE
+  LAYER met1 ;
+  ENCLOSURE 0.085 0.085 ;
+  LAYER met2 ;
+  ENCLOSURE 0.085 0.085 ;
+  LAYER via ;
+  RECT -0.075 -0.075 0.075 0.075 ;
+  SPACING 0.32 BY 0.32 ;
+END M1M2_PR_C
+
+# Plus via rule, metals are along the prefered direction
+VIA M2M3_PR DEFAULT
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met2 ;
+  RECT -0.14 -0.185 0.14 0.185 ;
+  LAYER met3 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M2M3_PR
+
+VIARULE M2M3_PR GENERATE
+  LAYER met2 ;
+  ENCLOSURE 0.04 0.085 ;
+  LAYER met3 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M2M3_PR
+
+# Plus via rule, metals are along the non prefered direction
+VIA M2M3_PR_R DEFAULT
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met2 ;
+  RECT -0.185 -0.14 0.185 0.14 ;
+  LAYER met3 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M2M3_PR_R
+
+VIARULE M2M3_PR_R GENERATE
+  LAYER met2 ;
+  ENCLOSURE 0.085 0.04 ;
+  LAYER met3 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M2M3_PR_R
+
+# Minus via rule, lower layer metal is along prefered direction
+VIA M2M3_PR_M DEFAULT
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met2 ;
+  RECT -0.14 -0.185 0.14 0.185 ;
+  LAYER met3 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M2M3_PR_M
+
+VIARULE M2M3_PR_M GENERATE
+  LAYER met2 ;
+  ENCLOSURE 0.04 0.085 ;
+  LAYER met3 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M2M3_PR_M
+
+# Minus via rule, upper layer metal is along prefered direction
+VIA M2M3_PR_MR DEFAULT
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met2 ;
+  RECT -0.185 -0.14 0.185 0.14 ;
+  LAYER met3 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M2M3_PR_MR
+
+VIARULE M2M3_PR_MR GENERATE
+  LAYER met2 ;
+  ENCLOSURE 0.085 0.04 ;
+  LAYER met3 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M2M3_PR_MR
+
+# Centered via rule, we really do not want to use it
+VIA M2M3_PR_C DEFAULT
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met2 ;
+  RECT -0.185 -0.185 0.185 0.185 ;
+  LAYER met3 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M2M3_PR_C
+
+VIARULE M2M3_PR_C GENERATE
+  LAYER met2 ;
+  ENCLOSURE 0.085 0.085 ;
+  LAYER met3 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via2 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M2M3_PR_C
+
+# Plus via rule, metals are along the prefered direction
+VIA M3M4_PR DEFAULT
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met3 ;
+  RECT -0.19 -0.16 0.19 0.16 ;
+  LAYER met4 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M3M4_PR
+
+VIARULE M3M4_PR GENERATE
+  LAYER met3 ;
+  ENCLOSURE 0.09 0.06 ;
+  LAYER met4 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M3M4_PR
+
+# Plus via rule, metals are along the non prefered direction
+VIA M3M4_PR_R DEFAULT
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met3 ;
+  RECT -0.16 -0.19 0.16 0.19 ;
+  LAYER met4 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M3M4_PR_R
+
+VIARULE M3M4_PR_R GENERATE
+  LAYER met3 ;
+  ENCLOSURE 0.06 0.09 ;
+  LAYER met4 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M3M4_PR_R
+
+# Minus via rule, lower layer metal is along prefered direction
+VIA M3M4_PR_M DEFAULT
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met3 ;
+  RECT -0.19 -0.16 0.19 0.16 ;
+  LAYER met4 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M3M4_PR_M
+
+VIARULE M3M4_PR_M GENERATE
+  LAYER met3 ;
+  ENCLOSURE 0.09 0.06 ;
+  LAYER met4 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M3M4_PR_M
+
+# Minus via rule, upper layer metal is along prefered direction
+VIA M3M4_PR_MR DEFAULT
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met3 ;
+  RECT -0.16 -0.19 0.16 0.19 ;
+  LAYER met4 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M3M4_PR_MR
+
+VIARULE M3M4_PR_MR GENERATE
+  LAYER met3 ;
+  ENCLOSURE 0.06 0.09 ;
+  LAYER met4 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M3M4_PR_MR
+
+# Centered via rule, we really do not want to use it
+VIA M3M4_PR_C DEFAULT
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  LAYER met3 ;
+  RECT -0.19 -0.19 0.19 0.19 ;
+  LAYER met4 ;
+  RECT -0.165 -0.165 0.165 0.165 ;
+END M3M4_PR_C
+
+VIARULE M3M4_PR_C GENERATE
+  LAYER met3 ;
+  ENCLOSURE 0.09 0.09 ;
+  LAYER met4 ;
+  ENCLOSURE 0.065 0.065 ;
+  LAYER via3 ;
+  RECT -0.1 -0.1 0.1 0.1 ;
+  SPACING 0.4 BY 0.4 ;
+END M3M4_PR_C
+
+# Plus via rule, metals are along the prefered direction
+VIA M4M5_PR DEFAULT
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  LAYER met4 ;
+  RECT -0.59 -0.59 0.59 0.59 ;
+  LAYER met5 ;
+  RECT -0.71 -0.71 0.71 0.71 ;
+END M4M5_PR
+
+VIARULE M4M5_PR GENERATE
+  LAYER met4 ;
+  ENCLOSURE 0.19 0.19 ;
+  LAYER met5 ;
+  ENCLOSURE 0.31 0.31 ;
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  SPACING 1.6 BY 1.6 ;
+END M4M5_PR
+
+# Plus via rule, metals are along the non prefered direction
+VIA M4M5_PR_R DEFAULT
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  LAYER met4 ;
+  RECT -0.59 -0.59 0.59 0.59 ;
+  LAYER met5 ;
+  RECT -0.71 -0.71 0.71 0.71 ;
+END M4M5_PR_R
+
+VIARULE M4M5_PR_R GENERATE
+  LAYER met4 ;
+  ENCLOSURE 0.19 0.19 ;
+  LAYER met5 ;
+  ENCLOSURE 0.31 0.31 ;
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  SPACING 1.6 BY 1.6 ;
+END M4M5_PR_R
+
+# Minus via rule, lower layer metal is along prefered direction
+VIA M4M5_PR_M DEFAULT
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  LAYER met4 ;
+  RECT -0.59 -0.59 0.59 0.59 ;
+  LAYER met5 ;
+  RECT -0.71 -0.71 0.71 0.71 ;
+END M4M5_PR_M
+
+VIARULE M4M5_PR_M GENERATE
+  LAYER met4 ;
+  ENCLOSURE 0.19 0.19 ;
+  LAYER met5 ;
+  ENCLOSURE 0.31 0.31 ;
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  SPACING 1.6 BY 1.6 ;
+END M4M5_PR_M
+
+# Minus via rule, upper layer metal is along prefered direction
+VIA M4M5_PR_MR DEFAULT
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  LAYER met4 ;
+  RECT -0.59 -0.59 0.59 0.59 ;
+  LAYER met5 ;
+  RECT -0.71 -0.71 0.71 0.71 ;
+END M4M5_PR_MR
+
+VIARULE M4M5_PR_MR GENERATE
+  LAYER met4 ;
+  ENCLOSURE 0.19 0.19 ;
+  LAYER met5 ;
+  ENCLOSURE 0.31 0.31 ;
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  SPACING 1.6 BY 1.6 ;
+END M4M5_PR_MR
+
+# Centered via rule, we really do not want to use it
+VIA M4M5_PR_C DEFAULT
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  LAYER met4 ;
+  RECT -0.59 -0.59 0.59 0.59 ;
+  LAYER met5 ;
+  RECT -0.71 -0.71 0.71 0.71 ;
+END M4M5_PR_C
+
+VIARULE M4M5_PR_C GENERATE
+  LAYER met4 ;
+  ENCLOSURE 0.19 0.19 ;
+  LAYER met5 ;
+  ENCLOSURE 0.31 0.31 ;
+  LAYER via4 ;
+  RECT -0.4 -0.4 0.4 0.4 ;
+  SPACING 1.6 BY 1.6 ;
+END M4M5_PR_C
+###  end of single via cells   ###
+
+END LIBRARY