from BookshelfToOdb import BookshelfToOdb import odb import os import sys sys.path.append('./utils') def PreProcessNanGate45(db, ffClkPinList): for lib in db.getLibs(): for master in lib.getMasters(): for mTerm in master.getMTerms(): if mTerm.getName() in ffClkPinList: master.setSequential(1) print("[INFO] Set %s as sequential masters" %(master.getName())) break def MapNanGate45(file_dir, lef_list, design, util_dir): db = odb.dbDatabase.create() for lef in lef_list: odb.read_lef(db, lef) PreProcessNanGate45(db, ['CK']) bs = BookshelfToOdb(opendbpy = odb, opendb = db, file_dir = file_dir, auxName = "%s.aux" % (design), siteName = 'FreePDK45_38x28_10R_NP_162NW_34O', macroInstObsLayer = ['metal1', 'via1', 'metal2', 'via2'], macroInstPinLayer = ['metal3', 'metal4'], primaryLayer = 'metal3', mastersFileName = util_dir + '/cellList_ng45.txt', ffClkPinList = ['CK'], customFPRatio = 1.2) bs.WriteMacroLef('%s_macro.lef' %(design)) odb.write_def(db.getChip().getBlock(), '%s.def' % (design)) odb.write_db(db, '%s.db' % (design)) def MapASAP7(file_dir, lef_list, design, util_dir): db = odb.dbDatabase.create() for lef in lef_list: odb.read_lef(db, lef) PreProcessNanGate45(db, ['CLK']) bs = BookshelfToOdb(opendbpy = odb, opendb = db, file_dir = file_dir, auxName = "%s.aux" % (design), siteName = 'asap7sc7p5t', macroInstObsLayer = ['M1', 'V1', 'M2', 'V2'], macroInstPinLayer = ['M3', 'M4'], primaryLayer = 'M3', mastersFileName = util_dir + '/cellList_asap7.txt', ffClkPinList = ['CLK'], targetFFRatio = 0.18, customFPRatio = 1.2) bs.WriteMacroLef('%s_macro.lef' %(design)) odb.write_def(db.getChip().getBlock(), '%s.def' % (design)) odb.write_db(db, '%s.db' % (design))