* generation scripts

This commit is contained in:
Vovanium 2021-10-28 19:51:16 +03:00
parent 06d0e80b83
commit 1b021f6927
2 changed files with 54 additions and 5 deletions

View file

@ -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")
}
{

View file

@ -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 &lt; $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 &lt; $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>&#10;</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>&#10;</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 =&gt; <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