Example #1
0
    def load_project(self, pathname):
        """ Load the  project
        """
        self.open_xml(pathname)
        components = self.get_node("components")
        # load components
        if (components):
            for node in components.get_nodes("component"):
                if node.get_attr_value("platform") is None:
                    comp = Component(self)
                else:
                    comp = Platform(self, node=self.get_node("platform"))
                try:
                    comp.load(node.get_attr_value("name"))
                except IOError:
                    self.del_subnode("components", "component", "name",
                                     node.get_attr_value("name"))
                    raise PodError(
                        "Can't open " + node.get_attr_value("name") +
                        " directory", 0)
                else:
                    self._instanceslist.append(comp)

        # load toolchains
        toolchains = self.get_node("toolchain")
        if (toolchains):
            node = toolchains.get_node("simulation")
            if node is not None:
                self.simulation = Simulation(self, node.name)
            node = toolchains.get_node("synthesis")
            if node is not None:
                self.synthesis = synthesis_factory(self, node.name)

        # Set bus master-slave
        for masterinterface in self.interfaces_master:
            for slave in masterinterface.slaves:
                slaveinterface = slave.get_interface()
                masterinterface.alloc_mem.add_slave_interface(slaveinterface)
                slaveinterface.master = masterinterface

        # set bsp directory
        if self.get_node(nodename="bsp") is not None:
            self.bspdir = self.get_node(
                nodename="bsp").get_attr_value("directory")
        self.void = 0
Example #2
0
    def add_instance(self, **keys):
        """ Add a component in project

        add_instance(self, component)
        add_instance(self, libraryname, componentname)
        add_instance(self, libraryname, componentname, instancename)
        add_instance(self, libraryname, componentname, componentversion)
        add_instance(self, libraryname, componentname,
                            componentversion, instancename)
        """
        if "component" in keys:
            comp = keys["component"]
            instancename = comp.instancename
        elif ("componentname" in keys) and ("libraryname" in keys):
            componentname = keys["componentname"]
            libraryname = keys["libraryname"]
            if "instancename" in keys:
                instancename = keys["instancename"]
                # check if instancename is not <componentname><number><number>
                if re.match(r'^' + componentname + r'\d{2}$', instancename):
                    raise PodError(
                        "Instance name forbiden, " + "it's reserved for " +
                        "automatic instance name generation :" + instancename,
                        0)
                # check instance availability
                for instance in self.instances:
                    if instance.name == instancename:
                        raise PodError("This instance name already exists", 0)
            else:
                instancename =\
                    componentname +\
                    "%02d" %\
                    len(self.get_instances_list_of_component(componentname))
            if "componentversion" in keys:
                componentversion = keys["componentversion"]
            else:
                componentversion = None
            # Load and create component
            if (componentname == instancename):
                raise PodError(
                    "Instance name can't be the" + "same as component name", 0)
            comp = Component(self)
            comp.load_new_instance(libraryname, componentname,
                                   componentversion, instancename)
            comp.num = str(
                len(self.get_instances_list_of_component(componentname)))
        else:
            raise PodError("Key not known in add_instance", 0)

        # Add component to project
        self._instanceslist.append(comp)
        if comp.is_platform() is False:
            self.add_subnode(nodename="components",
                             subnodename="component",
                             attributename="name",
                             value=instancename)
        else:
            attrib = {"name": instancename, "platform": "true"}
            self.add_subnode(nodename="components",
                             subnodename="component",
                             attributedict=attrib)
        DISPLAY.msg("Component " + comp.name + " added as " + instancename)
        self.save()