mirror of
https://github.com/TinyTapeout/tt-support-tools.git
synced 2026-11-03 04:36:09 +01:00
476 lines
13 KiB
Python
476 lines
13 KiB
Python
# fmt: off
|
|
valid_layers_sky130 = {
|
|
(10, 0), (11, 0), (11, 20), (11, 44), (17, 0), (18, 20), (20, 0), (21, 0),
|
|
(22, 0), (22, 20), (22, 21), (22, 22), (22, 23), (22, 24), (23, 0), (23, 28),
|
|
(25, 0), (25, 42), (25, 43), (25, 44), (26, 20), (26, 21), (26, 22), (27, 0),
|
|
(28, 0), (28, 28), (29, 20), (29, 21), (29, 22), (30, 0), (31, 20), (31, 21),
|
|
(31, 22), (32, 0), (33, 24), (33, 42), (33, 43), (33, 44), (34, 0), (34, 28),
|
|
(35, 0), (36, 0), (36, 28), (37, 0), (38, 20), (38, 21), (38, 22), (39, 0),
|
|
(40, 0), (41, 0), (41, 28), (43, 0), (44, 0), (44, 5), (44, 16), (44, 20),
|
|
(44, 42), (44, 43), (45, 20), (45, 21), (45, 22), (46, 0), (48, 0), (49, 0),
|
|
(50, 0), (51, 0), (51, 28), (53, 42), (53, 43), (53, 44), (56, 0), (56, 28),
|
|
(58, 0), (59, 0), (59, 28), (61, 20), (62, 20), (62, 21), (62, 22), (62, 24),
|
|
(64, 5), (64, 13), (64, 14), (64, 16), (64, 18), (64, 20), (64, 44), (64, 59),
|
|
(65, 4), (65, 5), (65, 6), (65, 8), (65, 13), (65, 14), (65, 16), (65, 20),
|
|
(65, 23), (65, 41), (65, 44), (65, 48), (65, 60), (66, 4), (66, 5), (66, 9),
|
|
(66, 13), (66, 14), (66, 15), (66, 16), (66, 20), (66, 23), (66, 25), (66, 41),
|
|
(66, 44), (66, 58), (66, 60), (66, 83), (67, 4), (67, 5), (67, 10), (67, 13),
|
|
(67, 14), (67, 15), (67, 16), (67, 20), (67, 23), (67, 25), (67, 41), (67, 44),
|
|
(67, 48), (67, 60), (68, 4), (68, 5), (68, 10), (68, 13), (68, 14), (68, 15),
|
|
(68, 16), (68, 20), (68, 23), (68, 25), (68, 32), (68, 33), (68, 34), (68, 35),
|
|
(68, 36), (68, 37), (68, 38), (68, 39), (68, 41), (68, 44), (68, 48), (68, 58),
|
|
(68, 60), (68, 88), (68, 89), (68, 90), (68, 91), (68, 92), (68, 93), (69, 4),
|
|
(69, 5), (69, 10), (69, 13), (69, 14), (69, 15), (69, 16), (69, 20), (69, 23),
|
|
(69, 25), (69, 32), (69, 33), (69, 34), (69, 35), (69, 36), (69, 37), (69, 38),
|
|
(69, 39), (69, 41), (69, 44), (69, 48), (69, 58), (69, 60), (69, 88), (69, 89),
|
|
(69, 90), (69, 91), (69, 92), (69, 93), (70, 4), (70, 5), (70, 10), (70, 13),
|
|
(70, 14), (70, 15), (70, 16), (70, 17), (70, 20), (70, 23), (70, 25), (70, 32),
|
|
(70, 33), (70, 34), (70, 35), (70, 36), (70, 37), (70, 38), (70, 39), (70, 41),
|
|
(70, 44), (70, 48), (70, 60), (70, 88), (70, 89), (70, 90), (70, 91), (70, 92),
|
|
(70, 93), (71, 4), (71, 5), (71, 10), (71, 13), (71, 14), (71, 15), (71, 16),
|
|
(71, 17), (71, 20), (71, 23), (71, 25), (71, 32), (71, 33), (71, 34), (71, 35),
|
|
(71, 36), (71, 37), (71, 38), (71, 39), (71, 41), (71, 44), (71, 48), (71, 60),
|
|
(71, 88), (71, 89), (71, 90), (71, 91), (71, 92), (71, 93), (72, 4), (72, 5),
|
|
(72, 10), (72, 13), (72, 14), (72, 15), (72, 16), (72, 17), (72, 20), (72, 23),
|
|
(72, 25), (72, 32), (72, 33), (72, 34), (72, 35), (72, 36), (72, 37), (72, 38),
|
|
(72, 39), (72, 88), (72, 89), (72, 90), (72, 91), (72, 92), (72, 93), (74, 5),
|
|
(74, 13), (74, 14), (74, 15), (74, 16), (74, 20), (74, 21), (74, 22), (74, 88),
|
|
(74, 89), (74, 90), (74, 91), (74, 92), (74, 93), (75, 20), (76, 5), (76, 16),
|
|
(76, 20), (76, 44), (77, 20), (78, 44), (79, 20), (80, 20), (81, 1), (81, 2),
|
|
(81, 3), (81, 4), (81, 6), (81, 7), (81, 8), (81, 10), (81, 11), (81, 12),
|
|
(81, 13), (81, 14), (81, 15), (81, 17), (81, 19), (81, 20), (81, 23), (81, 27),
|
|
(81, 50), (81, 51), (81, 52), (81, 53), (81, 54), (81, 57), (81, 60), (81, 63),
|
|
(81, 79), (81, 81), (81, 101), (81, 125), (82, 5), (82, 20), (82, 24),
|
|
(82, 25), (82, 26), (82, 27), (82, 28), (82, 44), (82, 59), (82, 64), (83, 44),
|
|
(84, 23), (84, 44), (85, 44), (86, 20), (87, 42), (87, 43), (87, 44), (88, 0),
|
|
(88, 44), (89, 32), (89, 33), (89, 34), (89, 35), (89, 36), (89, 37), (89, 38),
|
|
(89, 39), (89, 44), (90, 4), (90, 20), (91, 44), (92, 44), (93, 0), (93, 44),
|
|
(94, 0), (94, 20), (95, 20), (96, 0), (96, 20), (96, 21), (96, 22), (96, 44),
|
|
(97, 0), (97, 42), (97, 43), (97, 44), (98, 0), (98, 42), (98, 43), (98, 44),
|
|
(99, 0), (100, 0), (101, 0), (101, 42), (101, 43), (101, 44), (104, 42),
|
|
(104, 43), (104, 44), (105, 20), (105, 21), (105, 22), (105, 42), (105, 43),
|
|
(105, 44), (105, 52), (106, 42), (106, 43), (106, 44), (107, 20), (107, 21),
|
|
(107, 22), (107, 24), (108, 20), (108, 21), (108, 22), (109, 42), (109, 43),
|
|
(109, 44), (110, 20), (110, 21), (110, 22), (112, 4), (112, 20), (112, 21),
|
|
(112, 22), (112, 42), (112, 43), (115, 42), (115, 43), (115, 44), (117, 4),
|
|
(117, 20), (117, 21), (117, 22), (122, 5), (122, 16), (124, 40), (125, 20),
|
|
(125, 44), (127, 21), (127, 22), (201, 20), (235, 0), (235, 4), (235, 250),
|
|
(235, 252), (236, 0)
|
|
}
|
|
# fmt: on
|
|
|
|
valid_layers_ihp_sg13g2 = [
|
|
"Substrate.drawing",
|
|
"Substrate.text",
|
|
"Activ.drawing",
|
|
"Activ.label",
|
|
"Activ.pin",
|
|
"Activ.net",
|
|
"Activ.boundary",
|
|
"Activ.lvs",
|
|
"Activ.mask",
|
|
"Activ.nofill",
|
|
"Activ.OPC",
|
|
"Activ.iOPC",
|
|
"Activ.noqrc",
|
|
"GatPoly.drawing",
|
|
"GatPoly.label",
|
|
"GatPoly.pin",
|
|
"GatPoly.net",
|
|
"GatPoly.boundary",
|
|
"GatPoly.nofill",
|
|
"GatPoly.OPC",
|
|
"GatPoly.iOPC",
|
|
"GatPoly.noqrc",
|
|
"PolyRes.drawing",
|
|
"PolyRes.label",
|
|
"PolyRes.pin",
|
|
"PolyRes.net",
|
|
"PolyRes.boundary",
|
|
"NWell.drawing",
|
|
"NWell.label",
|
|
"NWell.pin",
|
|
"NWell.net",
|
|
"NWell.boundary",
|
|
"nBuLay.drawing",
|
|
"nBuLay.label",
|
|
"nBuLay.pin",
|
|
"nBuLay.net",
|
|
"nBuLay.boundary",
|
|
"nBuLay.block",
|
|
"PWell.block",
|
|
"pSD.drawing",
|
|
"nSD.drawing",
|
|
"nSD.block",
|
|
"SalBlock.drawing",
|
|
"ThickGateOx.drawing",
|
|
"Cont.drawing",
|
|
"Cont.net",
|
|
"Cont.boundary",
|
|
"Cont.OPC",
|
|
"Metal1.drawing",
|
|
"Metal1.label",
|
|
"Metal1.pin",
|
|
"Metal1.net",
|
|
"Metal1.boundary",
|
|
"Metal1.mask",
|
|
"Metal1.nofill",
|
|
"Metal1.slit",
|
|
"Metal1.text",
|
|
"Metal1.OPC",
|
|
"Metal1.noqrc",
|
|
"Metal1.res",
|
|
"Metal1.iprobe",
|
|
"Metal1.diffprb",
|
|
"Via1.drawing",
|
|
"Via1.net",
|
|
"Via1.boundary",
|
|
"Metal2.drawing",
|
|
"Metal2.label",
|
|
"Metal2.pin",
|
|
"Metal2.net",
|
|
"Metal2.boundary",
|
|
"Metal2.mask",
|
|
"Metal2.nofill",
|
|
"Metal2.slit",
|
|
"Metal2.text",
|
|
"Metal2.OPC",
|
|
"Metal2.noqrc",
|
|
"Metal2.res",
|
|
"Metal2.iprobe",
|
|
"Metal2.diffprb",
|
|
"Via2.drawing",
|
|
"Via2.net",
|
|
"Via2.boundary",
|
|
"Metal3.drawing",
|
|
"Metal3.label",
|
|
"Metal3.pin",
|
|
"Metal3.net",
|
|
"Metal3.boundary",
|
|
"Metal3.mask",
|
|
"Metal3.nofill",
|
|
"Metal3.slit",
|
|
"Metal3.text",
|
|
"Metal3.OPC",
|
|
"Metal3.noqrc",
|
|
"Metal3.res",
|
|
"Metal3.iprobe",
|
|
"Metal3.diffprb",
|
|
"MIM.drawing",
|
|
"MIM.net",
|
|
"MIM.boundary",
|
|
"Vmim.drawing",
|
|
"Via3.drawing",
|
|
"Via3.net",
|
|
"Via3.boundary",
|
|
"Metal4.drawing",
|
|
"Metal4.label",
|
|
"Metal4.pin",
|
|
"Metal4.net",
|
|
"Metal4.boundary",
|
|
"Metal4.mask",
|
|
"Metal4.nofill",
|
|
"Metal4.slit",
|
|
"Metal4.text",
|
|
"Metal4.OPC",
|
|
"Metal4.noqrc",
|
|
"Metal4.res",
|
|
"Metal4.iprobe",
|
|
"Metal4.diffprb",
|
|
"Via4.drawing",
|
|
"Via4.net",
|
|
"Via4.boundary",
|
|
"Metal5.drawing",
|
|
"Metal5.label",
|
|
"Metal5.pin",
|
|
"Metal5.net",
|
|
"Metal5.boundary",
|
|
"Metal5.mask",
|
|
"Metal5.nofill",
|
|
"Metal5.slit",
|
|
"Metal5.text",
|
|
"Metal5.OPC",
|
|
"Metal5.noqrc",
|
|
"Metal5.res",
|
|
"Metal5.iprobe",
|
|
"Metal5.diffprb",
|
|
"TopVia1.drawing",
|
|
"TopVia1.net",
|
|
"TopVia1.boundary",
|
|
"TopMetal1.drawing",
|
|
"TopMetal1.label",
|
|
"TopMetal1.pin",
|
|
"TopMetal1.net",
|
|
"TopMetal1.boundary",
|
|
"TopMetal1.mask",
|
|
"TopMetal1.nofill",
|
|
"TopMetal1.slit",
|
|
"TopMetal1.text",
|
|
"TopMetal1.noqrc",
|
|
"TopMetal1.res",
|
|
"TopMetal1.iprobe",
|
|
"TopMetal1.diffprb",
|
|
"TopVia2.drawing",
|
|
"TopVia2.net",
|
|
"TopVia2.boundary",
|
|
"TopMetal2.drawing",
|
|
"TopMetal2.label",
|
|
"TopMetal2.pin",
|
|
"TopMetal2.net",
|
|
"TopMetal2.boundary",
|
|
"TopMetal2.mask",
|
|
"TopMetal2.nofill",
|
|
"TopMetal2.slit",
|
|
"TopMetal2.text",
|
|
"TopMetal2.noqrc",
|
|
"TopMetal2.res",
|
|
"TopMetal2.iprobe",
|
|
"TopMetal2.diffprb",
|
|
"Passiv.drawing",
|
|
"Passiv.label",
|
|
"Passiv.pin",
|
|
"Passiv.net",
|
|
"Passiv.boundary",
|
|
"Passiv.pillar",
|
|
"Passiv.sbump",
|
|
"Passiv.pdl",
|
|
"NoMetFiller.drawing",
|
|
"ThinFilmRes.drawing",
|
|
"IND.drawing",
|
|
"IND.pin",
|
|
"IND.boundary",
|
|
"IND.text",
|
|
"EdgeSeal.drawing",
|
|
"EdgeSeal.boundary",
|
|
"dfpad.drawing",
|
|
"dfpad.pillar",
|
|
"dfpad.sbump",
|
|
"TEXT.drawing",
|
|
"Recog.drawing",
|
|
"Recog.pin",
|
|
"Recog.esd",
|
|
"Recog.diode",
|
|
"Recog.tsv",
|
|
"Recog.iprobe",
|
|
"Recog.diffprb",
|
|
"Recog.pillar",
|
|
"Recog.sbump",
|
|
"Recog.otp",
|
|
"Recog.pdiode",
|
|
"Recog.mom",
|
|
"Recog.pcm",
|
|
"DigiBnd.drawing",
|
|
"DigiBnd.drawing0",
|
|
"RES.drawing",
|
|
"RES.label",
|
|
"SRAM.drawing",
|
|
"SRAM.label",
|
|
"SRAM.boundary",
|
|
"TRANS.drawing",
|
|
"DigiSub.drawing",
|
|
"HeatTrans.drawing",
|
|
"HeatRes.drawing",
|
|
"NoRCX.drawing",
|
|
"NoRCX.m2m3",
|
|
"NoRCX.m2m4",
|
|
"NoRCX.m2m5",
|
|
"NoRCX.m2tm1",
|
|
"NoRCX.m2tm2",
|
|
"NoRCX.m3m4",
|
|
"NoRCX.m3m5",
|
|
"NoRCX.m3tm1",
|
|
"NoRCX.m3tm2",
|
|
"NoRCX.m4m5",
|
|
"NoRCX.m4tm1",
|
|
"NoRCX.m4tm2",
|
|
"NoRCX.m5tm1",
|
|
"NoRCX.m5tm2",
|
|
"NoRCX.tm1tm2",
|
|
"NoRCX.m1sub",
|
|
"NoRCX.m2sub",
|
|
"NoRCX.m3sub",
|
|
"NoRCX.m4sub",
|
|
"NoRCX.m5sub",
|
|
"NoRCX.tm1sub",
|
|
"NoRCX.tm2sub",
|
|
"BiWind.drawing",
|
|
"BiWind.OPC",
|
|
"BasPoly.drawing",
|
|
"BasPoly.label",
|
|
"BasPoly.pin",
|
|
"BasPoly.net",
|
|
"BasPoly.boundary",
|
|
"EmWind.drawing",
|
|
"EmWind.OPC",
|
|
"DeepCo.drawing",
|
|
"EmPoly.drawing",
|
|
"Varicap.drawing",
|
|
"EmWind3.drawing",
|
|
"EmWiHV3.drawing",
|
|
"ColOpen.drawing",
|
|
"ColWind.drawing",
|
|
"EmWiHV.drawing",
|
|
"DeepVia.drawing",
|
|
"LBE.drawing",
|
|
"BackMetal1.drawing",
|
|
"BackMetal1.label",
|
|
"BackMetal1.pin",
|
|
"BackMetal1.net",
|
|
"BackMetal1.boundary",
|
|
"BackMetal1.mask",
|
|
"BackMetal1.nofill",
|
|
"BackMetal1.slit",
|
|
"BackMetal1.text",
|
|
"BackMetal1.OPC",
|
|
"BackMetal1.noqrc",
|
|
"BackMetal1.res",
|
|
"BackMetal1.iprobe",
|
|
"BackMetal1.diffprb",
|
|
"BackPassiv.drawing",
|
|
"IntBondVia.drawing",
|
|
"IntBondMet.drawing",
|
|
"DevBondVia.drawing",
|
|
"DevBondMet.drawing",
|
|
"DevTrench.drawing",
|
|
"Redist.drawing",
|
|
"FBE.drawing",
|
|
"AntVia1.drawing",
|
|
"AntMetal2.drawing",
|
|
"AntMetal1.drawing",
|
|
"FLM.drawing",
|
|
"SNSRing.drawing",
|
|
"Sensor.drawing",
|
|
"SNSArms.drawing",
|
|
"SNSCMOSVia.drawing",
|
|
"SNSBotVia.drawing",
|
|
"SNSTopVia.drawing",
|
|
"NLDB.drawing",
|
|
"PLDB.drawing",
|
|
"RedBuLay.drawing",
|
|
"NLDD.drawing",
|
|
"PLDD.drawing",
|
|
"NExt.drawing",
|
|
"PExt.drawing",
|
|
"INLDPWL.drawing",
|
|
"nBuLayCut.drawing",
|
|
"GraphBot.drawing",
|
|
"GraphTop.drawing",
|
|
"GraphCont.drawing",
|
|
"SiWG.drawing",
|
|
"SiWG.nofill",
|
|
"SiGrating.drawing",
|
|
"SiNGrating.drawing",
|
|
"GraphPas.drawing",
|
|
"GraphPad.drawing",
|
|
"GraphMetal1.drawing",
|
|
"GraphMetal1.nofill",
|
|
"GraphMetal1.slit",
|
|
"GraphMetal1.OPC",
|
|
"GraphMet1L.drawing",
|
|
"GraphMet1L.nofill",
|
|
"GraphMet1L.slit",
|
|
"GraphMet1L.OPC",
|
|
"GraphGate.drawing",
|
|
"SiNWG.drawing",
|
|
"SiNWG.nofill",
|
|
"PWell.drawing",
|
|
"PWell.label",
|
|
"PWell.pin",
|
|
"PWell.net",
|
|
"PWell.boundary",
|
|
"IC.drawing",
|
|
"NoDRC.drawing",
|
|
"RadHard.drawing",
|
|
"MemCap.drawing",
|
|
"SMOS.drawing",
|
|
"Polimide.drawing",
|
|
"Polimide.label",
|
|
"Polimide.pin",
|
|
"Polimide.net",
|
|
"EXTBlock.drawing",
|
|
"NExtHV.drawing",
|
|
"PExtHV.drawing",
|
|
"MEMPAD.drawing",
|
|
"HafniumOx.drawing",
|
|
"MEMVia.drawing",
|
|
"RFMEM.drawing",
|
|
"FGEtch.drawing",
|
|
"CtrGat.drawing",
|
|
"FGImp.drawing",
|
|
"AlCuStop.drawing",
|
|
"prBoundary.drawing",
|
|
"prBoundary.label",
|
|
"prBoundary.boundary",
|
|
"Exchange0.drawing",
|
|
"Exchange0.label",
|
|
"Exchange0.pin",
|
|
"Exchange0.text",
|
|
"Exchange1.drawing",
|
|
"Exchange1.label",
|
|
"Exchange1.pin",
|
|
"Exchange1.text",
|
|
"Exchange2.drawing",
|
|
"Exchange2.label",
|
|
"Exchange2.pin",
|
|
"Exchange2.text",
|
|
"Exchange3.drawing",
|
|
"Exchange3.label",
|
|
"Exchange3.pin",
|
|
"Exchange3.text",
|
|
"Exchange4.drawing",
|
|
"Exchange4.label",
|
|
"Exchange4.pin",
|
|
"Exchange4.text",
|
|
"isoNWell.drawing",
|
|
]
|
|
|
|
# layers used for the analog pin check
|
|
layer_map_sky130 = {
|
|
"met4": (71, 20),
|
|
"via3": (70, 44),
|
|
}
|
|
|
|
|
|
def analog_pin_pos_sky130(pin_number: int, uses_3v3: bool):
|
|
return 151.81 - 19.32 * pin_number - (15.64 if uses_3v3 else 0)
|
|
|
|
|
|
valid_layers = {"sky130": valid_layers_sky130, "ihp-sg13g2": valid_layers_ihp_sg13g2}
|
|
layer_map = {"sky130": layer_map_sky130}
|
|
analog_pin_pos = {"sky130": analog_pin_pos_sky130}
|
|
lyp_filename = {"sky130": "sky130A.lyp", "ihp-sg13g2": "sg13g2.lyp"}
|
|
|
|
# TODO: read layer numbers from lyp file
|
|
valid_lef_port_layers = {
|
|
"sky130": {
|
|
"met1.pin": (68, 16),
|
|
"met2.pin": (69, 16),
|
|
"met3.pin": (70, 16),
|
|
"met4.pin": (71, 16),
|
|
},
|
|
"ihp-sg13g2": {
|
|
"Metal1.pin": (8, 2),
|
|
"Metal2.pin": (10, 2),
|
|
"Metal3.pin": (30, 2),
|
|
"Metal4.pin": (50, 2),
|
|
"Metal5.pin": (67, 2),
|
|
},
|
|
}
|
|
forbidden_layers = {
|
|
"sky130": ["met5.drawing", "met5.pin", "met5.label"],
|
|
"ihp-sg13g2": [
|
|
"TopMetal1.drawing",
|
|
"TopMetal1.pin",
|
|
"TopMetal1.label",
|
|
"TopMetal2.drawing",
|
|
"TopMetal2.pin",
|
|
"TopMetal2.label",
|
|
],
|
|
}
|
|
power_pins_layer = {
|
|
"sky130": "met4",
|
|
"ihp-sg13g2": "Metal5",
|
|
}
|
|
|
|
tech_names = ["sky130", "ihp-sg13g2"]
|