Merge pull request #8 from HackerFoo/master
Implement pb_array element to allow moving num_pb out of pb_type
diff --git a/tests/convert_and_merge_composable_tests/composable-pb_type-middle.xml b/tests/convert_and_merge_composable_tests/composable-pb_type-middle.xml
index d4f1f66..93841ae 100644
--- a/tests/convert_and_merge_composable_tests/composable-pb_type-middle.xml
+++ b/tests/convert_and_merge_composable_tests/composable-pb_type-middle.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<pb_type name="MIDDLE" xmlns:xi="http://www.w3.org/2001/XInclude">
- <pb_type name="middle_inner" num_pb="1">
+ <pb_type name="middle_inner">
<xi:include href="composable-pb_type-inner.xml" xpointer="xpointer(pb_type/child::node())"/>
</pb_type>
</pb_type>
diff --git a/tests/convert_and_merge_composable_tests/composable-pb_type.xml b/tests/convert_and_merge_composable_tests/composable-pb_type.xml
index ede3b86..a7604ab 100644
--- a/tests/convert_and_merge_composable_tests/composable-pb_type.xml
+++ b/tests/convert_and_merge_composable_tests/composable-pb_type.xml
@@ -1,9 +1,13 @@
<?xml version="1.0" ?>
<pb_type name="top" num_pb="1" xmlns:xi="http://www.w3.org/2001/XInclude">
- <pb_type name="top_inner" num_pb="1" >
- <xi:include href="composable-pb_type-inner.xml" xpointer="xpointer(pb_type/child::node())"/>
- </pb_type>
- <pb_type name="middle" num_pb="1">
- <xi:include href="composable-pb_type-middle.xml" xpointer="xpointer(pb_type/child::node())"/>
- </pb_type>
+ <pb_array num_pb="1">
+ <pb_type name="top_inner">
+ <xi:include href="composable-pb_type-inner.xml" xpointer="xpointer(pb_type/child::node())"/>
+ </pb_type>
+ <pb_type name="middle">
+ <pb_array num_pb="1">
+ <xi:include href="composable-pb_type-middle.xml" xpointer="xpointer(pb_type/child::node())"/>
+ </pb_array>
+ </pb_type>
+ </pb_array>
</pb_type>
diff --git a/vtr_xml_utils/resources/convert-pb_type-attributes.xsl b/vtr_xml_utils/resources/convert-pb_type-attributes.xsl
index 0f497ee..0cc4af7 100644
--- a/vtr_xml_utils/resources/convert-pb_type-attributes.xsl
+++ b/vtr_xml_utils/resources/convert-pb_type-attributes.xsl
@@ -14,6 +14,10 @@
<xsl:if test="blif_model">
<xsl:attribute name="blif_model"><xsl:value-of select="blif_model/text()"/></xsl:attribute>
</xsl:if>
+ <!-- Inherit 'num_pb' attribute from pb_array elements -->
+ <xsl:if test="parent::pb_array/@num_pb">
+ <xsl:attribute name="num_pb"><xsl:value-of select="parent::pb_array/@num_pb"/></xsl:attribute>
+ </xsl:if>
<!--
Convert
<pb_type><pb_class>XXX</pb_class></pb_type>
@@ -31,4 +35,9 @@
<xsl:template match="pb_type/blif_model"/>
<xsl:template match="pb_type/pb_class"/>
+ <!-- Copy pb_type elements out of pb_array elements -->
+ <xsl:template match="pb_array">
+ <xsl:apply-templates/>
+ </xsl:template>
+
</xsl:stylesheet>
diff --git a/vtr_xml_utils/resources/fpga_architecture.xsd b/vtr_xml_utils/resources/fpga_architecture.xsd
index c5e8908..2236a3f 100644
--- a/vtr_xml_utils/resources/fpga_architecture.xsd
+++ b/vtr_xml_utils/resources/fpga_architecture.xsd
@@ -604,6 +604,7 @@
<xs:complexType name="mode">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="pb_type" type="pb_type"/>
+ <xs:element name="pb_array" type="pb_array"/>
<xs:element name="interconnect" type="interconnect"/>
<xs:element name="pinlocations" type="pinlocations"/>
<xs:element name="switchblock_locations" type="switchblock_locations"/>
@@ -657,6 +658,7 @@
<xs:complexType name="pb_type">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="pb_type" type="pb_type"/>
+ <xs:element name="pb_array" type="pb_array"/>
<xs:element name="input" type="input_port"/>
<xs:element name="output" type="output_port"/>
<xs:element name="clock" type="clock_port"/>
@@ -672,6 +674,12 @@
<xs:attribute name="class" type="pb_type_class"/>
</xs:complexType>
+ <xs:complexType name="pb_array">
+ <xs:sequence>
+ <xs:element name="pb_type" type="pb_type" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
<xs:simpleType name="segment_type">
<xs:restriction base="xs:string">
<xs:enumeration value="bidir"/>