Esempio n. 1
0
    def on_remove(self):
        '''|
        | Command 'remove' removes an interface from the .json file and updates the HW module design files
        |________'''
        interface_name = self.arguments[0]

        gdf = MFDesign()
        gdf.initialize(self.full_name)

        found = self.check_name(gdf, interface_name)

        if not found:
            err("Name not found: " + interface_name)
            exit(0)

        # Remove Interface
        gdf.interfaces[:] = [
            value for value in gdf.interfaces
            if value["name"] != interface_name
        ]
        # Remove Parameter
        gdf.parameters[:] = [
            value for value in gdf.parameters
            if value["name"] != interface_name
        ]

        gdf.overwrite = True
        print_json_file(gdf)

        gdf.update(self.full_name)
Esempio n. 2
0
    def on_new(self):
        '''|
        | Command new creates a new module project from a .json file located in MPATH.
        | The json file must have the same name as the directory in which it is located.
        | If directory and/or .json file do not exist, this function creates the directory
        | and a default .json file (containing only Reset and Clock interfaces).
        |________'''
        self.check_path_and_create_json(self.full_name)

        gdf = MFDesign()
        gdf.initialize(self.full_name)
        gdf.generate(gdf.module_name + ' (top)')

        if gdf.modules != []:
            sub_modules = gdf.init_submodules()

            print_dotty_file(gdf)

            if sub_modules != []:
                sub_path = gdf.c_path + "/src/modules/"
                os.mkdir(sub_path)
                StrBuilder().write(sub_path + '__init__.py', overwrite=True)
                for m in sub_modules:
                    m.c_path = sub_path + m.module_name
                    m.generate(m.module_name + ' (sub-module)')
                    print_json_file(m)
Esempio n. 3
0
    def on_add(self):
        '''|
        | Command 'add' adds an interface to the .json file and updates the HW module design files
        |________'''
        interface_type = self.arguments[0]

        gdf = MFDesign()
        gdf.initialize(self.full_name)

        found = self.check_name(gdf, self.opt_Name)

        if found:
            err("Can not add - interface with the same name exists: " +
                self.opt_Name)
            exit(0)

        if interface_type == 'HSD':
            gdf.interfaces.append({
                'push': self.opt_Push,
                'direction': self.opt_Direction,
                'data': self.opt_Data,
                'type': interface_type,
                'name': self.opt_Name
            })

        elif interface_type == 'Bus':
            gdf.interfaces.append({
                'interfaces': self.opt_BusType,
                'type': interface_type,
                'name': self.opt_Name
            })

        elif interface_type == 'Parameter':
            gdf.parameters.append({
                'value': self.opt_ParValue,
                'name': self.opt_Name
            })

        elif interface_type == 'STAvln':
            gdf.interfaces.append({
                'direction': self.opt_Direction,
                'width': self.opt_Data,
                'type': interface_type,
                'name': self.opt_Name
            })

        else:  # this should not happen
            err("Unknown type: " + interface_type)
            exit(0)

        gdf.overwrite = True
        print_json_file(gdf)

        gdf.update(self.full_name)
Esempio n. 4
0
    def on_update(self):
        '''|
        | Command update re-generates the files, which are created with command new.
        | This command is useful when, e.g., HW module's interfaces or structure changes.
        | First, the corresponding .json file is modified capturing the changes.
        |________'''
        recursive = "recursive" in self.arguments

        if recursive == True:
            files = [
                os.path.join(root, file)
                for root, dirs, files in os.walk(self.module_path)
                for file in files if file.endswith('.json')
            ]
            for file_name in files:
                gdf = MFDesign()
                gdf.update(file_name)
        else:
            if os.path.exists(self.full_name):
                gdf = MFDesign()
                gdf.update(self.full_name)
            else:
                err("File not found: " + self.file_name)
                info("Did you mean: 'update recursive'?")