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
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()