base commit for the lef modifying scripts - add missing hs/ms diodes info - add USE and DIRECTION to VNB and VPB pins - Not yet tested..
diff --git a/common/fix_missing_lef.py b/common/fix_missing_lef.py new file mode 100644 index 0000000..9ed30e5 --- /dev/null +++ b/common/fix_missing_lef.py
@@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +import re +import os +import sys +import argparse + + +parser = argparse.ArgumentParser( + description='This file fixes the missing') + +parser.add_argument('--skywater_path', '-sp',required=True, + help='skywater path') + +parser.add_argument('--modify_hs_ms_diodes', '-mhmd',action='store_true', default=False, + help="modifies the hs and ms diode information.") + +parser.add_argument('--modify_vnb_vpb', '-mvv',action='store_true', default=False, + help="modifies the vnb and vpb of all cells in all libraries.") + + +args = parser.parse_args() +skywater_path = args.skywater_path +modify_hs_ms_diodes = args.modify_hs_ms_diodes +modify_vnb_vpb = args.modify_vnb_vpb + +libraries = ['sky130_fd_sc_hd','sky130_fd_sc_hdll','sky130_fd_sc_hs','sky130_fd_sc_ms','sky130_fd_sc_ls'] + +if modify_vnb_vpb: + for lib in libraries: + modify_vpb_result_cmd = "sed -i 's/PIN VPB/PIN VPB\nDIRECTION INOUT ;\nUSE POWER ;/g' {lef} ".format( + lef= skywater_path+"/libraries/"+lib+"/*/cells/*/*.magic.lef" + ) + subprocess.check_output(modify_vpb_result_cmd.split()) + + modify_vnb_result_cmd = "sed -i 's/PIN VNB/PIN VNB\nDIRECTION INOUT ;\nUSE GROUND ;/g' {lef} ".format( + lef= skywater_path+"/libraries/"+lib+"/*/cells/*/*.magic.lef" + ) + subprocess.check_output(modify_vnb_result_cmd.split()) + +if modify_hs_ms_diodes: + hs_lef = skywater_path+"/libraries/sky130_fd_sc_hs/latest/cells/diode/sky130_fd_sc_hs__diode_2.magic.lef" + + hs_lef_FileOpener = open(hs_lef, "r") + if(path.exists(hs_lef_FileOpener)): + if hs_lef_FileOpener.mode == 'r': + hs_lef_Content = hs_lef_FileOpener.read() + hs_lef_FileOpener.close() + sections = hs_lef_Content.split("MACRO sky130_fd_sc_hs__diode_2") + sections.append(sections[1].split("END sky130_fd_sc_hs__diode_2")[1]) + sections.append(sections[1].split("END sky130_fd_sc_hs__diode_2")[0]) + # now sections[1] contains diode info; + sections[1] = sections[1].replace("CLASS BLOCK","CLASS CORE ANTENNACELL") + sections[1] = "\nSYMMETRY X Y ;\nSITE unit ;\n"+sections[1] + sections[1] = sections[1].replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n") + combined = "MACRO sky130_fd_sc_hs__diode_2".join(sections[0:1]) + combined = combined+"END sky130_fd_sc_hs__diode_2"+ sections[2] + hs_lef_FileOpener = open(hs_lef,"w") + hs_lef_FileOpener.write(combined) + hs_lef_FileOpener.close() + + + ms_lef = skywater_path+"/libraries/sky130_fd_sc_ms/latest/cells/diode/sky130_fd_sc_ms__diode_2.magic.lef" + + ms_lef_FileOpener = open(ms_lef, "r") + if(path.exists(ms_lef_FileOpener)): + if ms_lef_FileOpener.mode == 'r': + ms_lef_Content = ms_lef_FileOpener.read() + ms_lef_FileOpener.close() + sections = ms_lef_Content.split("MACRO sky130_fd_sc_ms__diode_2") + sections.append(sections[1].split("END sky130_fd_sc_ms__diode_2")[1]) + sections.append(sections[1].split("END sky130_fd_sc_ms__diode_2")[0]) + # now sections[1] contains diode info; + sections[1] = sections[1].replace("CLASS BLOCK","CLASS CORE ANTENNACELL") + sections[1] = "\nSYMMETRY X Y ;\nSITE unit ;\n"+sections[1] + sections[1] = sections[1].replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n") + combined = "MACRO sky130_fd_sc_ms__diode_2".join(sections[0:1]) + combined = combined+"END sky130_fd_sc_ms__diode_2"+ sections[2] + ms_lef_FileOpener = open(ms_lef,"w") + ms_lef_FileOpener.write(combined) + ms_lef_FileOpener.close()
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index d509361..b6745bb 100644 --- a/sky130/Makefile.in +++ b/sky130/Makefile.in
@@ -357,6 +357,8 @@ ${CPP} ${SKY130A_DEFS} openlane/sky130_osu_sc_t18/tracks.info > ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/tracks.info vendor-a: + # Modify the LEF files to update hs and ms libraries + python3 ../common/foundry_install.py --modify_hs_ms_diodes --modify_vnb_vpb --skywater_path ${SKYWATER_PATH} # Install device subcircuits from vendor files ${STAGE} -source ${SKYWATER_PATH} -target ${STAGING_PATH}/${SKY130A} \ -ngspice sky130_fd_pr/latest/models/* \