fixes
diff --git a/common/fix_missing_lef.py b/common/fix_missing_lef.py index 9ed30e5..5b16849 100644 --- a/common/fix_missing_lef.py +++ b/common/fix_missing_lef.py
@@ -1,10 +1,8 @@ #!/usr/bin/env python3 -import re -import os -import sys +from os import path import argparse - +import subprocess parser = argparse.ArgumentParser( description='This file fixes the missing') @@ -28,54 +26,46 @@ 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" + modify_vpb_result_cmd = "sed -i 's/PIN VPB/PIN VPB\\nDIRECTION INOUT ;\\nUSE POWER ;/g' {lef} ".format( + lef= skywater_path+"/"+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" + print(modify_vpb_result_cmd) + #subprocess.call(modify_vpb_result_cmd.split("")) + subprocess.call([modify_vpb_result_cmd], shell=True) + modify_vnb_result_cmd = "sed -i 's/PIN VNB/PIN VNB\\nDIRECTION INOUT ;\\nUSE GROUND ;/g' {lef} ".format( + lef= skywater_path+"/"+lib+"/*/cells/*/*.magic.lef" ) - subprocess.check_output(modify_vnb_result_cmd.split()) + #subprocess.call(modify_vnb_result_cmd.split()) + print(modify_vnb_result_cmd) + subprocess.call([modify_vnb_result_cmd], shell=True) 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 = 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_FileOpener)): + if(path.exists(hs_lef)): 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_Content = hs_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL") + hs_lef_Content = hs_lef_Content.replace("MACRO sky130_fd_sc_hs__diode_2","MACRO sky130_fd_sc_hs__diode_2\nSYMMETRY X Y ;\nSITE unit ;\n") + hs_lef_Content = hs_lef_Content.replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n") hs_lef_FileOpener = open(hs_lef,"w") - hs_lef_FileOpener.write(combined) + hs_lef_FileOpener.write(hs_lef_Content) 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 = 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_FileOpener)): + if(path.exists(ms_lef)): 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_Content = ms_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL") + ms_lef_Content = ms_lef_Content.replace("MACRO sky130_fd_sc_ms__diode_2","MACRO sky130_fd_sc_ms__diode_2\nSYMMETRY X Y ;\nSITE unit ;\n") + ms_lef_Content = ms_lef_Content.replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n") ms_lef_FileOpener = open(ms_lef,"w") - ms_lef_FileOpener.write(combined) + ms_lef_FileOpener.write(ms_lef_Content) ms_lef_FileOpener.close()
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index b6745bb..82237d0 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/foundry_install.py --modify_hs_ms_diodes --modify_vnb_vpb --skywater_path ${SKYWATER_PATH} + python3 ../common/fix_missing_lef.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/* \