name="TDC"
address="c000"
>
- <description>An FPGA-based tapped-delay line TDC</description>
+ <description>An FPGA-based tapped-delay line time-to-digital converter (TDC)</description>
<!--===========================================-->
<!-- Common TDC Status registers -->
<!--===========================================-->
- <group name="Status" purpose="config" address="0100" mode="rw" continuous="true">
+ <group name="Status" purpose="config" address="0200" mode="r" continuous="true">
<register name="Basic"
- address="0000" mode="rw">
- <description>Basic controls</description>
+ address="0000">
<field name="FSMReadout"
start="0" size="20" mode="rw" purpose="config" format="enum" defaultValue="0" >
<description>Debug word of the TDC readout FSM</description>
- <enumItem value="a">bla</enumItem>
+ <enumItem value="1">IDLE</enumItem>
+ <enumItem value="2">IDLE</enumItem>
</field>
</register>
- <register name="TriggerInitSeq"
+ </group>
+ <group name="Status" purpose="config" address="0100" mode="r" continuous="true">
+ <register name="Basic"
+ address="0000">
+ <field name="FSMReadout"
+ start="0" size="20" mode="rw" purpose="config" format="enum" defaultValue="0" >
+ <description>Debug word of the TDC readout FSM</description>
+ <enumItem value="1">IDLE</enumItem>
+ <enumItem value="2">IDLE</enumItem>
+ </field>
+
+ </register>
+ <register name="Bla"
address="0001" mode="w" purpose ="trigger" repeat="2">
<description>Trig</description>
<field name="TriggerInitSeq"
<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 -->
+ <!-- we require that all data is grouped -->
<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:choice minOccurs="0">
<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 -->
+ <!-- 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:attribute ref="format" />
<xs:attribute ref="repeat" />
</xs:complexType>
+ <xs:unique name="UniqueTrbDataNames">
+ <xs:selector xpath="register | memory | fifo" />
+ <xs:field xpath="@name" />
+ </xs:unique>
+ <xs:unique name="UniqueTrbDataAddresses">
+ <xs:selector xpath="register | memory | fifo" />
+ <xs:field xpath="@address" />
+ </xs:unique>
</xs:element>
<xs:element name="enumItem">
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>
# and base address (just add all previous offsets)
my $baseaddress = 0;
my $basename = '';
- foreach my $anc ($groupNode->findnodes('ancestor::group | .')) {
+ foreach my $anc ($groupNode->findnodes('ancestor-or-self::group')) {
$baseaddress += hex($anc->getAttribute('address'));
$basename .= '/'.$anc->getAttribute('name');
}