cleanups and using hs/ms diodes in openlane - modified openlane configs to include the diodes of hs and ms - better formatting in the output LEFs
diff --git a/common/fix_missing_lef.py b/common/fix_missing_lef.py index f38fc15..f63c68e 100644 --- a/common/fix_missing_lef.py +++ b/common/fix_missing_lef.py
@@ -5,7 +5,7 @@ import subprocess parser = argparse.ArgumentParser( - description='This file fixes the missing') + 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') @@ -26,25 +26,25 @@ if modify_vnb_vpb: for lib in libraries: - revert_modify_vpb_result_cmd = "sed -i 's/PIN VPB\\nDIRECTION INOUT ;\\nUSE POWER ;/PIN VPB/g' {lef} ".format( + 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\\nDIRECTION INOUT ;\\nUSE POWER ;/g' {lef} ".format( + 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\\nDIRECTION INOUT ;\\nUSE GROUND ;/PIN VNB/g' {lef} ".format( + 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\\nDIRECTION INOUT ;\\nUSE GROUND ;/g' {lef} ".format( + 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) @@ -59,10 +59,8 @@ 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("SYMMETRY X Y ;") == -1: - 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") - if hs_lef_Content.find("PIN DIODE\nDIRECTION INPUT ;") == -1: - hs_lef_Content = hs_lef_Content.replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n") + 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() @@ -76,10 +74,8 @@ 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("SYMMETRY X Y ;") == -1: - 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") - if ms_lef_Content.find("PIN DIODE\nDIRECTION INPUT ;") == -1: - ms_lef_Content = ms_lef_Content.replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n") + 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/openlane/sky130_fd_sc_hs/config.tcl b/sky130/openlane/sky130_fd_sc_hs/config.tcl index cbf48b3..6d1b9ba 100755 --- a/sky130/openlane/sky130_fd_sc_hs/config.tcl +++ b/sky130/openlane/sky130_fd_sc_hs/config.tcl
@@ -45,10 +45,8 @@ set ::env(DECAP_CELL) "sky130_fd_sc_hs__decap_" # Diode insertaion -set ::env(DIODE_CELL) "" -set ::env(FAKEDIODE_CELL) "" -set ::env(DIODE_CELL_PIN) "" -set ::env(DIODE_INSERTION_STRATEGY) 0 +set ::env(DIODE_CELL) "sky130_fd_sc_hs__diode_2" +set ::env(DIODE_CELL_PIN) "DIODE" set ::env(CELL_PAD) 8 set ::env(CELL_PAD_EXCLUDE) "sky130_fd_sc_hs__tap* sky130_fd_sc_hs__decap* sky130_fd_sc_hs__fill*"
diff --git a/sky130/openlane/sky130_fd_sc_ms/config.tcl b/sky130/openlane/sky130_fd_sc_ms/config.tcl index a41b28d..7b00a53 100755 --- a/sky130/openlane/sky130_fd_sc_ms/config.tcl +++ b/sky130/openlane/sky130_fd_sc_ms/config.tcl
@@ -46,10 +46,8 @@ set ::env(RE_BUFFER_CELL) "sky130_fd_sc_ms__buf_4" # Diode insertaion -set ::env(DIODE_CELL) "" -set ::env(FAKEDIODE_CELL) "" -set ::env(DIODE_CELL_PIN) "" -set ::env(DIODE_INSERTION_STRATEGY) 0 +set ::env(DIODE_CELL) "sky130_fd_sc_ms__diode_2" +set ::env(DIODE_CELL_PIN) "DIODE" set ::env(CELL_PAD) 8 set ::env(CELL_PAD_EXCLUDE) "$::env(STD_CELL_LIBRARY)__tap* $::env(STD_CELL_LIBRARY)__decap* $::env(STD_CELL_LIBRARY)__fill*"