def asElem(self): e = mkSpiElm("port") appendSpiElem(e, "name").text = self.name w = appendSpiElem(e, "wire") appendSpiElem(w, "direction").text = self.direction if self.vector: v = appendSpiElem(w, "vector") def mkBoundary(name, val): d = appendSpiElem(v, name) d.attrib["spirit:format"] = "long" tclVal, tclValOfVal, valConst = self._packager.serialzeValueToTCL( val) if valConst: resolve = "immediate" d.text = tclVal else: # value is simple type and does not contains generic etc... resolve = 'dependent' d.attrib["spirit:dependency"] = "(%s)" % tclVal d.text = tclValOfVal d.attrib["spirit:resolve"] = resolve mkBoundary("left", self.vector[0]) mkBoundary("right", self.vector[1]) td = appendSpiElem(w, "wireTypeDefs") td.append(self.type.asElem()) return e
def mkPortMap(logicalName, physicalName): pm = mkSpiElm("portMap") appendSpiElem(appendSpiElem(pm, "logicalPort"), "name").text = logicalName appendSpiElem(appendSpiElem(pm, "physicalPort"), "name").text = physicalName return pm
def asElem(self): e = mkSpiElm("wireTypeDef") for s in self._requiredVal: appendSpiElem(e, s).text = getattr(self, s) for r in self.viewNameRefs: appendSpiElem(e, "viewNameRef").text = r return e
def asElem(self): def mkPortMap(logicalName, physicalName): pm = mkSpiElm("portMap") appendSpiElem(appendSpiElem(pm, "logicalPort"), "name").text = logicalName appendSpiElem(appendSpiElem(pm, "physicalPort"), "name").text = physicalName return pm e = mkSpiElm("busInterface") appendSpiElem(e, 'name').text = self.name e.append(self.busType.asElem('busType')) e.append(self.abstractionType.asElem('abstractionType')) if self.isMaster: appendSpiElem(e, "master") else: appendSpiElem(e, "slave") pm = appendSpiElem(e, "portMaps") for lName, pName in sorted(self._portMaps.items(), key=lambda pm: pm[0]): pm.append(mkPortMap(lName, pName)) if self.endianness is not None: appendSpiElem(e, "endianness").text = self.endianness if len(self.parameters) > 0: pm = appendSpiElem(e, "parameters") for p in self.parameters: pElm = p.asElem() pm.append(pElm) return e
def mkBoundary(name, val): d = appendSpiElem(v, name) d.attrib["spirit:format"] = "long" tclVal, tclValOfVal, valConst = self._packager.serialzeValueToTCL( val) if valConst: resolve = "immediate" d.text = tclVal else: # value is simple type and does not contains generic etc... resolve = 'dependent' d.attrib["spirit:dependency"] = "(%s)" % tclVal d.text = tclValOfVal d.attrib["spirit:resolve"] = resolve
def _xmlFileSets(self, componentElem): def fileSetFromFiles(name, files): fileSet = FileSet() fileSet.name = name for fn in files: f = File.fromFileName(fn) fileSet.files.append(f) return fileSet filesets = appendSpiElem(componentElem, "fileSets") hdlExtensions = [".vhd", '.v', '.sv', '.svh', '.xdc'] hdl_fs = fileSetFromFiles( any_syn_fileSetName, whereEndsWithExts(self._files, hdlExtensions)) hdl_sim_fs = fileSetFromFiles( any_sim_fileSetName, whereEndsWithExts(self._files, hdlExtensions)) tclFileSet = fileSetFromFiles(tcl_fileSetName, whereEndsWithExt(self._files, ".tcl")) for fs in [hdl_fs, hdl_sim_fs, tclFileSet]: filesets.append(fs.asElem())
def ip_xact(self): # Vivado 2015.2 bug - order of all elements is NOT optional for prefix, uri in ns.items(): etree.register_namespace(prefix, uri) c = mkSpiElm("component") appendStrElements(c, self, self._strValues[:-1]) for intf in self.busInterfaces: if hasattr(intf, "_bi"): bi = appendSpiElem(c, "busInterfaces") for intf in self.busInterfaces: # for all interfaces which have bus interface class if hasattr(intf, "_bi"): bi.append(intf._bi.asElem()) break c.append(self.model.asElem()) self._xmlFileSets(c) appendStrElements(c, self, [self._strValues[-1]]) self._xmlParameters(c) c.append( self.vendorExtensions.asElem(self.name + "_v" + self.version, revision=str(int(time())))) return c
def asElem(self): e = mkSpiElm("fileSet") appendSpiElem(e, "name").text = self.name for f in self.files: e.append(f.asElem()) return e
def asElem(self): e = mkSpiElm("parameter") appendSpiElem(e, "name").text = self.name e.append(self.value.asElem()) return e
def asElem(self): e = etree.Element(spi_ns_prefix + "fileSetRef") appendSpiElem(e, "localName").text = self.localName return e
def _xmlParameters(self, compElem): parameters = appendSpiElem(compElem, "parameters") for p in self.parameters: parameters.append(p.asElem())