Corrected an unfortunate issue in the gf180mcu.tech file for magic in which the syntax used for the preprocessor is not recognized by the preprocessor, causing a number of rules for 1.1um thick metal to be output as rules for 0.9um thick metal instead. Thanks to Tamas Hubai for catching this error. Also: Recently updated the xschem symbols for gf180mcu to add the "s_sab" and "d_sab" properties to the "_dss" FET devices (drain-side salicide block). Otherwise, the schematic devices are incompletely specified and will fail property matching in LVS. So the git hash reference for the repository has been updated in open_pdks.
diff --git a/gf180mcu/gf180mcu.json b/gf180mcu/gf180mcu.json index abc2100..666748c 100644 --- a/gf180mcu/gf180mcu.json +++ b/gf180mcu/gf180mcu.json
@@ -90,10 +90,10 @@ "magic": "MAGIC_COMMIT" }, "reference": { - "open_pdks": "033872fcb033df5003674b6eca87109bb20ef291", + "open_pdks": "8283f1a6a695a5b41f6aea468385ced78c7a934e", "magic": "5de118b7626cf74084078d888f3e95af1f2e689f", "gf180mcu_pdk": "a897aa30369d3bcec87d9d50ce9b01f320f854ef", - "gf180mcu_fd_pr": "faef89e8c1b392733c32820a7b12e3a3847cc18c", + "gf180mcu_fd_pr": "b6d94d3a4f0aa15ee6971194385ab6cd82bd54e1", "gf180mcu_fd_pv": "10ee7fc75437edafa56f29f2b1872e95c9f22b71", "gf180mcu_fd_io": "1d291daa9368bd404c71ff768b3f2e073b62f298", "gf180mcu_fd_sc_mcu7t5v0": "8743b6f9641eb8707179c4e51703380d4dc90f16",
diff --git a/gf180mcu/magic/gf180mcu.tech b/gf180mcu/magic/gf180mcu.tech index f6bcb84..2dd2335 100644 --- a/gf180mcu/magic/gf180mcu.tech +++ b/gf180mcu/magic/gf180mcu.tech
@@ -1444,7 +1444,7 @@ shrink 500 grow 500 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 templayer obstruct_mtp allmtp,allpad,fillmtp,obsmtp grow 2010 shrink 500 @@ -3184,7 +3184,7 @@ surround v2/m3 *m3 240 directional \ "Thick Metal3 overlap of Via2 < %d in one direction (MT30.6 - V2.4)" -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 surround v2/m3 *m3 50 30 directional \ "Metal3 overlap of Via2 < %d in one direction (V2.4i - V2.4)" @@ -3251,7 +3251,7 @@ surround v3/m4 *m4 240 directional \ "Thick Metal4 overlap of Via3 < %d in one direction (MT30.6 - V3.4)" -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 surround v3/m4 *m4 50 30 directional \ "Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)" @@ -3314,7 +3314,7 @@ surround v4/m5 *m5 240 directional \ "Metal5 overlap of Via4 < %d in one direction (MT30.6 - V4.4)" -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 surround v4/m4 *m4 50 30 directional \ "Metal4 overlap of Via4 < %d in one direction (V4.3i - V4.3)" surround v4/m5 *m5 50 30 directional \ @@ -3388,7 +3388,7 @@ surround vtp/mtp *mtp 240 directional \ "Thick Top Metal overlap of ViaTP < %d in one direction (MT30.6 - VTP.4)" -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 surround vtp/mtp *mtp 80 absence_illegal \ "Top Metal overlap of ViaTP < %d (VT.4 - VT.3)" width allmtp 440 "Top Metal width < %d (MT.1)" @@ -3792,7 +3792,7 @@ #ifdef METALS3 #ifdef THICKMET3P0 resist (allm3)/metal3 10 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm3)/metal3 40 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm3)/metal3 60 @@ -3805,7 +3805,7 @@ #ifdef METALS4 #ifdef THICKMET3P0 resist (allm4)/metal4 10 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm4)/metal4 40 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm4)/metal4 60 @@ -3818,7 +3818,7 @@ #ifdef METALS5 #ifdef THICKMET3P0 resist (allm5)/metal5 10 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm5)/metal5 40 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm5)/metal5 60 @@ -3831,7 +3831,7 @@ #ifdef METALS6 #ifdef THICKMET3P0 resist (allmtp)/metaltp 10 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allmtp)/metaltp 40 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allmtp)/metaltp 60 @@ -3896,7 +3896,7 @@ #ifdef METALS3 #ifdef THICKMET3P0 resist (allm3)/metal3 15 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm3)/metal3 49 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm3)/metal3 70 @@ -3909,7 +3909,7 @@ #ifdef METALS4 #ifdef THICKMET3P0 resist (allm4)/metal4 14 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm4)/metal4 49 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm4)/metal4 70 @@ -3922,7 +3922,7 @@ #ifdef METALS5 #ifdef THICKMET3P0 resist (allm5)/metal5 14 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm5)/metal5 49 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm5)/metal5 70 @@ -3935,7 +3935,7 @@ #ifdef METALS6 #ifdef THICKMET3P0 resist (allmtp)/metaltp 14 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allmtp)/metaltp 49 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allmtp)/metaltp 70 @@ -4000,7 +4000,7 @@ #ifdef METALS3 #ifdef THICKMET3P0 resist (allm3)/metal3 6 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm3)/metal3 31 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm3)/metal3 50 @@ -4013,7 +4013,7 @@ #ifdef METALS4 #ifdef THICKMET3P0 resist (allm4)/metal4 6 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm4)/metal4 31 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm4)/metal4 50 @@ -4026,7 +4026,7 @@ #ifdef METALS5 #ifdef THICKMET3P0 resist (allm5)/metal5 6 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allm5)/metal5 31 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allm5)/metal5 50 @@ -4039,7 +4039,7 @@ #ifdef METALS6 #ifdef THICKMET3P0 resist (allmtp)/metaltp 6 -#elseif defined(THICKMET0P9) || defined(THICKMET1P1) +#elseif THICKMET0P9 || THICKMET1P1 resist (allmtp)/metaltp 31 #else (!(THICKMET3P0 || THICKMET1P1 || THICKMET0P9)) resist (allmtp)/metaltp 50
diff --git a/sky130/sky130.json b/sky130/sky130.json index bcbdc84..8e720ba 100644 --- a/sky130/sky130.json +++ b/sky130/sky130.json
@@ -94,7 +94,7 @@ "magic": "MAGIC_COMMIT" }, "reference": { - "open_pdks": "033872fcb033df5003674b6eca87109bb20ef291", + "open_pdks": "8283f1a6a695a5b41f6aea468385ced78c7a934e", "magic": "5de118b7626cf74084078d888f3e95af1f2e689f", "sky130_fd_pr": "1232782c1b9fab3aacda74d67ce7c92bf7da8105", "sky130_fd_io": "e60737bf624df95c211fe99c007ddec78e3e081d", @@ -105,12 +105,12 @@ "sky130_fd_sc_hd": "aed07ad6d4eff1861cb9d10f102d247231e3645c", "sky130_fd_sc_hdll": "f67521458137f30a01ec76aad3028e77581446ae", "sky130_fd_sc_hvl": "e5413e01fa071029ba84d9faa98d9acd80e75a38", - "sky130_osu_sc_t12": "ac90ef0c622a9377a16b5218d9da3ac4169eeaaf", - "sky130_osu_sc_t15": "95d1c19abb47e1b2945847acb4e817b1b8417c43", - "sky130_osu_sc_t18": "aa2b509f3c8f32ea94fdb55ac9768754667c1658", - "sky130_sram_macros": "c1e25c953f9502aed940810ce4b00bda000c69bb", + "sky130_osu_sc_t12": "unknown", + "sky130_osu_sc_t15": "unknown", + "sky130_osu_sc_t18": "unknown", + "sky130_sram_macros": "unknown", "sky130_fd_bd_sram": "be33adbcf188fdeab5c061699847d9d440f7a084", - "sky130_fd_pr_reram": "d6d2a3c6960aac0a0b12fc21221c31777bbf284d", + "sky130_fd_pr_reram": "unknown", "sky130_ml_xx_hd": "6eb3b0718552b034f1bf1870285ff135e3fb2dcb", "xschem_sky130": "7d19acb9fc9c54f6de86345e454dc59e57418a26", "klayout_sky130": "9861f40ff389c86fbe082122ee868a065cd4cfd4",