xml: Preserve existing interconnect info. Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/convert_and_merge_composable_fpga_architecture.xsl b/convert_and_merge_composable_fpga_architecture.xsl index 884a52b..ad1332f 100644 --- a/convert_and_merge_composable_fpga_architecture.xsl +++ b/convert_and_merge_composable_fpga_architecture.xsl
@@ -65,11 +65,17 @@ <pack_pattern name="yyy-xxx" --> <xsl:template match="pack_pattern/@type"/> - <xsl:template match="pack_pattern/@name"> + <xsl:template match="pack_pattern[@type]/@name"> <xsl:attribute name="name"> <xsl:value-of select="../@type"/>-<xsl:value-of select="../@name"/> </xsl:attribute> </xsl:template> + <xsl:template match="pack_pattern[not(@type)]/@name"> + <xsl:copy /> + </xsl:template> + <xsl:template match="pack_pattern/*"> + <xsl:copy /> + </xsl:template> <!-- Prefix in_port / out_port values with the parent name. --> <xsl:template match="@out_port"> @@ -95,14 +101,14 @@ <!-- Convert - <interconnect><direct><pack_pattern><port type='input' ...><port type='output' ...></pack_pattern></direct><YYY../></interconnect> + <interconnect><xxx><pack_pattern><port type='input' ...><port type='output' ...></pack_pattern></xxx><YYY../></interconnect> to - <interconnect><direct><pack_pattern in_port="XXXX" out_port="XXXX" /></direct></interconnect> + <interconnect><xxx><pack_pattern in_port="XXXX" out_port="XXXX" /></xxx></interconnect> --> - <xsl:template match="interconnect/direct/pack_pattern/port[@type='input']"> + <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="interconnect/direct/pack_pattern/port[@type='output']"> + <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> @@ -112,25 +118,22 @@ 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="name"> - <xsl:value-of select="@name" /> - </xsl:attribute> <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: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:value-of select="@input" /> </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:if test="position() != last()"><xsl:text> </xsl:text></xsl:if> + <xsl:call-template name="from-pb_type"/>.<xsl:call-template name="port-value"/> </xsl:for-each> - <xsl:value-of select="@output" /> </xsl:attribute> + <xsl:for-each select="@*"><xsl:copy /></xsl:for-each> + <xsl:apply-templates/> <xsl:if test="*/metadata"> <metadata> <!-- The fasm_mux metadata attribute needs special handling. --> @@ -138,8 +141,8 @@ <meta name="fasm_mux"> <xsl:for-each select="port[@type='input']"><xsl:text> </xsl:text><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:for-each><xsl:text> - </xsl:text> + </xsl:for-each><xsl:text> + </xsl:text> </meta> </xsl:if> <xsl:for-each select="metadata"> @@ -149,6 +152,7 @@ </xsl:if> </xsl:copy> </xsl:template> + <xsl:template match="interconnect/mux/metadata"></xsl:template> <!-- Convert
diff --git a/convert_and_merge_composable_tests/CMakeLists.txt b/convert_and_merge_composable_tests/CMakeLists.txt index 0ef0e5b..7a6f5de 100644 --- a/convert_and_merge_composable_tests/CMakeLists.txt +++ b/convert_and_merge_composable_tests/CMakeLists.txt
@@ -4,6 +4,7 @@ xsl_golden_test(NAME "composable-interconnect-fasm-mux") xsl_golden_test(NAME "composable-interconnect-fasm-mux-levels") xsl_golden_test(NAME "composable-interconnect-implicit-parent") +xsl_golden_test(NAME "composable-interconnect-pack_patterns") xsl_golden_test(NAME "composable-loc-implicit-parent") xsl_golden_test(NAME "explicit-port") xsl_golden_test(NAME "pack_pattern-merge-type-into-name")
diff --git a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml index ca6f259..c103723 100644 --- a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml +++ b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux-levels.golden.xml
@@ -21,14 +21,14 @@ <output name="o"/> </pb_type> <interconnect> - <mux name="outmux" input="blocka.a blockb.b blockc[0].c blockc[1].c" output="blocko.i"> + <mux input="blocka.a blockb.b blockc[0].c blockc[1].c" output="blocko.i" name="outmux"> <metadata> <meta name="fasm_mux"> blocka.a : a1 blockb.b : b1.l1 blockc[0].c : c0.l1 blockc[1].c : c1 - </meta> + </meta> <meta name="fasm_name">fasm_name</meta> </metadata> </mux>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml index b0d5c1a..21c5cb3 100644 --- a/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml +++ b/convert_and_merge_composable_tests/composable-interconnect-fasm-mux.golden.xml
@@ -10,12 +10,12 @@ </pb_type> <interconnect> <direct name="parent-o" output="parent.o" input="child.o"/> - <mux name="mux1" input="parent.i0 parent.i1" output="child.i"> + <mux input="parent.i0 parent.i1" output="child.i" name="mux1"> <metadata> <meta name="fasm_mux"> parent.i0 : a1 parent.i1 : b1 - </meta> + </meta> <meta name="fasm_name">fasm_name</meta> </metadata> </mux>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.golden.xml index 43c72d0..12abd36 100644 --- a/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.golden.xml +++ b/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.golden.xml
@@ -20,12 +20,17 @@ <output name="o"/> </pb_type> <interconnect> - <direct input="parent.ia1" name="childa-i1" output="childa.i1"/> - <mux name="childa-input-i2" input="parent.ia2 parent.ia3" output="childa.i2"/> + <direct input="parent.ia1" name="childa-i1" output="childa.i1"> + <pack_pattern name="A1" in_port="parent.ia1" out_port="childa.i1"/> + </direct> + <mux input="parent.ia2 parent.ia3" output="childa.i2" name="childa-input-i2"> + <pack_pattern name="A2" in_port="parent.ia2" out_port="childa.i2"/> + <pack_pattern name="A3" in_port="parent.ia3" out_port="childa.i2"/> + </mux> <direct input="childa.o" name="parent-o0" output="parent.o0"/> <direct input="childa.o" name="childb-i" output="childb.i"/> - <mux name="childc-input" input="childa.o childb.o" output="childc.i"/> - <mux name="output" input="childa.o childb.o childc.o" output="parent.o1"/> + <mux input="childa.o childb.o" output="childc.i" name="childc-input"/> + <mux input="childa.o childb.o childc.o" output="parent.o1" name="output"/> </interconnect> </pb_type> </xml>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.xml b/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.xml index 5d8a28c..089159f 100644 --- a/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.xml +++ b/convert_and_merge_composable_tests/composable-interconnect-implicit-parent.xml
@@ -59,12 +59,24 @@ <direct> <port type="input" name="ia1" /> <port type="output" from="childa" name="i1" /> + <pack_pattern name="A1"> + <port type="input" name="ia1" /> + <port type="output" from="childa" name="i1" /> + </pack_pattern> </direct> <!-- Mux parent -> child --> <mux name="childa-input-i2"> <port type="input" name="ia2" /> <port type="input" name="ia3" /> <port type="output" from="childa" name="i2" /> + <pack_pattern name="A2"> + <port type="input" name="ia2" /> + <port type="output" from="childa" name="i2" /> + </pack_pattern> + <pack_pattern name="A3"> + <port type="input" name="ia3" /> + <port type="output" from="childa" name="i2" /> + </pack_pattern> </mux> <!-- Direct parent -> child --> <direct>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-pack_patterns.golden.xml b/convert_and_merge_composable_tests/composable-interconnect-pack_patterns.golden.xml new file mode 100644 index 0000000..ae06303 --- /dev/null +++ b/convert_and_merge_composable_tests/composable-interconnect-pack_patterns.golden.xml
@@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<xml> + <pb_type name="parent"> + <input name="ia1"/> + <input name="ia2"/> + <input name="ia3"/> + <output name="o0"/> + <output name="o1"/> + <pb_type name="childa"> + <input name="i1"/> + <input name="i2"/> + <output name="o"/> + </pb_type> + <pb_type name="childb"> + <input name="i"/> + <output name="o"/> + </pb_type> + <pb_type name="childc"> + <input name="i"/> + <output name="o"/> + </pb_type> + <interconnect> + <direct input="parent.ia1" name="childa-i1" output="childa.i1"/> + <mux input="parent.ia2 parent.ia3" output="childa.i2" name="childa-input-i2"/> + <direct input="childa.o" name="parent-o0" output="parent.o0"/> + <direct input="childa.o" name="childb-i" output="childb.i"/> + <mux input="childa.o childb.o" output="childc.i" name="childc-input"/> + <mux input="childa.o childb.o childc.o" output="parent.o1" name="output"/> + </interconnect> + </pb_type> +</xml>
diff --git a/convert_and_merge_composable_tests/composable-interconnect-pack_patterns.xml b/convert_and_merge_composable_tests/composable-interconnect-pack_patterns.xml new file mode 100644 index 0000000..5d8a28c --- /dev/null +++ b/convert_and_merge_composable_tests/composable-interconnect-pack_patterns.xml
@@ -0,0 +1,95 @@ +<?xml version="1.0"?> +<!-- + Convert "implicit" parent specification for interconnect tags. + + Convert + <interconnect><direct><port type='input' ...><port type='output' ...></direct><YYY../></interconnect> + to + <interconnect><direct input='...' name='xxx-xxx' output='...'><YYY../></direct></interconnect> + + 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> + +This example below is connected as follows; + ┌───────────────────────────────────────────────────────────────────┐ + │ │ + │ ┌────────────┐ │ + ia1│──────>│i1 │ │ + │ │ │ │ + │ │ childa o│─┬───────────────────────────────────────────>│o0 + ia2│──>│╲ │ │ │ │ + │ │├─>│i2 │ │ │ + ia3│──>│╱ └────────────┘ │ ┌──────────┐ │ + │ ├─>│i childb o│─┬──>│╲ │ + │ │ └──────────┘ │ ││ ┌──────────┐ │ + │ │ │ │├──>│i childc o│──>│╲ │ + │ ├──────────────────>││ └──────────┘ ││ │ + │ │ │ │╱ ││ │ + │ │ │ ╭────────>│├──>│o1 + │ │ ╰─────────────╯ ││ │ + │ │ ││ │ + │ ╰──────────────────────────────────────>│/ │ + │ │ + └───────────────────────────────────────────────────────────────────┘ + --> +<xml> + <pb_type name="parent"> + <input name="ia1"/> + <input name="ia2"/> + <input name="ia3"/> + <output name="o0"/> + <output name="o1"/> + <pb_type name="childa"> + <input name="i1"/> + <input name="i2"/> + <output name="o"/> + </pb_type> + <pb_type name="childb"> + <input name="i"/> + <output name="o"/> + </pb_type> + <pb_type name="childc"> + <input name="i"/> + <output name="o"/> + </pb_type> + <interconnect> + <!-- Direct parent -> child --> + <direct> + <port type="input" name="ia1" /> + <port type="output" from="childa" name="i1" /> + </direct> + <!-- Mux parent -> child --> + <mux name="childa-input-i2"> + <port type="input" name="ia2" /> + <port type="input" name="ia3" /> + <port type="output" from="childa" name="i2" /> + </mux> + <!-- Direct parent -> child --> + <direct> + <port type="input" from="childa" name="o" /> + <port type="output" name="o0" /> + </direct> + <!-- Direct child -> child --> + <direct> + <port type="input" from="childa" name="o" /> + <port type="output" from="childb" name="i" /> + </direct> + <!-- Mux child -> child --> + <mux name="childc-input"> + <port type="input" from="childa" name="o" /> + <port type="input" from="childb" name="o" /> + <port type="output" from="childc" name="i" /> + </mux> + <!-- Mux child -> parent --> + <mux name="output"> + <port type="input" from="childa" name="o" /> + <port type="input" from="childb" name="o" /> + <port type="input" from="childc" name="o" /> + <port type="output" name="o1" /> + </mux> + </interconnect> + </pb_type> +</xml> +
diff --git a/convert_and_merge_composable_tests/preserve-interconnect.golden.xml b/convert_and_merge_composable_tests/preserve-interconnect.golden.xml index 43c72d0..8023868 100644 --- a/convert_and_merge_composable_tests/preserve-interconnect.golden.xml +++ b/convert_and_merge_composable_tests/preserve-interconnect.golden.xml
@@ -21,11 +21,16 @@ </pb_type> <interconnect> <direct input="parent.ia1" name="childa-i1" output="childa.i1"/> - <mux name="childa-input-i2" input="parent.ia2 parent.ia3" output="childa.i2"/> - <direct input="childa.o" name="parent-o0" output="parent.o0"/> + <mux input="parent.ia2 parent.ia3" output="childa.i2" name="childa-input-i2"> + <pack_pattern in_port="parent.parent.ia2" name="MUX1" output="childa.i2"/> + <pack_pattern in_port="parent.parent.ia3" name="MUX2" output="childa.i2"/> + </mux> + <direct input="childa.o" name="parent-o0" output="parent.o0"> + <pack_pattern in_port="parent.childa.o" name="CARRY" output="parent.o0"/> + </direct> <direct input="childa.o" name="childb-i" output="childb.i"/> - <mux name="childc-input" input="childa.o childb.o" output="childc.i"/> - <mux name="output" input="childa.o childb.o childc.o" output="parent.o1"/> + <mux input="childa.o childb.o" output="childc.i" name="childc-input"/> + <mux input="childa.o childb.o childc.o" output="parent.o1" name="output"/> </interconnect> </pb_type> </xml>
diff --git a/convert_and_merge_composable_tests/preserve-interconnect.xml b/convert_and_merge_composable_tests/preserve-interconnect.xml index bcdffaa..1053784 100644 --- a/convert_and_merge_composable_tests/preserve-interconnect.xml +++ b/convert_and_merge_composable_tests/preserve-interconnect.xml
@@ -22,8 +22,13 @@ </pb_type> <interconnect> <direct input="parent.ia1" name="childa-i1" output="childa.i1"/> - <mux name="childa-input-i2" input="parent.ia2 parent.ia3" output="childa.i2"/> - <direct input="childa.o" name="parent-o0" output="parent.o0"/> + <mux name="childa-input-i2" input="parent.ia2 parent.ia3" output="childa.i2"> + <pack_pattern name="MUX1" in_port="parent.ia2" output="childa.i2" /> + <pack_pattern name="MUX2" in_port="parent.ia3" output="childa.i2" /> + </mux> + <direct input="childa.o" name="parent-o0" output="parent.o0"> + <pack_pattern name="CARRY" in_port="childa.o" output="parent.o0" /> + </direct> <direct input="childa.o" name="childb-i" output="childb.i"/> <mux name="childc-input" input="childa.o childb.o" output="childc.i"/> <mux name="output" input="childa.o childb.o childc.o" output="parent.o1"/>