Пример #1
0
 def mkPortMap(logicalName, physicalName):
     pm = mkSpiElm("portMap")
     appendSpiElem(appendSpiElem(pm, "logicalPort"),
                   "name").text = logicalName
     appendSpiElem(appendSpiElem(pm, "physicalPort"),
                   "name").text = physicalName
     return pm
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    def asElem(self):
        e = mkSpiElm("model")
        appendSpiArray(e, 'views', self.views)
        appendSpiArray(e, 'ports', self.ports)
        appendSpiArray(e, 'modelParameters', self.modelParameters)

        return e
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 def asElem(self):
     e = mkSpiElm("view")
     appendStrElements(e, self,
                       reqPropNames=self._requiredVal,
                       optPropNames=self._optionalVal)
     e.append(self.fileSetRef.asElem())
     return e
Пример #9
0
    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
Пример #10
0
    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
Пример #11
0
 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
Пример #12
0
 def asElem(self):
     e = mkSpiElm("fileSet")
     appendSpiElem(e, "name").text = self.name
     for f in self.files:
         e.append(f.asElem())
     return e
Пример #13
0
 def asElem(self):
     e = mkSpiElm("parameter")
     appendSpiElem(e, "name").text = self.name
     e.append(self.value.asElem())
     return e
Пример #14
0
 def asElem(self):
     e = mkSpiElm("file")
     appendStrElements(e, self, self._strValues)
     return e