''' This script generates OpenDB database from LEF/DEF ''' import odb import sys import os import re design = sys.argv[1] def_file = sys.argv[2] output_dir = sys.argv[3] work_dir = re.search(r'(/\S+/MacroPlacement)', os.getcwd()).group(1) sys.path.append(f'{work_dir}/Flows/util') from convert_odb2bookshelf import OdbToBookshelf lef_dir = f'{work_dir}/Enablements/NanGate45/lef' lef_list = [f'{lef_dir}/NangateOpenCellLibrary.tech.lef', f'{lef_dir}/NangateOpenCellLibrary.macro.mod.lef', f'{lef_dir}/fakeram45_256x16.lef'] db = odb.dbDatabase.create() for lef_file in lef_list: odb.read_lef(db, lef_file) odb.read_def(db, def_file) chip = db.getChip() tech = db.getTech() libs = db.getLibs() if chip is None: exit("ERROR: READ DEF Failed") if not os.path.exists(f'{output_dir}/RePlAce'): os.makedirs(f'{output_dir}/RePlAce') odb_file = f'{output_dir}/RePlAce/{design}.odb' export_result = odb.write_db(db, odb_file) if export_result != 1: exit("ERROR: Export failed") new_db = odb.dbDatabase.create() odb.read_db(new_db, odb_file) if new_db is None: exit("ERROR: Import failed") if odb.db_diff(db, new_db): exit("ERROR: Difference found in exported and imported DB") print(f"Successfully generated ODB format from LEF/DEF for {design}") bs = OdbToBookshelf( opendbpy=odb, opendb=db, cellPadding=0, modeFormat="ISPD11", layerCapacity='layeradjust_empty.tcl') bs.WriteBookshelf(f'{design}_pad0_ISPD11')