Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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 "|==============================================================================|"
Ejemplo n.º 3
0
#!/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(
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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))