A number of updates to the magic tech file for GF180MCU in concert with changes to the gf180mcu_ocd_io library to resolve various DRC issues.
diff --git a/VERSION b/VERSION index 04e9b00..79de682 100644 --- a/VERSION +++ b/VERSION
@@ -1 +1 @@ -1.0.561 +1.0.562
diff --git a/gf180mcu/gf180mcu.json b/gf180mcu/gf180mcu.json index 24a143e..85d8312 100644 --- a/gf180mcu/gf180mcu.json +++ b/gf180mcu/gf180mcu.json
@@ -95,8 +95,8 @@ "magic": "MAGIC_COMMIT" }, "reference": { - "open_pdks": "d2752164328c3ca94490405be0db932da62a390c", - "magic": "441d93314836f2443e9d5786912b6f3e2a2a705a", + "open_pdks": "2873ebc687189850c9b754bb762fe8a35c917815", + "magic": "98aa2f760a8e8d51a83e85802077abf6d0e9587b", "gf180mcu_pdk": "a897aa30369d3bcec87d9d50ce9b01f320f854ef", "gf180mcu_fd_pr": "739f508876db86bd7d3403f1fe056dedfeaabdab", "gf180mcu_fd_pv": "50cc2fe338c81925e24a6ac4907ddaab534c1312", @@ -105,7 +105,7 @@ "gf180mcu_fd_sc_mcu9t5v0": "e0e80f5a6522f10b82165d3aeab9b8ee28e89849", "gf180mcu_fd_ip_sram": "9c411928870ce15226228fa52ddb6ecc0ea4ffbe", "gf180mcu_as_sc_mcu7t3v3": "51f4e2a6d9692f3f8982dffaf7c012272a4b4ca3", - "gf180mcu_ocd_io": "634ba381118fcaba02f4a944cfeb126f082afce5", + "gf180mcu_ocd_io": "2fa4cdcd8c88c29590572a1b6750912a21413da9", "gf180mcu_ocd_alpha": "076bab7ac11118e1aa810ccf75e5c297b5501fcc", "gf180mcu_ocd_ip_sram": "f91d74cc332f2947b7da10c96baab1b41d8529ae", "gf180mcu_osu_sc_gf12t3v3": "aa2fa8cd1bcb8fe98669acd05c0b0c65879268b3",
diff --git a/gf180mcu/magic/gf180mcu.tech b/gf180mcu/magic/gf180mcu.tech index e0b5df0..e5938a8 100644 --- a/gf180mcu/magic/gf180mcu.tech +++ b/gf180mcu/magic/gf180mcu.tech
@@ -970,8 +970,10 @@ # DUALGATE (thickox) #----------------------------------------------------- - layer DUALGATE allfetsmv - bloat-all mvhires *poly + layer DUALGATE + # NOTE: This rule requires satisfying PL.19; poly cannot + # cross a DUALGATE boundary. + bloat-all mvhires,allfetsmv *poly # Rule DV.8 (DUALGATE around poly) grow 400 # Rule DV.6 (DUALGATE around diff, LV substrate tap excepted) @@ -1011,7 +1013,8 @@ # flagged for DRC errors. layer FET5VDEF - bloat-all mvnfet,mvpfet,srammvnfet,srammvpfet *mvndiff,*mvpdiff + bloat-all mvnfet,mvpfet,srammvnfet,srammvpfet \ + *mvndiff,*mvpdiff,mvndiffres,mvpdiffres grow 100 calma 112 1 @@ -1355,8 +1358,15 @@ #----------------------------------------------------- # RESDEF MARK #----------------------------------------------------- +# Identify unsalicided drain areas in I/O ESD structures. +# These are not marked with RESDEF. + templayer esd_io + bloat-all mvndiffres *mvndiff,hvnfet,mvnfet + bloat-all mvpdiffres *mvpdiff,hvpfet,mvpfet + layer RESDEF allres - calma 110 5 + and-not esd_io + calma 110 5 #----------------------------------------------------- # METAL RESISTOR IDs @@ -1428,6 +1438,17 @@ mask-hints SRAMDEF calma 108 5 +# I/O pads should have latchup and ESD markers; these are not +# recognized layers and must be handled with mask hints. + + layer LATCHUP_ID esd_io + mask-hints LATCHUP_ID + calma 137 5 + + layer ESD_ID esd_io + mask-hints ESD_ID + calma 24 5 + #------------------------------------------------------------------------ # FILLBLOCK (NOTE: two layers define this on active, then poly & metal) #------------------------------------------------------------------------ @@ -3170,11 +3191,15 @@ "Diffusion spacing < %d (DF.3a)" spacing alldiffmv,mvnvar,mvpvar alldiffmv,mvnvar,mvpvar 360 touching_ok \ "Diffusion spacing < %d (DF.3a)" - # Low voltage tap cannot abut high voltage source/drain - spacing *mvpdiff,mvpvar,*srammvpdiff *nsd 360 touching_illegal \ + spacing *mvpdiff,mvpvar,*srammvpdiff *mvnsd 360 touching_illegal \ "Diffusion spacing to tap < %d (DF.3a)" - spacing *mvndiff,mvnvar,*srammvndiff *psd 360 touching_illegal \ + spacing *mvndiff,mvnvar,*srammvndiff *mvpsd 360 touching_illegal \ "Diffusion spacing to tap < %d (DF.3a)" + # Low voltage tap to high voltage diffusion has to clear DUALGATE-to-COMP spacing + spacing *mvpdiff,mvpvar,*srammvpdiff *nsd 480 touching_illegal \ + "5/6V Diffusion spacing to 3.3V tap < %d (DV.6 + DV.3)" + spacing *mvndiff,mvnvar,*srammvndiff *psd 480 touching_illegal \ + "5/6V Diffusion spacing to 3.3V tap < %d (DV.6 + DV.3)" spacing (*ndiff,*ndiode,nfet,nnfet,ncap)/a allnwell 430 touching_illegal \ "N-Diffusion spacing to N-well < %d (DF.8)" @@ -5241,8 +5266,8 @@ device rsubcircuit nwell rnw nwell allpsub error l=r_length w=r_width # The following absorbs the source/drain resistor into a *_dss FET device - device subcircuit Short mvndiffres *mvndiff hvnfet allpsub error - device subcircuit Short mvpdiffres *mvpdiff hvpfet allnwell error + device subcircuit Short mvndiffres *mvndiff hvnfet,mvnfet allpsub error + device subcircuit Short mvpdiffres *mvpdiff hvpfet,mvpfet allnwell error device subcircuit Short ndiffres *ndiff nfet allpsub error device subcircuit Short pdiffres *pdiff pfet allnwell error
diff --git a/sky130/sky130.json b/sky130/sky130.json index f95b44e..e4b3b90 100644 --- a/sky130/sky130.json +++ b/sky130/sky130.json
@@ -94,8 +94,8 @@ "magic": "MAGIC_COMMIT" }, "reference": { - "open_pdks": "d2752164328c3ca94490405be0db932da62a390c", - "magic": "441d93314836f2443e9d5786912b6f3e2a2a705a", + "open_pdks": "2873ebc687189850c9b754bb762fe8a35c917815", + "magic": "98aa2f760a8e8d51a83e85802077abf6d0e9587b", "sky130_fd_pr": "c996d0e7417d7574714079050e2768da70f7fdca", "sky130_fd_io": "e60737bf624df95c211fe99c007ddec78e3e081d", "sky130_fd_sc_hs": "c4cfcd760f1964f1670a1ed99c71c7c12b7ad49f",