Пример #1
0
def get_wave(filename):
    vcd_filename = __get_vcd_filename__('%s.vvp' % filename[0:-2])
    ftp_utils.download_file_to_tmp(vcd_filename)
    vcd = parse_vcd("./tmp/%s" % vcd_filename)
    units = get_timescale()
    i = 0
    time = 0
    endtime = get_endtime()
    data = {
        'file': vcd_filename,
        'scale': units,
        'endtime': endtime,
        'signals': []
    }
    for key, value in vcd.iteritems():
        name = value['nets'][0]['hier'] + "." + value['nets'][0]['name']
        size = value['nets'][0]['size']
        data['signals'].append({'name': name, 'size': size, 'wave': []})
        time = 0

        for item in value['tv']:
            wavestruct = []
            val = item[1]
            wavestruct.append(item[0])
            if val.find('z') > -1:
                wavestruct.append('z')
            elif val.find('x') > -1:
                wavestruct.append('x')
            else:
                wavestruct.append(val)
            data['signals'][i]['wave'].append(wavestruct)
        i += 1
    return data
Пример #2
0
def get_wave(filename):
    vcd_filename = __get_vcd_filename__('%s.vvp' % filename[0:-2])
    ftp_utils.download_file_to_tmp(vcd_filename)
    vcd = parse_vcd("./tmp/%s" % vcd_filename)
    units = get_timescale()
    i = 0
    time = 0
    endtime = get_endtime()
    data = {'file': vcd_filename, 'scale': units, 'endtime': endtime, 'signals': []}
    for key, value in vcd.iteritems():
        name = value['nets'][0]['hier'] + "." + value['nets'][0]['name']
        size = value['nets'][0]['size']
        data['signals'].append({'name': name, 'size': size, 'wave': []})
        time = 0

        for item in value['tv']:
            wavestruct = []
            val = item[1]
            wavestruct.append(item[0])
            if val.find('z') > -1:
                wavestruct.append('z')
            elif val.find('x') > -1:
                wavestruct.append('x')
            else:
                wavestruct.append(val)
            data['signals'][i]['wave'].append(wavestruct)
        i += 1
    return data
Пример #3
0
def __get_vcd_filename__(filename):
    ftp_utils.download_file_to_tmp(filename)
    verilog_file_data = open("./tmp/%s" % filename, 'r').read()
    try:
        vcd_file_name = verilog_file_data.split('"$dumpfile"')[1].split('"')[1]
    except IndexError:
        vcd_file_name = None
    return vcd_file_name
Пример #4
0
def check_for_errors(filename):
    ftp_utils.download_file_to_tmp(filename)
    p = subprocess.Popen(["verilator --lint-only ./tmp/%s" % filename],
                         stdout=subprocess.PIPE,
                         shell=True,
                         stderr=subprocess.STDOUT)
    data, err = p.communicate()
    return __format_errors__(data)
Пример #5
0
def __get_vcd_filename__(filename):
    ftp_utils.download_file_to_tmp(filename)
    verilog_file_data = open("./tmp/%s" % filename, 'r').read()
    try:
        vcd_file_name = verilog_file_data.split('"$dumpfile"')[1].split('"')[1]
    except IndexError:
        vcd_file_name = None
    return vcd_file_name
Пример #6
0
def check_for_errors(filename):
    ftp_utils.download_file_to_tmp(filename)
    p = subprocess.Popen(
        ["verilator --lint-only ./tmp/%s" % filename],
        stdout=subprocess.PIPE,
        shell=True,
        stderr=subprocess.STDOUT
    )
    data, err = p.communicate()
    return __format_errors__(data)
Пример #7
0
def __check_if_dumps_vcd_correctly__(filename):
    ftp_utils.download_file_to_tmp(filename)
    vcd_name = __get_vcd_filename__(filename)
    if vcd_name != None:
        if vcd_name.find("./tmp/") < 0:
            file_instance = open('./tmp/%s' % filename, 'r+')
            data = file_instance.read()
            data = data.replace('"$dumpfile", "', '"$dumpfile", "./tmp/', 1)
            file_instance.seek(0)
            file_instance.write(data)
            file_instance.close()
        ftp_utils.upload_file_from_tmp(filename)
Пример #8
0
def __check_if_dumps_vcd_correctly__(filename):
    ftp_utils.download_file_to_tmp(filename)
    vcd_name = __get_vcd_filename__(filename)
    if vcd_name != None:
        if vcd_name.find("./tmp/") < 0:
            file_instance = open('./tmp/%s' % filename, 'r+')
            data = file_instance.read()
            data = data.replace('"$dumpfile", "', '"$dumpfile", "./tmp/', 1)
            file_instance.seek(0)
            file_instance.write(data)
            file_instance.close()
        ftp_utils.upload_file_from_tmp(filename)
Пример #9
0
def get_output(filename):
    vvp_filename = '%s.vvp' % filename[0:-2]
    __check_if_dumps_vcd_correctly__(vvp_filename)
    ftp_utils.download_file_to_tmp(vvp_filename)
    c = 'vvp ./tmp/%s' % vvp_filename
    p = subprocess.Popen([c],
                         stdout=subprocess.PIPE,
                         shell=True,
                         stderr=subprocess.STDOUT)
    data, err = p.communicate()
    __upload_dump_files__(vvp_filename)
    return data.split('\n')
Пример #10
0
def get_output(filename):
    vvp_filename = '%s.vvp' % filename[0:-2]
    __check_if_dumps_vcd_correctly__(vvp_filename)
    ftp_utils.download_file_to_tmp(vvp_filename)
    c = 'vvp ./tmp/%s' % vvp_filename
    p = subprocess.Popen(
        [c],
        stdout=subprocess.PIPE,
        shell=True,
        stderr=subprocess.STDOUT
    )
    data, err = p.communicate()
    __upload_dump_files__(vvp_filename)
    return data.split('\n')
Пример #11
0
def compile_to_vvp(filename, filename_test):
    ftp_utils.download_file_to_tmp(filename)
    ftp_utils.download_file_to_tmp(filename_test)
    c = 'iverilog -o ./tmp/%s.vvp ./tmp/%s ./tmp/%s' % (
        filename[0:-2], filename, filename_test)
    p = subprocess.Popen([c],
                         stdout=subprocess.PIPE,
                         shell=True,
                         stderr=subprocess.STDOUT)

    data, err = p.communicate()
    if __format_error__(data) != []:
        return __format_error__(data)
    else:
        ftp_utils.upload_file_from_tmp('%s.vvp' % filename[0:-2])
Пример #12
0
def compile_to_vvp(filename, filename_test):
    ftp_utils.download_file_to_tmp(filename)
    ftp_utils.download_file_to_tmp(filename_test)
    c = 'iverilog -o ./tmp/%s.vvp ./tmp/%s ./tmp/%s' % (filename[0:-2], filename, filename_test)
    p = subprocess.Popen(
        [c],
        stdout=subprocess.PIPE,
        shell=True,
        stderr=subprocess.STDOUT
    )

    data, err = p.communicate()
    if __format_error__(data) != []:
        return __format_error__(data)
    else:
        ftp_utils.upload_file_from_tmp('%s.vvp' % filename[0:-2])
Пример #13
0
def generate_testbench(filename):
    ftp_utils.download_file_to_tmp(filename)
    module = open('./tmp/%s' % filename, 'r').read()
    out = ""
    modname = get_module_name(module)
    tbmodname = modname + "_tb"

    period = 3

    timescale = get_timescale(module)

    out += "// Automatically Generated Testbench for module " + modname + "\n"
    out += "// Generated on  \n"
    out += "`timescale " + timescale + "\n \n"
    out += "module " + tbmodname + "; \n \n"

    regs = get_regs(module)
    wires = get_wires(module)
    clk = "clk" if "clk" in wires else ""
    rst = "rst" if "rst" in wires else ""

    for i in regs:
        out += "reg " + i + "; \n"

    for i in wires:
        out += "wire " + i + "; \n"

    out += "\n"

    out += modname + " DUT ( "

    for i in regs:
        out += "." + i + "(" + i + ")"
        out += ", "

    for i in wires:
        out += "." + i + "(" + i + ")"
        if i != wires[-1]:
            out += ", "

    out += " ); \n \n"

    out += "initial begin \n"
    out += "$dumpfile (" + '"' + tbmodname + ".vcd" + '"' + "); \n"
    out += "$dumpvars (1, " + tbmodname + "); \n"
    out += "#1000 $finish; \n"
    out += "end\n \n"

    if clk != "":
        out += "// Clock Generator \n"
        out += "initial " + clk + " = 0; \n"
        out += "always #" + str(period/2.0) + " " + clk + " = ~" + clk + "; \n \n"
        out += "// Reset generator goes here, change to match your design  \n"

    out += "initial begin \n"
    if clk != "":
        out += rst + " = 0; \n"
        out += "@ (negedge clk); \n"
        out += rst + " = 1; \n"
    else:
        out += "// Write your test case here \n"
    out += "end\n \n"
    out += "endmodule\n"
    testbench_file = open('./tmp/%s_tb.v' % filename[0:-2], 'w')
    testbench_file.write(out)
    testbench_file.close()
    ftp_utils.upload_file_from_tmp('%s_tb.v' % filename[0:-2])
    return out