cleanup according to the reviews - moved the script to sky130/custom/scripts - removed the vnb/vpb fix since it's comming soon to the skywater repo
diff --git a/common/fix_missing_lef.py b/common/fix_missing_lef.py deleted file mode 100644 index f63c68e..0000000 --- a/common/fix_missing_lef.py +++ /dev/null
@@ -1,81 +0,0 @@ -#!/usr/bin/env python3 - -from os import path -import argparse -import subprocess - -parser = argparse.ArgumentParser( - description='This file fixes the missing information from the LEF files of the cells') - -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: - revert_modify_vpb_result_cmd = "sed -i 's/PIN VPB\\n DIRECTION INOUT ;\\n USE POWER ;/PIN VPB/g' {lef} ".format( - lef= skywater_path+"/"+lib+"/*/cells/*/*.magic.lef" - ) - print(revert_modify_vpb_result_cmd) - subprocess.call([revert_modify_vpb_result_cmd], shell=True) - - modify_vpb_result_cmd = "sed -i 's/PIN VPB/PIN VPB\\n DIRECTION INOUT ;\\n USE POWER ;/g' {lef} ".format( - lef= skywater_path+"/"+lib+"/*/cells/*/*.magic.lef" - ) - print(modify_vpb_result_cmd) - subprocess.call([modify_vpb_result_cmd], shell=True) - - revert_modify_vnb_result_cmd = "sed -i 's/PIN VNB\\n DIRECTION INOUT ;\\n USE GROUND ;/PIN VNB/g' {lef} ".format( - lef= skywater_path+"/"+lib+"/*/cells/*/*.magic.lef" - ) - print(revert_modify_vnb_result_cmd) - subprocess.call([revert_modify_vnb_result_cmd], shell=True) - - modify_vnb_result_cmd = "sed -i 's/PIN VNB/PIN VNB\\n DIRECTION INOUT ;\\n USE GROUND ;/g' {lef} ".format( - lef= skywater_path+"/"+lib+"/*/cells/*/*.magic.lef" - ) - print(modify_vnb_result_cmd) - subprocess.call([modify_vnb_result_cmd], shell=True) - -if modify_hs_ms_diodes: - hs_lef = str(skywater_path)+"/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)): - if hs_lef_FileOpener.mode == 'r': - hs_lef_Content = hs_lef_FileOpener.read() - hs_lef_FileOpener.close() - hs_lef_Content = hs_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL") - if hs_lef_Content.find("PIN DIODE\n DIRECTION INPUT ;") == -1: - hs_lef_Content = hs_lef_Content.replace("PIN DIODE","SYMMETRY X Y ;\n SITE unit ;\n PIN DIODE\n DIRECTION INPUT ;\n USE SIGNAL ;") - hs_lef_FileOpener = open(hs_lef,"w") - hs_lef_FileOpener.write(hs_lef_Content) - hs_lef_FileOpener.close() - - - ms_lef = str(skywater_path)+"/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)): - if ms_lef_FileOpener.mode == 'r': - ms_lef_Content = ms_lef_FileOpener.read() - ms_lef_FileOpener.close() - ms_lef_Content = ms_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL") - if ms_lef_Content.find("PIN DIODE\n DIRECTION INPUT ;") == -1: - ms_lef_Content = ms_lef_Content.replace("PIN DIODE","SYMMETRY X Y ;\n SITE unit ;\n PIN DIODE\n DIRECTION INPUT ;\n USE SIGNAL ;") - ms_lef_FileOpener = open(ms_lef,"w") - ms_lef_FileOpener.write(ms_lef_Content) - ms_lef_FileOpener.close()
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index 82237d0..9f7ff4e 100644 --- a/sky130/Makefile.in +++ b/sky130/Makefile.in
@@ -358,7 +358,7 @@ vendor-a: # Modify the LEF files to update hs and ms libraries - python3 ../common/fix_missing_lef.py --modify_hs_ms_diodes --modify_vnb_vpb --skywater_path ${SKYWATER_PATH} + python3 ./custom/scripts/fix_missing_diodes_lef.py --skywater_path ${SKYWATER_PATH} # Install device subcircuits from vendor files ${STAGE} -source ${SKYWATER_PATH} -target ${STAGING_PATH}/${SKY130A} \ -ngspice sky130_fd_pr/latest/models/* \
diff --git a/sky130/custom/scripts/fix_missing_diodes_lef.py b/sky130/custom/scripts/fix_missing_diodes_lef.py new file mode 100644 index 0000000..4702b40 --- /dev/null +++ b/sky130/custom/scripts/fix_missing_diodes_lef.py
@@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +from os import path +import argparse +import subprocess + +parser = argparse.ArgumentParser( + description='This file fixes the missing diode information from the LEF files of the ms and hs') + +parser.add_argument('--skywater_path', '-sp',required=True, + help='skywater path') + + +args = parser.parse_args() +skywater_path = args.skywater_path + + +hs_lef = str(skywater_path)+"/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)): + if hs_lef_FileOpener.mode == 'r': + hs_lef_Content = hs_lef_FileOpener.read() + hs_lef_FileOpener.close() + hs_lef_Content = hs_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL") + if hs_lef_Content.find("PIN DIODE\n DIRECTION INPUT ;") == -1: + hs_lef_Content = hs_lef_Content.replace("PIN DIODE","SYMMETRY X Y ;\n SITE unit ;\n PIN DIODE\n DIRECTION INPUT ;\n USE SIGNAL ;") + hs_lef_FileOpener = open(hs_lef,"w") + hs_lef_FileOpener.write(hs_lef_Content) + hs_lef_FileOpener.close() + + +ms_lef = str(skywater_path)+"/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)): + if ms_lef_FileOpener.mode == 'r': + ms_lef_Content = ms_lef_FileOpener.read() + ms_lef_FileOpener.close() + ms_lef_Content = ms_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL") + if ms_lef_Content.find("PIN DIODE\n DIRECTION INPUT ;") == -1: + ms_lef_Content = ms_lef_Content.replace("PIN DIODE","SYMMETRY X Y ;\n SITE unit ;\n PIN DIODE\n DIRECTION INPUT ;\n USE SIGNAL ;") + ms_lef_FileOpener = open(ms_lef,"w") + ms_lef_FileOpener.write(ms_lef_Content) + ms_lef_FileOpener.close()