xml: Preserve existing interconnect info. Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ef0e5b..7a6f5de 100644 --- a/CMakeLists.txt +++ b/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/composable-interconnect-fasm-mux-levels.golden.xml b/composable-interconnect-fasm-mux-levels.golden.xml index ca6f259..c103723 100644 --- a/composable-interconnect-fasm-mux-levels.golden.xml +++ b/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/composable-interconnect-fasm-mux.golden.xml b/composable-interconnect-fasm-mux.golden.xml index b0d5c1a..21c5cb3 100644 --- a/composable-interconnect-fasm-mux.golden.xml +++ b/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/composable-interconnect-implicit-parent.golden.xml b/composable-interconnect-implicit-parent.golden.xml index 43c72d0..12abd36 100644 --- a/composable-interconnect-implicit-parent.golden.xml +++ b/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/composable-interconnect-implicit-parent.xml b/composable-interconnect-implicit-parent.xml index 5d8a28c..089159f 100644 --- a/composable-interconnect-implicit-parent.xml +++ b/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/composable-interconnect-pack_patterns.golden.xml b/composable-interconnect-pack_patterns.golden.xml new file mode 100644 index 0000000..ae06303 --- /dev/null +++ b/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/composable-interconnect-pack_patterns.xml b/composable-interconnect-pack_patterns.xml new file mode 100644 index 0000000..5d8a28c --- /dev/null +++ b/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/preserve-interconnect.golden.xml b/preserve-interconnect.golden.xml index 43c72d0..8023868 100644 --- a/preserve-interconnect.golden.xml +++ b/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/preserve-interconnect.xml b/preserve-interconnect.xml index bcdffaa..1053784 100644 --- a/preserve-interconnect.xml +++ b/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"/>