* generation scripts
This commit is contained in:
parent
06d0e80b83
commit
1b021f6927
2 changed files with 54 additions and 5 deletions
|
@ -29,10 +29,11 @@ function replace (s, A, n, r) {
|
|||
}
|
||||
|
||||
/Integer range 0 / {
|
||||
gsub("Integer range 0 .. 2\\*\\*1 - 1", "Boolean")
|
||||
gsub("range 0 .. 2\\*\\*1 - 1", "range 0 .. 1")
|
||||
gsub("range 0 .. 2\\*\\*2 - 1", "range 0 .. 3")
|
||||
gsub("range 0 .. 2\\*\\*3 - 1", "range 0 .. 7")
|
||||
gsub("range 0 .. 2\\*\\*4 - 1", "range 0 .. 15")
|
||||
gsub("Integer range 0 .. 2\\*\\*32 - 1", "Unsigned_32")
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -1,29 +1,77 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="text" omit-xml-declaration="yes"/>
|
||||
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
|
||||
|
||||
<xsl:include href="./common.xsl"/>
|
||||
<xsl:template name="unused">
|
||||
<xsl:param name="predOffset" select="0"/>
|
||||
<xsl:param name="predWidth" select="0"/>
|
||||
<xsl:param name="curOffset" select="0" />
|
||||
<xsl:variable name="uoffset" select="$predOffset + $predWidth"/>
|
||||
<xsl:variable name="uend" select="$curOffset - 1"/>
|
||||
<xsl:if test="$uoffset < $curOffset">
|
||||
<xsl:text> </xsl:text>Unused_<xsl:value-of select="$uoffset"/> : Integer range 0 .. 2**<xsl:value-of select="$curOffset - $uoffset"/> - 1;
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="unused-for">
|
||||
<xsl:param name="predOffset" select="0"/>
|
||||
<xsl:param name="predWidth" select="0"/>
|
||||
<xsl:param name="curOffset" select="0" />
|
||||
<xsl:variable name="uoffset" select="$predOffset + $predWidth"/>
|
||||
<xsl:variable name="uend" select="$curOffset - 1"/>
|
||||
<xsl:if test="$uoffset < $curOffset">
|
||||
<xsl:text> </xsl:text>Unused_<xsl:value-of select="$uoffset"/> at 0 range <xsl:value-of select="$uoffset"/> .. <xsl:value-of select="$uend"/>;
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="peripheral">
|
||||
<xsl:for-each select="registers/register">
|
||||
-- <xsl:value-of select="name"/>
|
||||
<xsl:text> </xsl:text>
|
||||
type <xsl:value-of select="name"/>_Register is record
|
||||
<xsl:for-each select="fields/field">
|
||||
<xsl:sort data-type="number" select="bitOffset"/>
|
||||
<xsl:text> </xsl:text><xsl:value-of select="name"/> : Integer range 0 .. 2**<xsl:call-template name="cvalue">
|
||||
<xsl:with-param name="string"><xsl:value-of select="bitWidth"/></xsl:with-param>
|
||||
</xsl:call-template> - 1;
|
||||
<xsl:call-template name="unused">
|
||||
<xsl:with-param name="predOffset">0<xsl:value-of select="preceding-sibling::field[1]/bitOffset"/></xsl:with-param>
|
||||
<xsl:with-param name="predWidth">0<xsl:value-of select="preceding-sibling::field[1]/bitWidth"/></xsl:with-param>
|
||||
<xsl:with-param name="curOffset"><xsl:value-of select="bitOffset"/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:text> </xsl:text><xsl:value-of select="name"/> : <xsl:choose>
|
||||
<xsl:when test="bitWidth = 1">Boolean</xsl:when>
|
||||
<xsl:otherwise>Integer range 0 .. 2**<xsl:call-template name="cvalue">
|
||||
<xsl:with-param name="string"><xsl:value-of select="bitWidth"/></xsl:with-param>
|
||||
</xsl:call-template> - 1</xsl:otherwise>
|
||||
</xsl:choose>; -- <xsl:value-of select="substring (description, 1, 30)"/><xsl:text> </xsl:text>
|
||||
</xsl:for-each>
|
||||
<xsl:call-template name="unused">
|
||||
<xsl:with-param name="predOffset">0<xsl:value-of select="fields/field[last()]/bitOffset"/></xsl:with-param>
|
||||
<xsl:with-param name="predWidth">0<xsl:value-of select="fields/field[last()]/bitWidth"/></xsl:with-param>
|
||||
<xsl:with-param name="curOffset"><xsl:call-template name="cvalue">
|
||||
<xsl:with-param name="string"><xsl:value-of select="size"/></xsl:with-param></xsl:call-template></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
end record with Size => <xsl:call-template name="cvalue">
|
||||
<xsl:with-param name="string"><xsl:value-of select="size"/></xsl:with-param>
|
||||
</xsl:call-template>;
|
||||
for <xsl:value-of select="name"/>_Register use record
|
||||
<xsl:for-each select="fields/field">
|
||||
<xsl:sort data-type="number" select="bitOffset"/>
|
||||
<xsl:call-template name="unused-for">
|
||||
<xsl:with-param name="predOffset">0<xsl:value-of select="preceding-sibling::field[1]/bitOffset"/></xsl:with-param>
|
||||
<xsl:with-param name="predWidth">0<xsl:value-of select="preceding-sibling::field[1]/bitWidth"/></xsl:with-param>
|
||||
<xsl:with-param name="curOffset"><xsl:value-of select="bitOffset"/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:text> </xsl:text><xsl:value-of select="name"/> at 0 range <xsl:call-template name="bit-range">
|
||||
<xsl:with-param name="start"><xsl:value-of select="bitOffset"/></xsl:with-param>
|
||||
<xsl:with-param name="width"><xsl:value-of select="bitWidth"/></xsl:with-param>
|
||||
</xsl:call-template>;
|
||||
</xsl:for-each>
|
||||
<xsl:call-template name="unused-for">
|
||||
<xsl:with-param name="predOffset">0<xsl:value-of select="fields/field[last()]/bitOffset"/></xsl:with-param>
|
||||
<xsl:with-param name="predWidth">0<xsl:value-of select="fields/field[last()]/bitWidth"/></xsl:with-param>
|
||||
<xsl:with-param name="curOffset"><xsl:call-template name="cvalue">
|
||||
<xsl:with-param name="string"><xsl:value-of select="size"/></xsl:with-param></xsl:call-template></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
end record;
|
||||
</xsl:for-each>
|
||||
type <xsl:value-of select="name"/>_Registers is record
|
||||
|
|
Loading…
Reference in a new issue