--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <!--==============================
+ Type Definitions
+ ==============================-->
+ <xs:simpleType name="nametype">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9a-zA-Z_]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="addresstype">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9a-fA-F]{4}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="valuetype">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9a-fA-F]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="modetype">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="(r|w|rw)b?"/>
+ <!-- (r)ead and /or (w)rite, plus maybe (b)lock, if a
+ no-more-data from this registers transports some vital
+ information -->
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="purposetype">
+ <!-- config: setup some behaviour
+ trigger: register which starts some kind of operation of the hardware
+ status: shows the current status of components. E.g. temperature or the state of a state machine
+ statistics: statistical information like event counter or amount of data transferred
+ ***
+ Note: The difference between "status" and "statistics" is not sharp,
+ they both give some information about the system.
+ -->
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="config"/>
+ <xs:enumeration value="trigger"/>
+ <xs:enumeration value="status"/>
+ <xs:enumeration value="statistics"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="bittype">
+ <xs:restriction base="xs:integer">
+ <xs:minInclusive value="0"/>
+ <xs:maxInclusive value="31"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="formattype">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="raw"/>
+ <xs:enumeration value="integer"/>
+ <xs:enumeration value="signed"/>
+ <xs:enumeration value="unsigned"/>
+ <xs:enumeration value="hex"/>
+ <xs:enumeration value="bitmask"/>
+ <xs:enumeration value="boolean"/>
+ <xs:enumeration value="time"/>
+ <xs:enumeration value="string"/>
+ <xs:enumeration value="enum"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+
+ <!--==============================
+ Attribute Definition
+ ==============================-->
+ <xs:attribute name="name" type="nametype" />
+ <xs:attribute name="address" type="addresstype" />
+ <xs:attribute name="mode" type="modetype" />
+ <xs:attribute name="purpose" type="purposetype" />
+ <xs:attribute name="start" type="bittype" />
+ <xs:attribute name="size" type="xs:positiveInteger" />
+ <xs:attribute name="defaultValue" type="valuetype" />
+ <xs:attribute name="value" type="valuetype" />
+ <xs:attribute name="format" type="formattype" />
+ <xs:attribute name="continuous" type="xs:boolean" />
+ <xs:attribute name="repeat" type="xs:positiveInteger" />
+ <xs:attribute name="errorflag" type="xs:boolean" />
+ <!-- unit and scale give information about how to interpret data. a
+ numerical scaling factor and/or a physical unit. E.g.
+ temperature measured in 1/16th degrees will be ".0625" and "°C"
+ -->
+ <xs:attribute name="unit" type="xs:string" />
+ <xs:attribute name="scale" type="xs:double" />
+
+
+ <!--==============================
+ Simple Elements
+ ==============================-->
+ <xs:element name="description" type="xs:string" />
+
+ <!--==============================
+ Complex Elements
+ ==============================-->
+
+ <xs:complexType name="grouptype">
+ <xs:sequence>
+ <!-- a group does not necessarily need a description -->
+ <xs:choice minOccurs="0">
+ <xs:element ref="description"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute ref="name" use="required" />
+ <xs:attribute ref="address" />
+ <xs:attribute ref="size" />
+ <xs:attribute ref="purpose" />
+ <xs:attribute ref="continuous" />
+ <xs:attribute ref="mode" />
+ <xs:attribute ref="format" />
+ <xs:attribute ref="repeat" />
+ </xs:complexType>
+
+
+ <xs:element name="enumItem">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="value" type="valuetype" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="field">
+ <xs:complexType>
+ <xs:sequence>
+ <!-- description can be omitted if a register or alike only contains
+ one or several identical fields and the description of them can
+ be inherited from the register itself-->
+ <xs:choice minOccurs="0">
+ <xs:element ref="description"/>
+ </xs:choice>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <!-- enum items are only meaningful for format="enum"
+ fields, however we don't complain if there are some for
+ other formats... -->
+ <xs:element ref="enumItem" />
+ </xs:choice>
+ </xs:sequence>
+
+ <xs:attribute ref="name" use="required" />
+ <xs:attribute ref="start" use="required" />
+ <xs:attribute ref="size" />
+ <xs:attribute ref="purpose" />
+ <xs:attribute ref="mode" />
+ <xs:attribute ref="value" />
+ <xs:attribute ref="format" />
+ <xs:attribute ref="repeat" />
+ <xs:attribute ref="unit" />
+ <xs:attribute ref="scale" />
+ <!-- if PERL evaluates this field to true,
+ an error is indicated by this field -->
+ <xs:attribute ref="errorflag" />
+ </xs:complexType>
+ <xs:unique name="UniqueEnumItems">
+ <xs:selector xpath="enumItem" />
+ <xs:field xpath="@value" />
+ </xs:unique>
+ </xs:element>
+
+
+ <xs:complexType name="basicTrbData">
+ <xs:sequence>
+ <!-- every TrbData must be described -->
+ <xs:choice>
+ <xs:element ref="description"/>
+ </xs:choice>
+ <!-- but a data without any fields does not make sense for this
+ database, so the default minOccurs=1 is used -->
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="field" />
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute ref="name" use="required" />
+ <xs:attribute ref="address" use="required" />
+ <xs:attribute ref="mode" />
+ <xs:attribute ref="purpose" />
+ </xs:complexType>
+
+
+ <xs:element name="register">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="basicTrbData">
+ <xs:attribute ref="repeat" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="memory">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="basicTrbData">
+ <!-- size specified in 32bit long words -->
+ <xs:attribute ref="size" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="fifo">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="basicTrbData">
+ <!-- a fifo is currently not different at all from
+ basicTrbData, but we keep this complicated definition
+ for future extensions -->
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <!-- many definitions are used by TrbNetTopology.xsd as well, so
+ they are collected in a common scheme -->
+ <xs:include schemaLocation="TrbNetCommon.xsd"/>
- <!--==============================
- Type Definitions
- ==============================-->
- <xs:simpleType name="nametype">
- <xs:restriction base="xs:string">
- <xs:pattern value="[0-9a-zA-Z_]+"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="addresstype">
- <xs:restriction base="xs:string">
- <xs:pattern value="[0-9a-fA-F]{4}"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="valuetype">
- <xs:restriction base="xs:string">
- <xs:pattern value="[0-9a-fA-F]+"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="modetype">
- <xs:restriction base="xs:string">
- <xs:pattern value="(r|w|rw)b?"/>
- <!-- (r)ead and /or (w)rite, plus maybe (b)lock, if a
- no-more-data from this registers transports some vital
- information -->
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="purposetype">
- <!-- config: setup some behaviour
- trigger: register which starts some kind of operation of the hardware
- status: shows the current status of components. E.g. temperature or the state of a state machine
- statistics: statistical information like event counter or amount of data transferred
- ***
- Note: The difference between "status" and "statistics" is not sharp,
- they both give some information about the system.
- -->
- <xs:restriction base="xs:string">
- <xs:enumeration value="config"/>
- <xs:enumeration value="trigger"/>
- <xs:enumeration value="status"/>
- <xs:enumeration value="statistics"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="bittype">
- <xs:restriction base="xs:integer">
- <xs:minInclusive value="0"/>
- <xs:maxInclusive value="31"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:simpleType name="formattype">
- <xs:restriction base="xs:string">
- <xs:enumeration value="raw"/>
- <xs:enumeration value="integer"/>
- <xs:enumeration value="signed"/>
- <xs:enumeration value="unsigned"/>
- <xs:enumeration value="hex"/>
- <xs:enumeration value="bitmask"/>
- <xs:enumeration value="boolean"/>
- <xs:enumeration value="time"/>
- <xs:enumeration value="string"/>
- <xs:enumeration value="enum"/>
- </xs:restriction>
- </xs:simpleType>
-
-
- <!--==============================
- Attribute Definition
- ==============================-->
- <xs:attribute name="name" type="nametype" />
- <xs:attribute name="address" type="addresstype" />
- <xs:attribute name="mode" type="modetype" />
- <xs:attribute name="purpose" type="purposetype" />
- <xs:attribute name="start" type="bittype" />
- <xs:attribute name="size" type="xs:positiveInteger" />
- <xs:attribute name="defaultValue" type="valuetype" />
- <xs:attribute name="value" type="valuetype" />
- <xs:attribute name="format" type="formattype" />
- <xs:attribute name="continuous" type="xs:boolean" />
- <xs:attribute name="repeat" type="xs:positiveInteger" />
- <xs:attribute name="errorflag" type="xs:boolean" />
- <!-- unit and scale give information about how to interpret data. a
- numerical scaling factor and/or a physical unit. E.g.
- temperature measured in 1/16th degrees will be ".0625" and "°C"
- -->
- <xs:attribute name="unit" type="xs:string" />
- <xs:attribute name="scale" type="xs:double" />
-
-
- <!--==============================
- Simple Elements
- ==============================-->
- <xs:element name="description" type="xs:string" />
-
-
- <!--==============================
- Complex Elements
- ==============================-->
<xs:element name="TrbNetEntity">
<xs:complexType>
<xs:sequence>
<xs:attribute ref="name" use="required" />
<xs:attribute ref="address" />
</xs:complexType>
+
<!-- although requiring "entity global" unique names usually leads
- to redundant naming schemes, it hopefully makes "naming confusion"
- less likely -->
+ to redundant naming schemes, its makes minor modifications to
+ entities very easy to specify (which is desirable in setup files) -->
<xs:unique name="UniqueFieldNames">
<xs:selector xpath=".//field" />
<xs:field xpath="@name" />
<xs:selector xpath=".//register | .//memory | .//fifo" />
<xs:field xpath="@name" />
</xs:unique>
+ <xs:unique name="UniqueGroupNames">
+ <xs:selector xpath=".//group" />
+ <xs:field xpath="@name" />
+ </xs:unique>
+
<!-- consistency of addresses (and start, size of fields) is
checked more precisely programmatically -->
<xs:unique name="UniqueTrbDataAddressesInTop">
<xs:element name="group">
<xs:complexType>
- <xs:sequence>
- <!-- a group does not necessarily need a description -->
- <xs:choice minOccurs="0">
- <xs:element ref="description"/>
- </xs:choice>
- <!-- groups may consist of other groups and "TrbData" describing things -->
- <xs:choice maxOccurs="unbounded">
- <xs:element ref="group" maxOccurs="unbounded" />
- <xs:element ref="register" maxOccurs="unbounded" />
- <xs:element ref="memory" maxOccurs="unbounded" />
- <xs:element ref="fifo" maxOccurs="unbounded" />
- </xs:choice>
- </xs:sequence>
- <xs:attribute ref="name" use="required" />
- <xs:attribute ref="address" />
- <xs:attribute ref="size" />
- <xs:attribute ref="purpose" />
- <xs:attribute ref="continuous" />
- <xs:attribute ref="mode" />
- <xs:attribute ref="format" />
- <xs:attribute ref="repeat" />
+ <xs:complexContent>
+ <xs:extension base="grouptype">
+ <!-- groups in a TrbNetEntity may consist of other groups
+ and "TrbData" describing things -->
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="group" maxOccurs="unbounded" />
+ <xs:element ref="register" maxOccurs="unbounded" />
+ <xs:element ref="memory" maxOccurs="unbounded" />
+ <xs:element ref="fifo" maxOccurs="unbounded" />
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
</xs:complexType>
+ <!-- consistency of addresses (and start, size of fields) is
+ checked more precisely programmatically -->
<xs:unique name="UniqueTrbDataAddressesInGroup">
<xs:selector xpath="register | memory | fifo" />
<xs:field xpath="@address" />
</xs:unique>
- </xs:element>
-
- <xs:element name="enumItem">
- <xs:complexType>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute name="value" type="valuetype" />
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="field">
- <xs:complexType>
- <xs:sequence>
- <!-- description can be omitted if a register or alike only contains
- one or several identical fields and the description of them can
- be inherited from the register itself-->
- <xs:choice minOccurs="0">
- <xs:element ref="description"/>
- </xs:choice>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <!-- enum items are only meaningful for format="enum"
- fields, however we don't complain if there are some for
- other formats... -->
- <xs:element ref="enumItem" />
- </xs:choice>
- </xs:sequence>
-
- <xs:attribute ref="name" use="required" />
- <xs:attribute ref="start" use="required" />
- <xs:attribute ref="size" />
- <xs:attribute ref="purpose" />
- <xs:attribute ref="mode" />
- <xs:attribute ref="defaultValue" />
- <xs:attribute ref="format" />
- <xs:attribute ref="repeat" />
- <xs:attribute ref="unit" />
- <xs:attribute ref="scale" />
- <!-- if PERL evaluates this field to true,
- an error is indicated by this field -->
- <xs:attribute ref="errorflag" />
- </xs:complexType>
- <xs:unique name="UniqueEnumItems">
- <xs:selector xpath="enumItem" />
- <xs:field xpath="@value" />
- </xs:unique>
- </xs:element>
-
-
- <xs:complexType name="basicTrbData">
- <xs:sequence>
- <!-- every TrbData must be described -->
- <xs:choice>
- <xs:element ref="description"/>
- </xs:choice>
- <!-- but a data without any fields does not make sense for this
- database, so the default minOccurs=1 is used -->
- <xs:choice maxOccurs="unbounded">
- <xs:element ref="field" />
- </xs:choice>
- </xs:sequence>
- <xs:attribute ref="name" use="required" />
- <xs:attribute ref="address" use="required" />
- <xs:attribute ref="mode" />
- <xs:attribute ref="purpose" />
- </xs:complexType>
-
-
- <xs:element name="register">
- <xs:complexType>
- <xs:complexContent>
- <xs:extension base="basicTrbData">
- <xs:attribute ref="repeat" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="memory">
- <xs:complexType>
- <xs:complexContent>
- <xs:extension base="basicTrbData">
- <!-- size specified in 32bit long words -->
- <xs:attribute ref="size" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="fifo">
- <xs:complexType>
- <xs:complexContent>
- <xs:extension base="basicTrbData">
- <!-- a fifo is currently not different at all from
- basicTrbData, but we keep this complicated definition
- for future extensions -->
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
-
+ </xs:element>
</xs:schema>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:include schemaLocation="TrbNetCommon.xsd"/>
+
+</xs:schema>
address="0007" mode="rw" purpose ="config" >
<description>Wait time between write sequence and start signal.</description>
<field name="WaitBeforeStart"
- start="0" size="20" mode="rw" purpose="config" format="integer" defaultValue="0" >
+ start="0" size="20" mode="rw" purpose="config" format="integer">
<description>The number of MAPS clock cycles to wait after last write before sending the start signal. </description>
</field>
</register>
address="000c" mode="w" purpose ="trigger" >
<description>Trigger the init sequence.</description>
<field name="TriggerInitSeq"
- start="0" size="5" mode="w" purpose="trigger" format="bitmask" defaultValue="0" >
+ start="0" size="5" mode="w" purpose="trigger" format="bitmask">
<description>A bitmask to trigger the init sequence on individual JTAG chains. </description>
</field>
</register>
address="000d" mode="w" purpose ="trigger" >
<description>Trigger the init sequence.</description>
<field name="TriggerReset"
- start="0" size="5" mode="w" purpose="trigger" format="bitmask" defaultValue="0" >
+ start="0" size="5" mode="w" purpose="trigger" format="bitmask">
<description>A bitmask to trigger sending a reset pulse on individual JTAG chains </description>
</field>
</register>
address="000e" mode="w" purpose ="trigger" >
<description>Trigger sending a start pulse.</description>
<field name="TriggerStart"
- start="0" size="5" mode="w" purpose="trigger" format="bitmask" defaultValue="0" >
+ start="0" size="5" mode="w" purpose="trigger" format="bitmask">
<description>A bitmask to trigger sending a start pulse on individual JTAG chains </description>
</field>
</register>
address="000f" mode="w" purpose ="trigger" >
<description>Trigger running JTAG write.</description>
<field name="TriggerJtagRun"
- start="0" size="5" mode="w" purpose="trigger" format="bitmask" defaultValue="0" >
+ start="0" size="5" mode="w" purpose="trigger" format="bitmask">
<description>A bitmask to trigger writing the JTAG registers three times on individual JTAG chains </description>
</field>
</register>
address="0010" mode="rw" purpose="config" >
<description>Generate a reset before doing init sequence</description>
<field name="ResetBeforeInit"
- start="0" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="0" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable to send a reset pulse before starting init sequence</description>
</field>
</register>
address="0011" mode="rw" purpose="config" >
<description>Generate a reset after first register write sequence</description>
<field name="ResetAfterFirstWrite"
- start="0" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="0" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable to send a reset pulse after the first writing of JTAG registers</description>
</field>
</register>
address="0014" mode="w" purpose ="trigger" >
<description>Trigger writing all JTAG registers once</description>
<field name="TriggerWriteOnce"
- start="0" size="5" mode="w" purpose="trigger" format="bitmask" defaultValue="0" >
+ start="0" size="5" mode="w" purpose="trigger" format="bitmask">
<description>Trigger writing all JTAG registers once on individual JTAG chains</description>
</field>
</register>
address="0020" repeat="5" purpose="config" mode="rw" >
<description>Sets fixed values for all outputs for JTAG and sensor control and inverts the outputs if needed. One register for each JTAG chain.</description>
<field name="InvertTDO"
- start="0" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="0" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert TDO input signal</description>
</field>
<field name="InvertTDI"
- start="2" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="2" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert TDI output signal</description>
</field>
<field name="InvertTMS"
- start="4" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="4" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert TMS output signal</description>
</field>
<field name="InvertTCK"
- start="6" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="6" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert TCK output signal</description>
</field>
<field name="InvertStart"
- start="8" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="8" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert Start output signal</description>
</field>
<field name="InvertReset"
- start="10" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="10" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert Reset output signal</description>
</field>
<field name="InvertClock"
- start="12" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="12" size="1" mode="rw" purpose="config" format="boolean">
<description>Invert Clock output signal</description>
</field>
<field name="EnableTDO"
- start="1" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="1" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable TDO input signal</description>
</field>
<field name="EnableTDI"
- start="3" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="3" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable TDI output signal</description>
</field>
<field name="EnableTMS"
- start="5" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="5" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable TMS output signal</description>
</field>
<field name="EnableTCK"
- start="7" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="7" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable TCK output signal</description>
</field>
<field name="EnableStart"
- start="9" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="9" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable Start output signal</description>
</field>
<field name="EnableReset"
- start="11" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="11" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable Reset output signal</description>
</field>
<field name="EnableClock"
- start="13" size="1" mode="rw" purpose="config" format="boolean" defaultValue="0" >
+ start="13" size="1" mode="rw" purpose="config" format="boolean">
<description>Enable Clock output signal</description>
</field>
</register>
<field
name="WaitBeforeStart"
start="0"
- size="20"
- defaultValue="0" >
+ size="20">
<description>The number of MAPS clock cycles to wait after last write before sending the start signal. </description>
</field>
</register>