Add missing power and clocks elements. Added sb_loc elements. Changed pb_type io equivalent to match definitions uses in VPR archdefs. Made fs in switch_block optional, as it can be for custom switch_blocks. Added device_layout as an alias for fixed_layout. Signed-off-by: Jeppe Johansen <jeppe@j-software.dk>
diff --git a/fpga_architecture.xsd b/fpga_architecture.xsd index 4fc6d50..6d93afd 100644 --- a/fpga_architecture.xsd +++ b/fpga_architecture.xsd
@@ -62,7 +62,7 @@ <xs:complexType name="models"> <xs:sequence> - <xs:element name="model" type="model_type" maxOccurs="unbounded"/> + <xs:element name="model" type="model_type" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> @@ -126,7 +126,7 @@ </xs:complexType> <xs:complexType name="layout_info"> - <xs:choice maxOccurs="unbounded"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="fill" type="fill"/> <xs:element name="perimeter" type="perimeter"/> <xs:element name="corners" type="corners"/> @@ -159,6 +159,7 @@ <xs:choice minOccurs="1"> <xs:element name="auto_layout" type="auto_layout" maxOccurs="1"/> <xs:element name="fixed_layout" type="fixed_layout" maxOccurs="unbounded"/> + <xs:element name="device_layout" type="fixed_layout" maxOccurs="unbounded"/> <!-- Apparently a legacy name --> </xs:choice> </xs:complexType> @@ -223,7 +224,7 @@ <xs:element name="switch_block"> <xs:complexType> <xs:attribute name="type" type="switch_block_type" use="required"/> - <xs:attribute name="fs" type="xs:int" use="required"/> + <xs:attribute name="fs" type="xs:int"/> </xs:complexType> </xs:element> <xs:element name="chan_width_distr" minOccurs="0" type="chan_width_distr"/> @@ -271,7 +272,7 @@ <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="R" type="xs:double" use="required"/> <xs:attribute name="Cin" type="xs:double" use="required"/> - <xs:attribute name="Cout" type="xs:double" use="required"/> + <xs:attribute name="Cout" type="xs:double"/> <xs:attribute name="Tdel" type="xs:double"/> <xs:attribute name="buf_size" type="buf_size" default="auto"/> <xs:attribute name="mux_trans_size" type="xs:double"/> @@ -292,10 +293,20 @@ </xs:restriction> </xs:simpleType> + <xs:simpleType name="pb_io_equivalent"> + <xs:restriction base="xs:string"> + <xs:enumeration value="none"/> + <xs:enumeration value="full"/> + <xs:enumeration value="instance"/> + <xs:enumeration value="false"/> + <xs:enumeration value="true"/> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="pb_type_input"> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="num_pins" type="xs:int" use="required"/> - <xs:attribute name="equivalent" type="xs:boolean" default="false"/> + <xs:attribute name="equivalent" type="pb_io_equivalent" default="false"/> <xs:attribute name="is_non_clock_global" type="xs:boolean"/> <xs:attribute name="port_class" type="xs:string" /> </xs:complexType> @@ -303,7 +314,7 @@ <xs:complexType name="pb_type_output"> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="num_pins" type="xs:int" use="required"/> - <xs:attribute name="equivalent" type="xs:boolean" default="false"/> + <xs:attribute name="equivalent" type="pb_io_equivalent" default="false"/> <xs:attribute name="port_class" type="xs:string" /> </xs:complexType> @@ -396,27 +407,59 @@ </xs:restriction> </xs:simpleType> + <xs:complexType name="power_dynamic_power"> + <xs:attribute name="power_per_instance" type="xs:double"/> + <xs:attribute name="C_internal" type="xs:double"/> + </xs:complexType> + + <xs:complexType name="power_static_power"> + <xs:attribute name="power_per_instance" type="xs:double"/> + </xs:complexType> + + <xs:complexType name="power_port"> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="energy_per_toggle" type="xs:double" use="required"/> + <xs:attribute name="scaled_by_static_prob" type="xs:string"/> + <xs:attribute name="scaled_by_static_prob_n" type="xs:string"/> + </xs:complexType> + + <xs:complexType name="power_local_interconnect"> + <xs:attribute name="C_wire" type="xs:double" use="required"/> + <xs:attribute name="factor" type="xs:double" default="0.5"/> + </xs:complexType> + + <xs:complexType name="power_buffers"> + <xs:attribute name="logical_effort_factor" type="xs:double" default="4"/> + </xs:complexType> + + <xs:complexType name="power_ff_size"> + <xs:attribute name="FF_size" type="xs:double" use="required"/> + </xs:complexType> + + <xs:complexType name="power_LUT_transistor_size"> + <xs:attribute name="LUT_transistor_size" type="xs:double" use="required"/> + </xs:complexType> + + <xs:complexType name="power_mux_transistor_size"> + <xs:attribute name="mux_transistor_size" type="xs:double" use="required"/> + </xs:complexType> + <xs:complexType name="power"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="dynamic_power" type="power_dynamic_power"/> + <xs:element name="static_power" type="power_static_power"/> + <xs:element name="port" type="power_port"/> + </xs:choice> + <xs:attribute name="method" type="power_estimation_method" default="auto-size"/> + </xs:complexType> + + <xs:complexType name="global_power"> <xs:choice maxOccurs="unbounded"> - <xs:element name="dynamic_power"> - <xs:complexType> - <xs:attribute name="power_per_instance" type="xs:double"/> - <xs:attribute name="C_internal" type="xs:double"/> - </xs:complexType> - </xs:element> - <xs:element name="static_power"> - <xs:complexType> - <xs:attribute name="power_per_instance" type="xs:double"/> - </xs:complexType> - </xs:element> - <xs:element name="port"> - <xs:complexType> - <xs:attribute name="name" type="xs:string" use="required"/> - <xs:attribute name="energy_per_toggle" type="xs:double" use="required"/> - <xs:attribute name="scaled_by_static_prob" type="xs:string"/> - <xs:attribute name="scaled_by_static_prob_n" type="xs:string"/> - </xs:complexType> - </xs:element> + <xs:element name="local_interconnect" type="power_local_interconnect"/> + <xs:element name="buffers" type="power_buffers"/> + <xs:element name="mux_transistor_size" type="power_mux_transistor_size"/> + <xs:element name="FF_size" type="power_ff_size"/> + <xs:element name="LUT_transistor_size" type="power_LUT_transistor_size"/> </xs:choice> <xs:attribute name="method" type="power_estimation_method" default="auto-size"/> </xs:complexType> @@ -424,6 +467,7 @@ <xs:simpleType name="pinlocations_pattern"> <xs:restriction base="xs:string"> <xs:enumeration value="spread"/> + <xs:enumeration value="spread_inputs_perimeter_outputs"/> <xs:enumeration value="perimeter"/> <xs:enumeration value="custom"/> </xs:restriction> @@ -466,7 +510,26 @@ </xs:restriction> </xs:simpleType> + <xs:simpleType name="sb_loc_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="full"/> + <xs:enumeration value="straight"/> + <xs:enumeration value="turns"/> + <xs:enumeration value="none"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="sb_loc"> + <xs:attribute name="type" type="sb_loc_type" default="full"/> + <xs:attribute name="xoffset" type="xs:int" default="0"/> + <xs:attribute name="yoffset" type="xs:int" default="0"/> + <xs:attribute name="switch_override" type="xs:string"/> + </xs:complexType> + <xs:complexType name="switchblock_locations"> + <xs:sequence> + <xs:element name="sb_loc" type="sb_loc" maxOccurs="unbounded" minOccurs="0" /> + </xs:sequence> <xs:attribute name="pattern" type="switchblock_locations_pattern" default="external_full_internal_straight"/> <xs:attribute name="internal_switch" type="xs:string"/> </xs:complexType> @@ -571,7 +634,7 @@ <xs:element name="wire_switch" type="segment_wire_switch"/> <xs:element name="opin_switch" type="segment_wire_switch"/> </xs:choice> - <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="name" type="xs:string"/> <xs:attribute name="length" type="segment_length" use="required"/> <xs:attribute name="type" type="segment_type" use="required"/> <xs:attribute name="freq" type="xs:double" use="required"/> @@ -650,20 +713,15 @@ </xs:sequence> </xs:complexType> + <xs:complexType name="wireconn_connection"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="switchpoint" type="xs:string" use="required"/> + </xs:complexType> + <xs:complexType name="wireconn"> - <xs:choice maxOccurs="unbounded"> - <xs:element name="from" maxOccurs="unbounded"> - <xs:complexType> - <xs:attribute name="type" type="xs:string" use="required"/> - <xs:attribute name="switchpoint" type="xs:string" use="required"/> - </xs:complexType> - </xs:element> - <xs:element name="to" maxOccurs="unbounded"> - <xs:complexType> - <xs:attribute name="type" type="xs:string" use="required"/> - <xs:attribute name="switchpoint" type="xs:string" use="required"/> - </xs:complexType> - </xs:element> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="from" type="wireconn_connection" maxOccurs="unbounded"/> + <xs:element name="to" type="wireconn_connection" maxOccurs="unbounded"/> </xs:choice> <xs:attribute name="num_conns_type" type="xs:string" use="required"/> <xs:attribute name="from_type" type="xs:string"/> @@ -688,6 +746,18 @@ </xs:sequence> </xs:complexType> + <xs:complexType name="clock"> + <xs:attribute name="C_wire" type="xs:double"/> + <xs:attribute name="C_wire_per_m" type="xs:double"/> + <xs:attribute name="buffer_size" type="buf_size"/> + </xs:complexType> + + <xs:complexType name="clocks"> + <xs:sequence> + <xs:element name="clock" type="clock" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + <xs:element name="architecture"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> @@ -697,6 +767,8 @@ <xs:element name="switchlist" type="switchlist"/> <xs:element name="switchblocklist" type="switchblocklist"/> <xs:element name="segmentlist" type="segmentlist"/> + <xs:element name="power" type="global_power"/> + <xs:element name="clocks" type="clocks"/> <xs:element name="directlist" type="directlist"/> <xs:element name="complexblocklist" type="complexblocklist"/> </xs:choice>