mapper.py 1.93 KB
Newer Older
ZhiangWang033 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
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))