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("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 mkBoundry(name, val): if isinstance(val, int): val = hInt(val) d = appendSpiElem(v, name) d.attrib["spirit:format"] = "long" if isinstance(val, RtlSignalBase): # value is simple type and does not contains generic etc... resolve = 'dependent' d.attrib["spirit:dependency"] = "(%s)" %\ VivadoTclExpressionSerializer.asHdl(val) d.text = VivadoTclExpressionSerializer.asHdl( val.staticEval()) else: resolve = "immediate" d.text = VivadoTclExpressionSerializer.asHdl(val, None) d.attrib["spirit:resolve"] = resolve mkBoundry("left", self.vector[0]) mkBoundry("right", self.vector[1]) td = appendSpiElem(w, "wireTypeDefs") td.append(self.type.asElem()) 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 asElem(self): e = mkSpiElm("model") appendSpiArray(e, 'views', self.views) appendSpiArray(e, 'ports', self.ports) appendSpiArray(e, 'modelParameters', self.modelParameters) return e
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): e = mkSpiElm("value") appendSpiAtribs(self, e, spi_ns_prefix, reqPropNames=['id', 'resolve'], optPropNames=['format', 'bitStringLength']) e.text = str(self.text) return e
def asElem(self): e = mkSpiElm("modelParameter") e.attrib["spirit:dataType"] = self.datatype appendStrElements(e, self, reqPropNames=['name', "displayName"]) e.append(self.value.asElem()) return e
def asElem(self): e = mkSpiElm("view") appendStrElements(e, self, reqPropNames=self._requiredVal, optPropNames=self._optionalVal) e.append(self.fileSetRef.asElem()) return e
def asElem(self, displayName, revision): r = mkSpiElm("vendorExtensions") r.append(self.coreExtensions.asElem(displayName, revision)) pi = appendXiElem(r, "packagingInfo") for key, val in self.packagingInfo.items(): appendXiElem(pi, key).text = val return r
def xml(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]) if arr_any(self.busInterfaces, lambda intf: 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()) 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, elmName): e = mkSpiElm(elmName) for s in ['name', 'version', 'vendor', 'library']: e.attrib[spi_ns_prefix + s] = getattr(self, s) return e
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 = mkSpiElm("file") appendStrElements(e, self, self._strValues) return e