Esempio n. 1
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 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
Esempio n. 2
0
 def mkPortMap(logicalName, physicalName):
     pm = mkSpiElm("portMap")
     appendSpiElem(appendSpiElem(pm, "logicalPort"),
                   "name").text = logicalName
     appendSpiElem(appendSpiElem(pm, "physicalPort"),
                   "name").text = physicalName
     return pm
Esempio n. 3
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
Esempio n. 4
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
Esempio n. 5
0
            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
Esempio n. 6
0
    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())
Esempio n. 7
0
    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
Esempio n. 8
0
 def asElem(self):
     e = mkSpiElm("fileSet")
     appendSpiElem(e, "name").text = self.name
     for f in self.files:
         e.append(f.asElem())
     return e
Esempio n. 9
0
 def asElem(self):
     e = mkSpiElm("parameter")
     appendSpiElem(e, "name").text = self.name
     e.append(self.value.asElem())
     return e
Esempio n. 10
0
 def asElem(self):
     e = etree.Element(spi_ns_prefix + "fileSetRef")
     appendSpiElem(e, "localName").text = self.localName
     return e
Esempio n. 11
0
 def _xmlParameters(self, compElem):
     parameters = appendSpiElem(compElem, "parameters")
     for p in self.parameters:
         parameters.append(p.asElem())