def info(lev, str): OPTS = globals.get_opts() if (OPTS.debug_level >= lev): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) #classname = frm.f_globals['__name__'] if mod.__name__ == None: class_name = "" else: class_name = mod.__name__ print("[{0}/{1}]: {2}".format(class_name, frm[0].f_code.co_name, str))
def header(filename, technology): tst = "Running Test for:" print "\n" print " ______________________________________________________________________________ " print "|==============================================================================|" print "|=========" + tst.center(60) + "=========|" print "|=========" + technology.center(60) + "=========|" print "|=========" + filename.center(60) + "=========|" import globals OPTS = globals.get_opts() print "|=========" + OPTS.openram_temp.center(60) + "=========|" print "|==============================================================================|"
#!/usr/bin/env python2.7 """ Run a regresion test on a write driver array """ import unittest from testutils import header import sys, os sys.path.append(os.path.join(sys.path[0], "..")) import globals import debug import calibre OPTS = globals.get_opts() #@unittest.skip("SKIPPING 10_write_driver_test") class write_driver_test(unittest.TestCase): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) import write_driver_array debug.info(2, "Testing write_driver_array for columns=16, word_size=4") OPTS.check_lvsdrc = False a = write_driver_array.write_driver_array(columns=16, word_size=4) OPTS.check_lvsdrc = True self.local_check(a) debug.info(
def run_drc(name, gds_name): """Run DRC check on a given top-level name which is implemented in gds_name.""" OPTS = globals.get_opts() # the runset file contains all the options to run calibre from tech import drc drc_rules = drc["drc_rules"] drc_runset = { 'drcRulesFile': drc_rules, 'drcRunDir': OPTS.openram_temp, 'drcLayoutPaths': gds_name, 'drcLayoutPrimary': name, 'drcLayoutSystem': 'GDSII', 'drcResultsformat': 'ASCII', 'drcResultsFile': OPTS.openram_temp + name + ".drc.results", 'drcSummaryFile': OPTS.openram_temp + name + ".drc.summary", 'cmnFDILayerMapFile': drc["layer_map"], 'cmnFDIUseLayerMap': 1 } # write the runset file f = open(OPTS.openram_temp + "drc_runset", "w") for k in sorted(drc_runset.iterkeys()): f.write("*%s: %s\n" % (k, drc_runset[k])) f.close() # run drc os.chdir(OPTS.openram_temp) errfile = "%s%s.drc.err" % (OPTS.openram_temp, name) outfile = "%s%s.drc.out" % (OPTS.openram_temp, name) cmd = "{0} -gui -drc {1}drc_runset -batch 2> {2} 1> {3}".format( OPTS.calibre_exe, OPTS.openram_temp, errfile, outfile) debug.info(1, cmd) os.system(cmd) # check the result for these lines in the summary: # TOTAL Original Layer Geometries: 106 (157) # TOTAL DRC RuleChecks Executed: 156 # TOTAL DRC Results Generated: 0 (0) f = open(drc_runset['drcSummaryFile'], "r") results = f.readlines() f.close() # those lines should be the last 3 results = results[-3:] geometries = int(re.split("\W+", results[0])[5]) rulechecks = int(re.split("\W+", results[1])[4]) errors = int(re.split("\W+", results[2])[5]) # always display this summary if errors > 0: debug.error("%-25s\tGeometries: %d\tChecks: %d\tErrors: %d" % (name, geometries, rulechecks, errors)) else: debug.info( 1, "%-25s\tGeometries: %d\tChecks: %d\tErrors: %d" % (name, geometries, rulechecks, errors)) return errors
def run_pex(name, gds_name, sp_name, output=None): """Run pex on a given top-level name which is implemented in gds_name and sp_name. """ OPTS = globals.get_opts() from tech import drc if output == None: output = name + ".pex.netlist" # check if lvs report has been done # if not run drc and lvs if not os.path.isfile(name + ".lvs.report"): run_drc(name, gds_name) run_lvs(name, gds_name, sp_name) pex_rules = drc["xrc_rules"] pex_runset = { 'pexRulesFile': pex_rules, 'pexRunDir': OPTS.openram_temp, 'pexLayoutPaths': gds_name, 'pexLayoutPrimary': name, #'pexSourcePath' : OPTS.openram_temp+"extracted.sp", 'pexSourcePath': sp_name, 'pexSourcePrimary': name, 'pexReportFile': name + ".lvs.report", 'pexPexNetlistFile': output, 'pexPexReportFile': name + ".pex.report", 'pexMaskDBFile': name + ".maskdb", 'cmnFDIDEFLayoutPath': name + ".def", } # write the runset file f = open(OPTS.openram_temp + "pex_runset", "w") for k in sorted(pex_runset.iterkeys()): f.write("*{0}: {1}\n".format(k, pex_runset[k])) f.close() # run pex os.chdir(OPTS.openram_temp) errfile = "{0}{1}.pex.err".format(OPTS.openram_temp, name) outfile = "{0}{1}.pex.out".format(OPTS.openram_temp, name) cmd = "{0} -gui -pex {1}pex_runset -batch 2> {2} 1> {3}".format( OPTS.calibre_exe, OPTS.openram_temp, errfile, outfile) debug.info(2, cmd) os.system(cmd) # also check the output file f = open(outfile, "r") results = f.readlines() f.close() # Errors begin with "ERROR:" test = re.compile("ERROR:") stdouterrors = filter(test.search, results) for e in stdouterrors: debug.error(e.strip("\n")) out_errors = len(stdouterrors) assert (os.path.isfile(output)) correct_port(name, output, sp_name) return out_errors
def run_lvs(name, gds_name, sp_name): """Run LVS check on a given top-level name which is implemented in gds_name and sp_name. """ OPTS = globals.get_opts() from tech import drc lvs_rules = drc["lvs_rules"] lvs_runset = { 'lvsRulesFile': lvs_rules, 'lvsRunDir': OPTS.openram_temp, 'lvsLayoutPaths': gds_name, 'lvsLayoutPrimary': name, 'lvsSourcePath': sp_name, 'lvsSourcePrimary': name, 'lvsSourceSystem': 'SPICE', 'lvsSpiceFile': OPTS.openram_temp + "extracted.sp", 'lvsPowerNames': 'vdd', 'lvsGroundNames': 'gnd', 'lvsIncludeSVRFCmds': 1, 'lvsSVRFCmds': '{VIRTUAL CONNECT NAME VDD? GND? ?}', 'lvsIgnorePorts': 1, 'lvsERCDatabase': OPTS.openram_temp + name + ".erc.results", 'lvsERCSummaryFile': OPTS.openram_temp + name + ".erc.summary", 'lvsReportFile': OPTS.openram_temp + name + ".lvs.report", 'lvsMaskDBFile': OPTS.openram_temp + name + ".maskdb", 'cmnFDILayerMapFile': drc["layer_map"], 'cmnFDIUseLayerMap': 1, 'cmnVConnectNames': 'vdd, gnd', #'cmnVConnectNamesState' : 'ALL', #connects all nets with the same name } # write the runset file f = open(OPTS.openram_temp + "lvs_runset", "w") for k in sorted(lvs_runset.iterkeys()): f.write("*%s: %s\n" % (k, lvs_runset[k])) f.close() # run LVS os.chdir(OPTS.openram_temp) errfile = "%s%s.lvs.err" % (OPTS.openram_temp, name) outfile = "%s%s.lvs.out" % (OPTS.openram_temp, name) cmd = "calibre -gui -lvs %slvs_runset -batch 2> %s 1> %s" % ( OPTS.openram_temp, errfile, outfile) debug.info(2, cmd) os.system(cmd) # check the result for these lines in the summary: f = open(lvs_runset['lvsReportFile'], "r") results = f.readlines() f.close() # NOT COMPARED # CORRECT # INCORRECT test = re.compile("# CORRECT #") correct = filter(test.search, results) test = re.compile("NOT COMPARED") notcompared = filter(test.search, results) test = re.compile("# INCORRECT #") incorrect = filter(test.search, results) # Errors begin with "Error:" test = re.compile("\s+Error:") errors = filter(test.search, results) for e in errors: debug.error(e.strip("\n")) summary_errors = len(notcompared) + len(incorrect) + len(errors) # also check the extraction summary file f = open(lvs_runset['lvsReportFile'] + ".ext", "r") results = f.readlines() f.close() test = re.compile("ERROR:") exterrors = filter(test.search, results) for e in exterrors: debug.error(e.strip("\n")) test = re.compile("WARNING:") extwarnings = filter(test.search, results) for e in extwarnings: debug.error(e.strip("\n")) ext_errors = len(exterrors) + len(extwarnings) # also check the output file f = open(outfile, "r") results = f.readlines() f.close() # Errors begin with "ERROR:" test = re.compile("ERROR:") stdouterrors = filter(test.search, results) for e in stdouterrors: debug.error(e.strip("\n")) out_errors = len(stdouterrors) return summary_errors + out_errors + ext_errors
def info(lev, str): OPTS = globals.get_opts() if (OPTS.debug_level >= lev): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) print "\n[", frm[0].f_code.co_name, "]: ", str
def info(lev, str): OPTS = globals.get_opts() if (OPTS.debug_level >= lev): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) print("[{0}]: {1}".format(frm[0].f_code.co_name,str))