def copy_tb_files(self, sim_path):
     if self.tb_file:
         _tb_file = yTools.to_abs_list(self.tb_file, self.src_design)
     else:
         raw_tb_file = yTools.get_content_in_start_end(
             self.do_template, re.compile("tb_start"), re.compile("tb_end"))
         if not raw_tb_file:
             yTools.say_it("Error. Not found raw tb files in %s" %
                           self.do_template)
             return 1
         _tb_file = list()
         for item in raw_tb_file:
             item_list = re.split("\s+", item)
             pre_com = item_list[0].lower()
             if pre_com in ("vlog", "vcom"):
                 _tb_file.append(item_list[-1])
         if not _tb_file:
             yTools.say_it("-Error. Not found tb files in %s" %
                           self.do_template)
             return 1
         _tb_file = yTools.to_abs_list(_tb_file,
                                       os.path.dirname(self.do_template))
     self.final_tb_files = list()
     for item in _tb_file:
         base_item = os.path.basename(item)
         yTools.wrap_cp_file(item, os.path.join(sim_path, base_item))
         self.final_tb_files.append(base_item)
    def create_lct_file(self):
        lct_file = self.kwargs.get("lct_file")
        lct_template = os.path.join(self.conf, "classic", "lct.template")
        if yTools.not_exists(lct_template, "LCT Template File"):
            return 1
        dst_lct_file = self.design + ".lct"
        if self.devkit:
            yTools.generate_file(dst_lct_file, lct_template, self.kwargs)
        else:
            src_lct_file = yTools.get_relative_path(lct_file, self.src_design)
            if not os.path.isfile(src_lct_file):
                src_lci_file = os.path.splitext(src_lct_file)[0] + ".lci"
                if os.path.isfile(src_lci_file):
                    src_lct_file = src_lci_file
                else:
                    for foo in os.listdir(self.src_design):
                        fext = os.path.splitext(foo.lower())[1]
                        if fext in (".lci", ".lct"):
                            src_lct_file = os.path.join(self.src_design, foo)
                            break
                    else:
                        yTools.say_it("Error. not found any lct file")
                        return 1

            if yTools.wrap_cp_file(src_lct_file, dst_lct_file):
                return 1
            update_lct_file_if_necessary(dst_lct_file, self.goal)
        if yTools.wrap_cp_file(dst_lct_file, self.design + ".lci"):
            return 1
    def start_from_syn(self, syn_file):
        my_parser = xClassic.ProjectKwargs(syn_file, self.devkit)
        my_parser.process()
        self.kwargs = my_parser.get_prj_kwargs()

        self.kwargs["lct_file"] = yTools.get_fname(syn_file) + ".lct"
        yTools.say_it(self.kwargs, "original kwargs from syn file:",
                      self.debug)
 def start_from_qas(self, qas_file):
     if not self.devkit:
         yTools.say_it("Message: use default devkit: %s" %
                       self.default_devkit)
         self.devkit = self.default_devkit
     self.kwargs["devkit"] = self.devkit
     self.kwargs.update(xClassic.qas_kwargs(qas_file))
     yTools.say_it(self.kwargs, "original kwargs from qas info file:",
                   self.debug)
    def update_kwargs(self):
        self.kwargs["date"] = time.strftime('%X')
        self.kwargs["time"] = time.strftime('%x')
        self.kwargs["synthesis_tool"] = self.synthesis
        if self.goal == "Area":
            self.kwargs["frequency"] = "1"
            self.kwargs["global"] = "Nodes_collapsing_mode = Area;"
        else:
            self.kwargs["frequency"] = "200"
            self.kwargs["global"] = ""

        if self.check_module():
            return 1
        if self.check_devkit():
            return 1
        yTools.say_it(self.kwargs, "kwargs for classic command", self.debug)
 def add_vlog_vcom_lines(self, src_files):
     self.use_vhd = 0
     v_v_lines = list()
     for item in src_files:
         fext = yTools.get_fext_lower(item)
         item = yTools.win2unix(item, 0)
         if fext in (".v", ".vo", ".sv"):
             v_v_lines.append("vlog %s" % item)
         elif fext in (".vho", ".vhd", ".vhdl"):
             v_v_lines.append("vcom %s" % item)
             if not self.use_vhd:
                 self.use_vhd = 1
         elif fext == ".lpf":
             continue
         else:
             yTools.say_it("-Warning. Unknown file: %s" % item)
             continue
     return v_v_lines
 def get_original_kwargs(self):
     self.has_syn_file = ""
     qas_file = os.path.join(self.src_design, "_qas.info")
     syn_files = yTools.find_by_fext(self.src_design, ".syn")
     if not syn_files:
         fit_dir = os.path.join(self.src_design, "fit")
         if os.path.isdir(fit_dir):
             syn_files = yTools.find_by_fext(fit_dir, ".syn")
     len_syn = len(syn_files)
     if os.path.isfile(qas_file):
         return self.start_from_qas(qas_file)
     elif len_syn == 1:
         self.has_syn_file = syn_files[0]
         return self.start_from_syn(syn_files[0])
     else:
         yTools.say_it("Error. Found %d Classic Project file in %s" %
                       (len_syn, self.src_design))
         return 1
 def run_check_only(self):
     import glob
     conf_file = glob.glob("*.conf")
     if not conf_file:
         return
     self.qas = ""
     report_path = self.run_options.get("cwd")
     report = "check_flow.csv"
     _job_dir, _design = os.path.split(os.path.dirname(self.job_design))
     ta_check = check.TA(_job_dir,
                         _design,
                         report_path,
                         report,
                         self.qas,
                         self.tag,
                         rerun_path=report_path,
                         conf_file=self.run_options.get("check_conf"))
     sts, text = ta_check.process()
     yTools.say_it(text)
     return sts
    def check_module(self):
        module = self.kwargs.get("module")
        if not module:
            yTools.say_it("Error. No source file specified")
            return 1
        final_module = list()
        _base_dir = self.src_design
        if self.has_syn_file:
            _base_dir = os.path.dirname(self.has_syn_file)
        for item in module:
            new_item = yTools.get_relative_path(item, _base_dir)
            fext = yTools.get_fext_lower(item)
            if fext == ".lpf":
                continue
            if re.search("_tb\.", item):
                self.kwargs["stimulus"] = [new_item]
                continue
            final_module.append(new_item)
        self.kwargs["module"] = final_module

        final_fext = [yTools.get_fext_lower(item) for item in final_module]
        set_final_fext = set(final_fext)
        final_fext_list = list(set_final_fext)
        # Design Entry Type=ABEL/Schematic, Schematic/VHDL, Schematic/Verilog HDL, EDIF, Pure Verilog HDL, Pure VHDL
        if ".abl" in final_fext_list:
            entry_type = "ABEL/Schematic"
        elif ".sch" in final_fext_list:
            if ".vhd" in final_fext_list:
                entry_type = "Schematic/VHDL"
            elif ".v" in final_fext_list:
                entry_type = "Schematic/Verilog HDL"
            else:
                entry_type = "ABEL/Schematic"
        elif ".vhd" in final_fext_list:
            entry_type = "Pure VHDL"
        elif ".v" in final_fext_list:
            entry_type = "Pure Verilog HDL"
        else:
            entry_type = "EDIF"
        self.kwargs["source_format"] = self.entry_type = entry_type
        self.kwargs["sds_source_format"] = re.sub("\s+", "_", entry_type)
    def launch_pre_command_flow(self):
        pre_kwargs = dict(install_dir=self.kwargs.get("install_dir"),
                          cpld_bin=self.kwargs.get("cpld_bin"),
                          design=self.kwargs.get("design"),
                          topmodule=self.kwargs.get("topmodule"))
        pre_cmd_dict = self.cmd_dict.get("pre_command")
        pre_log, pre_time = "pre_command.log", "pre_command.time"
        if not pre_cmd_dict:
            yTools.say_it(
                "Error. Not any [pre_command] section in the command initial file"
            )
            return 1
        # ------------------
        template_dict = dict()
        template_dict[".v"] = "vlog2jhd"
        template_dict[".vhd"] = "vhd2jhd"
        template_dict[".sch"] = "sch2jhd"
        template_dict[".ed*"] = "edif2blf"
        template_dict[".abl"] = "ahdl2blf"

        for src in self.kwargs.get("module"):
            if yTools.not_exists(src, "source file"):
                return 1

            fext = yTools.get_fext_lower(src)
            fname = yTools.get_fname(src)
            pre_kwargs["src"] = src
            pre_kwargs["fname"] = fname
            if fext.startswith(".ed"):
                fext == ".ed*"
            cmd_template = pre_cmd_dict.get(template_dict.get(fext, ""))
            if not cmd_template:
                continue
            sts, cmd = yTools.get_cmd(cmd_template, pre_kwargs)
            if sts:
                return 1
            if yTools.run_command(cmd, pre_log, pre_time):
                return 1
    def check_devkit(self):
        """
        devkit comes from old ispLEVER project file
        but the same devkit should be PartNumber in the lct file, otherwise the
        """
        _devkit = self.kwargs.get("devkit")
        if not _devkit:
            yTools.say_it("Error. Not found devkit for Classic case")
            return 1
        section_ds = self.sds_dict.get("Device Support")
        section_gd = self.sds_dict.get("Generic Devices")
        #section_ot = self.sds_dict.get("Operating Temperature")
        section_dev_sts = self.sds_dict.get("Device Status")
        # LC4032B-10T44I=m4s_32_30,LC4032B,-10,44TQFP,IND,LSI4K-H32/30,lc4k32b,lc4k,P
        # Format=DevFile,Device,Speed,Package,Condition,Info,VCIfile,DevKit,Status
        devkit_lower = _devkit.lower()
        devkit_lower = re.sub("ces$", "c", devkit_lower)
        value = section_gd.get(devkit_lower)
        value_title = section_ds.get("format")
        self.kwargs["pkgname"] = section_ds.get("pkgname")
        self.kwargs["devtargetlse"] = section_ds.get("devtargetlse")
        self.kwargs["diename"] = section_ds.get("diename")
        self.section_ds = section_ds
        value_title = value_title.lower()  # LOWER
        if not value:
            yTools.say_it("Error. Unknown Classic device: %s" % _devkit)
            return 1

        value_list = re.split("\s*,\s*", value.strip())
        title_list = re.split("\s*,\s*", value_title.strip())
        prefix = "sds_"
        for i, item in enumerate(title_list):
            key = prefix + item
            value_item = value_list[i]
            if item == "status":
                self.kwargs[key] = section_dev_sts.get(value_item.lower())
            else:
                self.kwargs[key] = value_item
Beispiel #12
0
def get_file_list(section_case, src_design):
    # say_it(section_case, "Section Case:")
    _file_list = section_case.get("file list")
    _file_list = re.split(",", _file_list)
    _file_list = [item.strip() for item in _file_list]

    file_list = list()
    tb_file = ""
    uut_name = ""
    p_tb = re.compile("(\w+)_tb$", re.I)

    for item in _file_list:
        fname = yTools.get_fname(item)
        fext = yTools.get_fext_lower(item)
        item = yTools.win2unix(item, 0)
        m_tb = p_tb.search(fname)
        if m_tb:
            tb_file = item
            continue
        if fext in (".v", ".vhd", ".sv"):
            file_list.append(item)
        else:
            yTools.say_it("Warning. %s found in _qas.info" % item)

    if tb_file:
        new_tb_file = yTools.get_relative_path(tb_file, src_design)
        if not os.path.isfile(new_tb_file):
            yTools.say_it("-Error. Not found testbench file: %s" % tb_file)
        else:
            base_module_name = section_case.get("topmodule")
            p_uut_name_verilog = re.compile("%s\s+(\w+)" % base_module_name)
            # add_16_SIGNED post(
            p_uut_name_vhdl = re.compile("(\S+)\s*:\s*%s" % base_module_name)
            # uut: mac_ecp4_m5678_09x09_ir_or_dc_mclk_up PORT MAP(
            fext = yTools.get_fext_lower(new_tb_file)
            if fext == ".v":
                matched_uut_name = yTools.simple_parser(new_tb_file, [p_uut_name_verilog,])
            else:
                matched_uut_name = yTools.simple_parser(new_tb_file, [p_uut_name_vhdl,])
            if not matched_uut_name:
                yTools.say_it("-Warning. can not find uut name in %s" % tb_file)
            else:
                uut_name = matched_uut_name[1].group(1)
    return tb_file, file_list, uut_name