| <?xml version="1.0"?> |
| <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> |
| |
| <xsl:include href="identity.xsl" /> |
| <!-- template-function: Allow from attribute which gives you a relative to a given pb_type --> |
| <xsl:template name="from-pb_type"> |
| <xsl:choose> |
| <xsl:when test="@from='current'"><xsl:value-of select="ancestor::pb_type[1]/@name"/></xsl:when> |
| <xsl:when test="@from"><xsl:value-of select="@from"/></xsl:when> |
| <xsl:otherwise><xsl:value-of select="ancestor::pb_type[1]/@name"/></xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| <!-- template-function: Called to convert |
| * <port name=XXX> to XXX |
| * <port name=XXX bit=Y> to XXX[Y] |
| * <port name=XXX bit_msb=M bit_lsb=L> to XXX[M:L] |
| --> |
| <xsl:template name="port-value"><xsl:value-of select="@name"/><xsl:choose><xsl:when test="@bit">[<xsl:value-of select="@bit"/>]</xsl:when><xsl:when test="@bit-msb">[<xsl:value-of select="@bit-msb"/>:<xsl:value-of select="@bit-lsb"/>]</xsl:when><xsl:otherwise></xsl:otherwise></xsl:choose></xsl:template> |
| |
| <!-- Testing matcher for the port-value template function --> |
| <xsl:template match="port-value-test/port"> |
| <xsl:attribute name="o"> |
| <xsl:call-template name="port-value"/> |
| </xsl:attribute> |
| </xsl:template> |
| |
| <!-- |
| Convert |
| <interconnect><xxx><pack_pattern><port type='input' ...><port type='output' ...></pack_pattern></xxx><YYY../></interconnect> |
| to |
| <interconnect><xxx><pack_pattern in_port="XXXX" out_port="XXXX" /></xxx></interconnect> |
| --> |
| <xsl:template match="pack_pattern/port[@type='input']"> |
| <xsl:attribute name="in_port"><xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/></xsl:attribute> |
| </xsl:template> |
| <xsl:template match="pack_pattern/port[@type='output']"> |
| <xsl:attribute name="out_port"><xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/></xsl:attribute> |
| </xsl:template> |
| |
| <!-- |
| Convert |
| <interconnect><direct><port type='input' ...><port type='output' ...></direct><YYY../></interconnect> |
| to |
| <interconnect><direct input='...' name='xxx-xxx' output='...'><YYY../></direct></interconnect> |
| --> |
| <xsl:template match="interconnect/direct/port[@type='input']"> |
| <xsl:attribute name="input"><xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/></xsl:attribute> |
| </xsl:template> |
| <xsl:template match="interconnect/direct/port[@type='output']"> |
| <xsl:attribute name="name"><xsl:call-template name="from-pb_type"/>-<xsl:call-template name="port-value"/></xsl:attribute> |
| <xsl:attribute name="output"><xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/></xsl:attribute> |
| </xsl:template> |
| |
| <!-- |
| Convert |
| <interconnect><mux><port type='input' ...><port type='input' ...><port type='output' ...></mux><YYY../></interconnect> |
| to |
| <interconnect><mux input='in1 in2' name='xxx-xxx' output='...'><YYY../></mux></interconnect> |
| --> |
| <xsl:template match="interconnect/mux/port"></xsl:template> |
| <xsl:template match="interconnect/mux"> |
| <xsl:copy> |
| <xsl:attribute name="input"> |
| <xsl:for-each select="port[@type='input']"> |
| <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/> |
| <xsl:if test="position() != last()"><xsl:text> </xsl:text></xsl:if> |
| </xsl:for-each> |
| </xsl:attribute> |
| <xsl:attribute name="output"> |
| <xsl:for-each select="port[@type='output']"> |
| <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/> |
| </xsl:for-each> |
| </xsl:attribute> |
| <xsl:for-each select="@*"><xsl:copy /></xsl:for-each> |
| <xsl:if test="metadata"> |
| <metadata><xsl:text>
</xsl:text> |
| <!-- The fasm_mux metadata attribute needs special handling. --> |
| <xsl:if test="*/metadata/meta[@name='fasm_mux']"> |
| <meta name="fasm_mux"><xsl:text>
</xsl:text> |
| <xsl:for-each select="port[@type='input']"> |
| <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/><xsl:text> : </xsl:text><xsl:value-of select="metadata/meta[@name='fasm_mux']" /><xsl:text>
</xsl:text> |
| </xsl:for-each> |
| </meta> |
| </xsl:if> |
| <xsl:for-each select="metadata"> |
| <xsl:apply-templates/> |
| </xsl:for-each> |
| </metadata><xsl:text>
</xsl:text> |
| </xsl:if> |
| <xsl:apply-templates/> |
| </xsl:copy> |
| </xsl:template> |
| <xsl:template match="interconnect/mux/metadata"></xsl:template> |
| |
| <!-- |
| Convert |
| <loc ...><port ...><port ...></loc> |
| to |
| <loc ...>BLOCK.PORT BLOCK.PORT</loc> |
| --> |
| <xsl:template match="pinlocations/loc/port"> |
| <xsl:text>
</xsl:text> |
| <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/> |
| </xsl:template> |
| <xsl:template match="pinlocations/loc/port[last()]"> |
| <xsl:text>
</xsl:text> |
| <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/> |
| <xsl:text>
</xsl:text> |
| </xsl:template> |
| |
| </xsl:stylesheet> |