Add preliminary schemas for VPR XML files. Signed-off-by: Jeppe Johansen <jeppe@j-software.dk>
diff --git a/fpga_architecture.xsd b/fpga_architecture.xsd new file mode 100644 index 0000000..40855e0 --- /dev/null +++ b/fpga_architecture.xsd
@@ -0,0 +1,667 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="port"> + <xs:attribute name="name" type="xs:string" use="required" /> + <xs:attribute name="is_clock" type="xs:boolean" /> + <xs:attribute name="clock" type="xs:string" /> + <xs:attribute name="combinational_sink_ports" type="xs:string" /> + </xs:complexType> + + <xs:complexType name="port_list"> + <xs:sequence> + <xs:element name="port" type="port" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="model_type"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="input_ports" type="port_list"/> + <xs:element name="output_ports" type="port_list"/> + </xs:choice> + <xs:attribute name="name" type="xs:string" use="required" /> + </xs:complexType> + + <xs:complexType name="models"> + <xs:sequence> + <xs:element name="model" type="model_type" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="fill"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="perimeter"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="corners"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="single"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + <xs:attribute name="x" type="xs:string" use="required"/> + <xs:attribute name="y" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="col"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + <xs:attribute name="startx" type="xs:string" use="required"/> + <xs:attribute name="repeatx" type="xs:string"/> + <xs:attribute name="starty" type="xs:string" default="0"/> + <xs:attribute name="incry" type="xs:string" default="h"/> + </xs:complexType> + + <xs:complexType name="row"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + <xs:attribute name="starty" type="xs:string" use="required"/> + + <xs:attribute name="repeaty" type="xs:string"/> + <xs:attribute name="startx" type="xs:string" default="0"/> + <xs:attribute name="incrx" type="xs:string" default="w"/> + </xs:complexType> + + <xs:complexType name="region"> + <xs:attribute name="type" type="xs:string" use="required"/> + <xs:attribute name="priority" type="xs:int" use="required"/> + + <xs:attribute name="startx" type="xs:string" default="0"/> + <xs:attribute name="endx" type="xs:string" default="W-1"/> + <xs:attribute name="incrx" type="xs:string" default="w"/> + <xs:attribute name="repeatx" type="xs:string"/> + + <xs:attribute name="starty" type="xs:string" default="0"/> + <xs:attribute name="endy" type="xs:string" default="H-1"/> + <xs:attribute name="incry" type="xs:string" default="h"/> + <xs:attribute name="repeaty" type="xs:string"/> + </xs:complexType> + + <xs:complexType name="layout_info"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="fill" type="fill"/> + <xs:element name="perimeter" type="perimeter"/> + <xs:element name="corners" type="corners"/> + <xs:element name="single" type="single"/> + <xs:element name="col" type="col"/> + <xs:element name="row" type="row"/> + <xs:element name="region" type="region"/> + </xs:choice> + </xs:complexType> + + <xs:complexType name="auto_layout"> + <xs:complexContent> + <xs:extension base="layout_info"> + <xs:attribute name="aspect_ratio" type="xs:double" default="1.0" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="fixed_layout"> + <xs:complexContent> + <xs:extension base="layout_info"> + <xs:attribute name="name" type="xs:string" use="required" /> + <xs:attribute name="width " type="xs:int" use="required" /> + <xs:attribute name="height " type="xs:int" use="required" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="layout"> + <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:choice> + </xs:complexType> + + <xs:simpleType name="switch_block_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="wilton"/> + <xs:enumeration value="subset"/> + <xs:enumeration value="universal"/> + <xs:enumeration value="custom"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="fc_type_enum"> + <xs:restriction base="xs:string"> + <xs:enumeration value="frac"/> + <xs:enumeration value="abs"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="chan_distribution"> + <xs:restriction base="xs:string"> + <xs:enumeration value="gaussian"/> + <xs:enumeration value="uniform"/> + <xs:enumeration value="pulse"/> + <xs:enumeration value="delta"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="chan_dist"> + <xs:attribute name="distr" type="chan_distribution" use="required"/> + <xs:attribute name="peak" type="xs:double" use="required"/> + <xs:attribute name="width" type="xs:double"/> + <xs:attribute name="xpeak" type="xs:double"/> + <xs:attribute name="dc" type="xs:double"/> + </xs:complexType> + + <xs:complexType name="chan_width_distr"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="x" type="chan_dist"/> + <xs:element name="y" type="chan_dist"/> + </xs:choice> + </xs:complexType> + + <xs:complexType name="device"> + <xs:all> + <xs:element name="sizing"> + <xs:complexType> + <xs:attribute name="R_minW_nmos" type="xs:double" use="required"/> + <xs:attribute name="R_minW_pmos" type="xs:double" use="required"/> + </xs:complexType> + </xs:element> + <xs:element name="connection_block"> + <xs:complexType> + <xs:attribute name="input_switch_name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + <xs:element name="area"> + <xs:complexType> + <xs:attribute name="grid_logic_tile_area" type="xs:double" use="required"/> + </xs:complexType> + </xs:element> + <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:complexType> + </xs:element> + <xs:element name="chan_width_distr" minOccurs="0" type="chan_width_distr"/> + <xs:element name="default_fc" minOccurs="0"> + <xs:complexType> + <xs:attribute name="in_type" type="fc_type_enum"/> + <xs:attribute name="in_val" type="xs:double"/> + <xs:attribute name="out_type" type="fc_type_enum"/> + <xs:attribute name="out_val" type="xs:double"/> + </xs:complexType> + </xs:element> + </xs:all> + </xs:complexType> + + <xs:simpleType name="switch_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="mux"/> + <xs:enumeration value="tristate"/> + <xs:enumeration value="pass_gate"/> + <xs:enumeration value="short"/> + <xs:enumeration value="buffer"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="buf_size"> + <xs:union memberTypes="xs:double"> + <xs:simpleType> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="auto"/> + </xs:restriction> + </xs:simpleType> + </xs:union> + </xs:simpleType> + + <xs:complexType name="switch"> + <xs:sequence> + <xs:element name="Tdel" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:attribute name="num_inputs" type="xs:int" use="required"/> + <xs:attribute name="delay" type="xs:double" use="required"/> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="type" type="switch_type" use="required"/> + <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="Tdel" type="xs:double"/> + <xs:attribute name="buf_size" type="buf_size" default="auto"/> + <xs:attribute name="mux_trans_size" type="xs:double"/> + <xs:attribute name="power_buf_size" type="xs:double"/> + </xs:complexType> + + <xs:complexType name="switchlist"> + <xs:sequence> + <xs:element name="switch" type="switch" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:simpleType name="pb_type_class"> + <xs:restriction base="xs:string"> + <xs:enumeration value="lut"/> + <xs:enumeration value="flipflop"/> + <xs:enumeration value="memory"/> + </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="is_non_clock_global" type="xs:boolean"/> + <xs:attribute name="port_class" type="xs:string" /> + </xs:complexType> + + <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="port_class" type="xs:string" /> + </xs:complexType> + + <xs:simpleType name="delay_matrix_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="min"/> + <xs:enumeration value="max"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="delay_matrix"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="type" type="delay_matrix_type" use="required"/> + <xs:attribute name="in_port" type="xs:string" use="required"/> + <xs:attribute name="out_port" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <xs:complexType name="T_timing_minmax"> + <xs:attribute name="max" type="xs:double"/> + <xs:attribute name="min" type="xs:double"/> + <xs:attribute name="in_port" type="xs:string" use="required"/> + <xs:attribute name="out_port" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="T_timing"> + <xs:attribute name="value" type="xs:double" use="required"/> + <xs:attribute name="port" type="xs:string" use="required"/> + <xs:attribute name="clock" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="T_clock_timing"> + <xs:attribute name="max" type="xs:double"/> + <xs:attribute name="min" type="xs:double"/> + <xs:attribute name="port" type="xs:string" use="required"/> + <xs:attribute name="clock" type="xs:string" use="required"/> + </xs:complexType> + + <xs:group name="timing_group"> + <xs:choice> + <xs:element name="delay_constant" type="T_timing_minmax"/> + <xs:element name="delay_matrix" type="delay_matrix"/> + </xs:choice> + </xs:group> + + <xs:group name="timing_group_pbtype"> + <xs:choice> + <xs:group ref="timing_group" minOccurs="0"/> + <xs:element name="T_setup" type="T_timing"/> + <xs:element name="T_hold" type="T_timing"/> + <xs:element name="T_clock_to_Q" type="T_clock_timing"/> + </xs:choice> + </xs:group> + + <xs:complexType name="interconnect_type"> + <xs:group ref="timing_group" minOccurs="0"/> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="input" type="xs:string" use="required"/> + <xs:attribute name="output" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="interconnect"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="complete" type="interconnect_type"/> + <xs:element name="direct" type="interconnect_type"/> + <xs:element name="mux" type="interconnect_type"/> + <xs:element name="pack_pattern"> + <xs:complexType> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="in_port" type="xs:string" use="required"/> + <xs:attribute name="out_port" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + </xs:choice> + </xs:complexType> + + <xs:simpleType name="power_estimation_method"> + <xs:restriction base="xs:string"> + <xs:enumeration value="specify-size"/> + <xs:enumeration value="auto-size"/> + <xs:enumeration value="pin-toggle"/> + <xs:enumeration value="C-internal"/> + <xs:enumeration value="absolute"/> + <xs:enumeration value="ignore"/> + <xs:enumeration value="sum-of-children"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="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:choice> + <xs:attribute name="method" type="power_estimation_method" default="auto-size"/> + </xs:complexType> + + <xs:simpleType name="pinlocations_pattern"> + <xs:restriction base="xs:string"> + <xs:enumeration value="spread"/> + <xs:enumeration value="perimeter"/> + <xs:enumeration value="custom"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="loc_side"> + <xs:restriction base="xs:string"> + <xs:enumeration value="left"/> + <xs:enumeration value="right"/> + <xs:enumeration value="bottom"/> + <xs:enumeration value="top"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="pinlocations"> + <xs:sequence> + <xs:element name="loc" maxOccurs="unbounded" minOccurs="0"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="side" type="loc_side" use="required"/> + <xs:attribute name="xoffset" type="xs:int" default="0"/> + <xs:attribute name="yoffset" type="xs:int" default="0"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="pattern" type="pinlocations_pattern"/> + </xs:complexType> + + <xs:simpleType name="switchblock_locations_pattern"> + <xs:restriction base="xs:string"> + <xs:enumeration value="external_full_internal_straight"/> + <xs:enumeration value="all"/> + <xs:enumeration value="external"/> + <xs:enumeration value="internal"/> + <xs:enumeration value="none"/> + <xs:enumeration value="custom"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="switchblock_locations"> + <xs:attribute name="pattern" type="switchblock_locations_pattern" default="external_full_internal_straight"/> + <xs:attribute name="internal_switch" type="xs:string"/> + </xs:complexType> + + <xs:complexType name="fc"> + <xs:sequence> + <xs:element name="fc_override" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:attribute name="fc_type" type="fc_type_enum" use="required"/> + <xs:attribute name="fc_val" type="xs:double" use="required"/> + <xs:attribute name="port_name" type="xs:string"/> + <xs:attribute name="segment_name" type="xs:string"/> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="in_type" type="fc_type_enum" use="required"/> + <xs:attribute name="in_val" type="xs:double" use="required"/> + <xs:attribute name="out_type" type="fc_type_enum" use="required"/> + <xs:attribute name="out_val" type="xs:double" use="required"/> + </xs:complexType> + + <xs:complexType name="pb_type"> + <xs:choice maxOccurs="unbounded" minOccurs="0"> + <xs:element name="pb_type" type="pb_type"/> + <xs:element name="input" type="pb_type_input"/> + <xs:element name="output" type="pb_type_output"/> + <xs:element name="clock" type="pb_type_output"/> + <xs:element name="mode"> + <xs:complexType> + <xs:choice maxOccurs="unbounded" minOccurs="0"> + <xs:element name="pb_type" type="pb_type"/> + <xs:element name="interconnect" type="interconnect"/> + <xs:element name="pinlocations" type="pinlocations"/> + <xs:element name="switchblock_locations" type="switchblock_locations"/> + </xs:choice> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + <xs:element name="interconnect" type="interconnect"/> + <xs:element name="pinlocations" type="pinlocations"/> + <xs:element name="switchblock_locations" type="switchblock_locations"/> + <xs:element name="fc" type="fc"/> + <xs:group ref="timing_group_pbtype"/> + <xs:element name="power" type="power"/> + </xs:choice> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="num_pb" type="xs:int"/> + <xs:attribute name="blif_model" type="xs:string"/> + <xs:attribute name="capacity" type="xs:int"/> + <xs:attribute name="width" type="xs:int"/> + <xs:attribute name="height" type="xs:int"/> + <xs:attribute name="area" type="xs:double"/> + <xs:attribute name="class" type="pb_type_class"/> + </xs:complexType> + + <xs:simpleType name="segment_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="bidir"/> + <xs:enumeration value="unidir"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="segment_length"> + <xs:union memberTypes="xs:nonNegativeInteger"> + <xs:simpleType> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="longline"/> + </xs:restriction> + </xs:simpleType> + </xs:union> + </xs:simpleType> + + <xs:complexType name="complexblocklist"> + <xs:sequence> + <xs:element name="pb_type" type="pb_type" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="segment_block"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="type" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="pattern"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <xs:complexType name="segment_mux"> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="segment_wire_switch"> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="segment"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="sb" type="segment_block"/> + <xs:element name="cb" type="segment_block"/> + <xs:element name="mux" type="segment_mux"/> + <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="length" type="segment_length" use="required"/> + <xs:attribute name="type" type="segment_type" use="required"/> + <xs:attribute name="freq" type="xs:double" use="required"/> + <xs:attribute name="Rmetal" type="xs:double" use="required"/> + <xs:attribute name="Cmetal" type="xs:double" use="required"/> + </xs:complexType> + + <xs:complexType name="segmentlist"> + <xs:sequence> + <xs:element name="segment" type="segment" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="direct"> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="from_pin" type="xs:string" use="required"/> + <xs:attribute name="to_pin" type="xs:string" use="required"/> + <xs:attribute name="x_offset" type="xs:int" use="required"/> + <xs:attribute name="y_offset" type="xs:int" use="required"/> + <xs:attribute name="z_offset" type="xs:int" use="required"/> + <xs:attribute name="switch_name" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="directlist"> + <xs:sequence> + <xs:element name="direct" type="direct" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:simpleType name="switchblock_location_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="EVERYWHERE"/> + <xs:enumeration value="PERIMETER"/> + <xs:enumeration value="CORNER"/> + <xs:enumeration value="FRINGE"/> + <xs:enumeration value="CORE"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="switchblock_location"> + <xs:attribute name="type" type="switchblock_location_type" use="required"/> + </xs:complexType> + + <xs:simpleType name="switchblock_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="bidir"/> + <xs:enumeration value="unidir"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="func_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="lt"/> + <xs:enumeration value="lr"/> + <xs:enumeration value="lb"/> + <xs:enumeration value="tr"/> + <xs:enumeration value="tb"/> + <xs:enumeration value="tl"/> + <xs:enumeration value="rb"/> + <xs:enumeration value="rl"/> + <xs:enumeration value="rt"/> + <xs:enumeration value="bl"/> + <xs:enumeration value="bt"/> + <xs:enumeration value="br"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="switchblock_func"> + <xs:sequence> + <xs:element name="func" maxOccurs="unbounded"> + <xs:complexType> + <xs:attribute name="type" type="func_type" use="required" /> + <xs:attribute name="formula" type="xs:string" use="required" /> + </xs:complexType> + </xs:element> + </xs:sequence> + </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> + <xs:attribute name="num_conns_type" type="xs:string" use="required"/> + <xs:attribute name="from_type" type="xs:string"/> + <xs:attribute name="to_type" type="xs:string"/> + <xs:attribute name="from_switchpoint" type="xs:string"/> + <xs:attribute name="to_switchpoint" type="xs:string"/> + </xs:complexType> + + <xs:complexType name="switchblock"> + <xs:sequence> + <xs:element name="switchblock_location" type="switchblock_location" maxOccurs="unbounded"/> + <xs:element name="switchfuncs" type="switchblock_func" maxOccurs="unbounded"/> + <xs:element name="wireconn" type="wireconn" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="type" type="switchblock_type" use="required"/> + </xs:complexType> + + <xs:complexType name="switchblocklist"> + <xs:sequence> + <xs:element name="switchblock" type="switchblock" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="architecture"> + <xs:complexType> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="models" type="models"/> + <xs:element name="layout" type="layout"/> + <xs:element name="device" type="device"/> + <xs:element name="switchlist" type="switchlist"/> + <xs:element name="switchblocklist" type="switchblocklist"/> + <xs:element name="segmentlist" type="segmentlist"/> + <xs:element name="directlist" type="directlist"/> + <xs:element name="complexblocklist" type="complexblocklist"/> + </xs:choice> + </xs:complexType> + </xs:element> + +</xs:schema> \ No newline at end of file
diff --git a/packed_netlist.xsd b/packed_netlist.xsd new file mode 100644 index 0000000..e7c7cba --- /dev/null +++ b/packed_netlist.xsd
@@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="named_value"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <xs:complexType name="port"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <xs:complexType name="port_rotation_map"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <xs:complexType name="port_group"> + <xs:sequence> + <xs:element name="port" type="port" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="block"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="inputs"> + <xs:complexType> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="port" type="port"/> + <xs:element name="port_rotation_map" type="port_rotation_map"/> + </xs:choice> + </xs:complexType> + </xs:element> + <xs:element name="outputs" type="port_group"/> + <xs:element name="clocks" type="port_group"/> + <xs:element name="attributes"> + <xs:complexType> + <xs:sequence> + <xs:element name="attribute" type="named_value" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="parameters"> + <xs:complexType> + <xs:sequence> + <xs:element name="parameter" type="named_value" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="block" type="block"/> + </xs:choice> + + <xs:attribute name="name" type="xs:string"/> + <xs:attribute name="instance" type="xs:string"/> + <xs:attribute name="mode" type="xs:string"/> + </xs:complexType> + + <xs:element name="block" type="block"/> + +</xs:schema> \ No newline at end of file
diff --git a/routing_resource.xsd b/routing_resource.xsd new file mode 100644 index 0000000..7d4ec5b --- /dev/null +++ b/routing_resource.xsd
@@ -0,0 +1,240 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="channel"> + <xs:attribute name="chan_width_max" type="xs:int" use="required"/> + <xs:attribute name="x_min" type="xs:int" use="required"/> + <xs:attribute name="y_min" type="xs:int" use="required"/> + <xs:attribute name="x_max" type="xs:int" use="required"/> + <xs:attribute name="y_max" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="x_list"> + <xs:attribute name="index" type="xs:int" use="required"/> + <xs:attribute name="info" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="y_list"> + <xs:attribute name="index" type="xs:int" use="required"/> + <xs:attribute name="info" type="xs:int" use="required"/> + </xs:complexType> + + <xs:simpleType name="switch_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="mux"/> + <xs:enumeration value="tristate"/> + <xs:enumeration value="pass_gate"/> + <xs:enumeration value="short"/> + <xs:enumeration value="buffer"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="timing"> + <xs:attribute name="R" type="xs:double"/> + <xs:attribute name="Cin" type="xs:double"/> + <xs:attribute name="Cout" type="xs:double"/> + <xs:attribute name="Tdel" type="xs:double"/> + </xs:complexType> + + <xs:complexType name="sizing"> + <xs:attribute name="mux_trans_size" type="xs:int" use="required"/> + <xs:attribute name="buf_size" type="xs:double" use="required"/> + </xs:complexType> + + <xs:complexType name="switch"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="timing" type="timing"/> + <xs:element name="sizing" type="sizing"/> + </xs:choice> + <xs:attribute name="id" type="xs:int" use="required"/> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="type" type="switch_type"/> + </xs:complexType> + + <xs:complexType name="segment_timing"> + <xs:attribute name="R_per_meter" type="xs:double"/> + <xs:attribute name="C_per_meter" type="xs:double"/> + </xs:complexType> + + <xs:complexType name="segment"> + <xs:sequence> + <xs:element name="timing" type="segment_timing" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="id" type="xs:int" use="required"/> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + + <xs:complexType name="pin"> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="ptc" type="xs:int" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + + <xs:complexType name="pin_class"> + <xs:sequence> + <xs:element name="pin" type="pin" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="type" type="pin_type" use="required"/> + </xs:complexType> + + <xs:complexType name="block_type"> + <xs:sequence> + <xs:element name="pin_class" type="pin_class" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="id" type="xs:int" use="required"/> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="width" type="xs:int" use="required"/> + <xs:attribute name="height" type="xs:int" use="required"/> + </xs:complexType> + + <xs:simpleType name="pin_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="OPEN"/> + <xs:enumeration value="OUTPUT"/> + <xs:enumeration value="INPUT"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="grid_loc"> + <xs:attribute name="x" type="xs:int" use="required"/> + <xs:attribute name="y" type="xs:int" use="required"/> + <xs:attribute name="block_type_id" type="xs:int" use="required"/> + <xs:attribute name="width_offset" type="xs:int" use="required"/> + <xs:attribute name="height_offset" type="xs:int" use="required"/> + </xs:complexType> + + <xs:simpleType name="node_type"> + <xs:restriction base="xs:string"> + <xs:enumeration value="CHANX"/> + <xs:enumeration value="CHANY"/> + <xs:enumeration value="SOURCE"/> + <xs:enumeration value="SINK"/> + <xs:enumeration value="OPIN"/> + <xs:enumeration value="IPIN"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="node_direction"> + <xs:restriction base="xs:string"> + <xs:enumeration value="INC_DIR"/> + <xs:enumeration value="DEC_DIR"/> + <xs:enumeration value="BI_DIR"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="loc_side"> + <xs:restriction base="xs:string"> + <xs:enumeration value="LEFT"/> + <xs:enumeration value="RIGHT"/> + <xs:enumeration value="TOP"/> + <xs:enumeration value="BOTTOM"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="node_loc"> + <xs:attribute name="xlow" type="xs:int" use="required"/> + <xs:attribute name="ylow" type="xs:int" use="required"/> + <xs:attribute name="xhigh" type="xs:int" use="required"/> + <xs:attribute name="yhigh" type="xs:int" use="required"/> + <xs:attribute name="side" type="loc_side"/> + <xs:attribute name="ptc" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="node_timing"> + <xs:attribute name="R" type="xs:double" use="required"/> + <xs:attribute name="C" type="xs:double" use="required"/> + </xs:complexType> + + <xs:complexType name="node_segment"> + <xs:attribute name="segment_id" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="node"> + <xs:choice maxOccurs="unbounded"> + <xs:element name="loc" type="node_loc"/> + <xs:element name="timing" type="node_timing"/> + <xs:element name="segment" type="node_segment"/> + </xs:choice> + <xs:attribute name="id" type="xs:int" use="required"/> + <xs:attribute name="type" type="node_type" use="required"/> + <xs:attribute name="direction" type="node_direction"/> + <xs:attribute name="capacity" type="xs:int" use="required"/> + </xs:complexType> + + <xs:complexType name="edge"> + <xs:attribute name="src_node" type="xs:int" use="required"/> + <xs:attribute name="sink_node" type="xs:int" use="required"/> + <xs:attribute name="switch_id" type="xs:int" use="required"/> + </xs:complexType> + + <xs:element name="rr_graph"> + <xs:complexType> + <xs:choice maxOccurs="unbounded"> + <xs:element name="channels"> + <xs:complexType> + <xs:choice maxOccurs="unbounded"> + <xs:element name="channel" type="channel"/> + <xs:element name="x_list" type="x_list"/> + <xs:element name="y_list" type="y_list"/> + </xs:choice> + </xs:complexType> + </xs:element> + + <xs:element name="switches"> + <xs:complexType> + <xs:sequence> + <xs:element name="switch" type="switch" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="segments"> + <xs:complexType> + <xs:sequence> + <xs:element name="segment" type="segment" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="block_types"> + <xs:complexType> + <xs:sequence> + <xs:element name="block_type" type="block_type" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="grid"> + <xs:complexType> + <xs:sequence> + <xs:element name="grid_loc" type="grid_loc" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="rr_nodes"> + <xs:complexType> + <xs:choice maxOccurs="unbounded"> + <xs:element name="node" type="node"/> + </xs:choice> + </xs:complexType> + </xs:element> + + <xs:element name="rr_edges"> + <xs:complexType> + <xs:choice maxOccurs="unbounded"> + <xs:element name="edge" type="edge"/> + </xs:choice> + </xs:complexType> + </xs:element> + </xs:choice> + + <xs:attribute name="tool_name" type="xs:string"/> + <xs:attribute name="tool_version" type="xs:string"/> + <xs:attribute name="tool_comment" type="xs:string"/> + </xs:complexType> + </xs:element> + +</xs:schema> \ No newline at end of file