]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
TDC.xml added (validates!), some minor improvements
authorAndreas Neiser <neiser@kph.uni-mainz.de>
Sat, 29 Jun 2013 16:46:11 +0000 (18:46 +0200)
committerAndreas Neiser <neiser@kph.uni-mainz.de>
Sat, 29 Jun 2013 17:28:42 +0000 (19:28 +0200)
xml-db/database/TDC.xml
xml-db/database/TrbNetEntity.xsd
xml-db/xml-db.pl

index 8c75609cf9bfb042fb819f7857d30be9db8fcc2b..20708010166687ed6d737612e90cce6ef39c0dea 100644 (file)
 <?xml version="1.0"  encoding="utf-8" ?>
 <TrbNetEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="TrbNetEntity.xsd"
-        name="TDC"
-        address="c000"
-        >
+              xsi:noNamespaceSchemaLocation="TrbNetEntity.xsd"
+              name="TDC"
+              address="c000"
+              >
   <description>An FPGA-based tapped-delay line time-to-digital converter (TDC)</description>
   <!--===========================================-->
-  <!-- Common TDC Status registers             -->
+  <!-- TDC Status registers (mostly statistics)  -->
   <!--===========================================-->
-  <group name="Status" purpose="config" address="0200"  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>       
+
+  <group name="Status" purpose="statistics" address="0100"  mode="r" continuous="true">
+    <register name="Basic" address="0000" purpose="status">
+      <field name="ReadoutFSM" start="0"   size="4" format="enum" purpose="status">
+        <description>Debug word of the TDC readout FSM</description>
         <enumItem value="1">IDLE</enumItem>
-        <enumItem value="2">IDLE</enumItem>
+        <enumItem value="2">WAIT_FOR_TRG_WIND_END</enumItem>
+        <enumItem value="3">RD_CH</enumItem>
+        <enumItem value="4">WAIT_FOR_LVL1_TRG_A</enumItem>
+        <enumItem value="5">WAIT_FOR_LVL1_TRG_B</enumItem>
+        <enumItem value="6">WAIT_FOR_LVL1_TRG_C</enumItem>
+        <enumItem value="7">SEND_STATUS</enumItem>
+        <enumItem value="8">SEND_TRG_RELEASE_A</enumItem>
+        <enumItem value="9">SEND_TRG_RELEASE_B</enumItem>
+        <enumItem value="F">OTHERS</enumItem>
       </field>
-      
-    </register>
-  </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>       
+      <field name="WriteoutFSM" start="4"   size="4" format="enum">
+        <description>Debug word of the TDC writeout 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"
-             start="0"   size="32"  mode="w"  purpose="trigger"  format="bitmask"  defaultValue="0" >
-        <description>Empty signals (hits?) of channels</description>
-      </field>
-    </register>
-    <register name="TriggerReset"
-              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" >
-        <description>A bitmask to trigger sending a reset pulse on individual JTAG chains </description>
-      </field>
-    </register>
-    <register name="TriggerStart"
-              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" >
-        <description>A bitmask to trigger sending a start pulse on individual JTAG chains </description>
-      </field>
-    </register>
-    <register name="TriggerJtagRun"
-              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" >
-        <description>A bitmask to trigger writing the JTAG registers three times on individual JTAG chains </description>
-      </field>
-    </register>
-    <register name="ResetBeforeInit"
-              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" >
-        <description>Enable to send a reset pulse before starting init sequence</description>
-      </field>
-    </register>
-    <register name="ResetAfterFirstWrite"
-              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" >
-        <description>Enable to send a reset pulse after the first writing of JTAG registers</description>
-      </field>
-    </register>
-    <register name="TriggerWriteOnce"
-              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" >
-        <description>Trigger writing all JTAG registers once on individual JTAG chains</description>
-      </field>
-    </register>
-    <group name="JtagOverride"
-           address="0020"  size="5"  purpose="config"  mode="rw"  continuous="true">
-      <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>
-      <register name="JtagOverride"
-                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" >
-          <description>Invert TDO input signal</description>
-        </field>      
-        <field name="InvertTDI"
-               start="2"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Invert TDI output signal</description>
-        </field>
-        <field name="InvertTMS"
-               start="4"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Invert TMS output signal</description>
-        </field>
-        <field name="InvertTCK"
-               start="6"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Invert TCK output signal</description>
-        </field>
-        <field name="InvertStart"
-               start="8"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Invert Start output signal</description>
-        </field>
-        <field name="InvertReset"
-               start="10"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Invert Reset output signal</description>
-        </field>
-        <field name="InvertClock"
-               start="12"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Invert Clock output signal</description>
-        </field>
-        <field name="EnableTDO"
-               start="1"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable TDO input signal</description>
-        </field>      
-        <field name="EnableTDI"
-               start="3"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable TDI output signal</description>
-        </field>
-        <field name="EnableTMS"
-               start="5"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable TMS output signal</description>
-        </field>
-        <field name="EnableTCK"
-               start="7"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable TCK output signal</description>
-        </field>
-        <field name="EnableStart"
-               start="9"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable Start output signal</description>
-        </field>
-        <field name="EnableReset"
-               start="11"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable Reset output signal</description>
-        </field>
-        <field name="EnableClock"
-               start="13"   size="1"  mode="rw"  purpose="config"  format="boolean"  defaultValue="0" >
-          <description>Enable Clock output signal</description>
-        </field>
-      </register>
-    </group>
+        <enumItem value="2">WR_CH</enumItem>
+        <enumItem value="F">OTHERS</enumItem>
+      </field>
+      <field name="ChannelCount" start="8" size="8" format="unsigned">
+        <description>Number of implemented channels</description>
+      </field>
+      <field name="RefTimeSyncedTo100" start="16" format="boolean">
+        <description>Reference time synchronised to 100 MHz Trb-Net
+        clock</description>
+      </field>
+      <field name="TriggerType" start="28" size="4" format="boolean" mode="rw" purpose="config">
+        <description>Trigger type</description>
+      </field>
+    </register>
+
+    <memory name="EmptyChannels" address="0001" size="2" mode="w" purpose="trigger">
+      <field name="Mask" start="0" size="64" format="bitmask">
+        <description>Empty the signals/hits of the specific channel.
+        LSB is channel 1.</description>
+      </field>
+    </memory>
+
+    <register name="TriggerWindow" address="0003" purpose="status">
+      <field name="Before" start="0" size="11" format="time">
+        <description>Trigger window width BEFORE the trigger with
+        granularity of 5 ns</description>
+        <granularity>5</granularity>
+      </field>
+      <field name="After" start="16" size="11" format="time">
+        <description>Trigger window width AFTER the trigger with
+        granularity of 5 ns</description>
+        <granularity>5</granularity>
+      </field>
+      <field name="Enable" start="31" format="boolean">
+        <description>Trigger window enabled?</description>
+      </field>
+    </register>
+
+    <register name="Trigger" address="0004">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of valid triggers received</description>
+      </field>
+    </register>
+
+    <register name="TimingTrigger" address="0005">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of valid timing triggers
+        received</description>
+      </field>
+    </register>
+
+    <register name="NoTimingTrigger" address="0006">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of valid triggers received which are not
+        timing triggers</description>
+      </field>
+    </register>
+
+    <register name="InvalidTrigger" address="0007">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of invalid triggers received</description>
+      </field>
+    </register>
+
+    <register name="MultiTimingTrigger" address="0008">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of multi timing triggers received
+        (triggers received before trigger is released)</description>
+      </field>
+    </register>
+
+    <register name="SpuriousTrigger" address="0009">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of spurious triggers received (in case of
+        timing trigger is validated although it was a
+        timing-trigger-less trigger)</description>
+      </field>
+    </register>
+
+    <register name="WrongReadouts" address="000a">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of wrong readouts due to spurious triggers</description>
+      </field>
+    </register>
+
+    <register name="Spikes" address="000b">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of spikes (pulses narrower than 40 ns)
+        detected at the timing trigger input</description>
+      </field>
+    </register>
+
+    <register name="Idle" address="000c">
+      <field name="Time" start="0" size="24" format="time">
+        <description>Total time length, that the readout FSM waited in
+        the idle state (with granularity of 10 ns)</description>
+        <granularity>10</granularity>
+      </field>
+    </register>
+    
+    <register name="Wait" address="000d">
+      <field name="Time" start="0" size="24" format="time">
+        <description>Total time length, that the readout FSM waited in
+        the wait states (with granularity of 10 ns)</description>
+        <granularity>10</granularity>
+      </field>
+    </register>
+
+    <register name="TotalEmptyChannels" address="000e">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Total number of empty channels since the last reset
+        signal</description>
+      </field>
+    </register>
+
+    <register name="Release" address="000f">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of release signals sent</description>
+      </field>
+    </register>
+
+    <register name="Readout" address="0010">
+      <field name="Time" start="0" size="24" format="time">
+        <description>Total time length of the readout process 
+        (with granularity of 10 ns)</description>
+        <granularity>10</granularity>
+      </field>
+    </register>
+
+    <register name="Timeout" address="0011">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of timeouts detected (too long delay after
+        the timing trigger)</description>
+      </field>
+    </register>
+
+    <register name="Finished" address="0012">
+      <field name="Counter" start="0" size="24" format="unsigned">
+        <description>Number of sent finished signals</description>
+      </field>
+    </register>
+    
   </group>
+  
   <!--===========================================-->
-  <!--JTAG Status registers for each chain       -->
+  <!-- TDC control registers                     -->
   <!--===========================================-->
-  <group name="JtagStatus"
-         address="1800"  size="40"  purpose="status"  mode="r"  continuous="true">
-    <group name="JtagStatusChain"
-           address="0000"  size="8"  repeat="5"  purpose="status"  mode="r"  continuous="true">
-      <register  name="JtagErrorCount1"
-                address="0002" purpose="status" mode="r" >
-        <field name="ErrorsReadId"
-               start="0"   size="16"  mode="r"  purpose="status"  format="integer" >
-          <description>Number of read errors during "read id" operation</description>
-        </field>
-        <field name="ErrorsWrite"
-               start="16"   size="16"  mode="r"  purpose="status"  format="integer" >
-          <description>Number of read errors during write operation</description>
-        </field>
-      </register>
-      <register  name="JtagErrorCount2"
-                address="0003" purpose="status" mode="r" >
-        <field name="ErrorsDataChanged"
-               start="0"   size="16"  mode="r"  purpose="status"  format="integer" >
-          <description>Number of times data read back from the sensor was not identical to the data written to the sensor.</description>
-        </field>
-        <field name="ErrorsSampling"
-               start="16"   size="16"  mode="r"  purpose="status"  format="integer" >
-          <description>Number of sampling errors of TDI signal. The signal from the sensor is sampled three times for each bit, all occurrences must be equal.</description>
-        </field>
-      </register>
-      <register  name="JtagRunCounter"
-                address="0004" purpose="status" mode="r" >
-        <field name="JtagRunCounter"
-               start="0"   size="32"  mode="r"  purpose="status"  format="integer" >
-          <description>Number of times the JTAG controller run a full sequence</description>
-        </field>
-      </register>
-      <register  name="JtagStatusFlags"
-                address="0005" purpose="status" mode="r" >
-        <field name="JtagStarted"
-               start="0"   size="1"  mode="r"  purpose="status"  format="boolean" >
-          <description>JTAG has been started</description>
-        </field>
-        <field name="JtagLastSuccesful"
-               start="4"   size="1"  mode="r"  purpose="status"  format="boolean" >
-          <description>Last JTAG run was successful</description>
-        </field>
-        <field name="JtagLastDataChanged"
-               start="8"   size="1"  mode="r"  purpose="status"  format="boolean" >
-          <description>Data in the sensor was corrupted at last JTAG run</description>
-        </field>
-        <field name="JtagLastWriteError"
-               start="12"   size="1"  mode="r"  purpose="status"  format="boolean" >
-          <description>Last run had a JTAG write error</description>
-        </field>
-        <field name="JtagLastReadError"
-               start="16"   size="1"  mode="r"  purpose="status"  format="boolean" >
-          <description>Last run had a JTAG read error</description>
-        </field>
-        <field name="JtagCrcError"
-               start="20"   size="1"  mode="r"  purpose="status"  format="boolean" >
-          <description>Last run had a JTAG CRC error</description>
-        </field>
-      </register>
-    </group>
+  <group name="Control"
+         address="0800" purpose="config"  mode="rw"  continuous="true">
+    <register name="Basic" address="0000">
+      <field name="DebugOutput" start="0" size="4" format="enum">
+        <description>Enables different signals to the HPLA* output for
+        debugging with logic analyser</description>
+      </field>
+      <field name="DebugMode" start="4" format="boolean">
+        <description>Enables the Debug Mode. Different statistics and
+        debug words are sent after every trigger</description>
+      </field>
+      <field name="ResetCounters" start="8" purpose="trigger" mode="w">
+        <description>Resets the internal counters</description>
+      </field>
+      <field name="TriggerMode" start="0" size="12" format="enum">
+        <description>Select the trigger mode: With trigger mode or
+        trigger-less mode</description>
+        <enumItem value="0">TRIGGERED</enumItem>
+        <enumItem value="1">TRIGGERLESS</enumItem>
+      </field>
+    </register>
+
+    <register name="TriggerWindow" address="0001">
+      <field name="Before" start="0" size="11" format="time">
+        <description>Trigger window width BEFORE the trigger with
+        granularity of 5 ns</description>
+        <granularity>5</granularity>
+      </field>
+      <field name="After" start="16" size="11" format="time">
+        <description>Trigger window width AFTER the trigger with
+        granularity of 5 ns. ATTENTION: Minimum value is x"00f"!</description>
+        <granularity>5</granularity>
+      </field>
+      <field name="Enable" start="31" format="boolean">
+        <description>Trigger window enable</description>
+      </field>
+    </register>
+
+    <memory name="Channel" address="0002" size="2">
+      <field name="Enable" start="0" size="64" format="bitmask">
+        <description>Enable signals/hits of the specific channel.
+        LSB is channel 1.</description>
+      </field>
+    </memory>
+
+    <register name="DataTransferLimit" address="0004">
+      <field name="MaxWords" start="0" size="8" format="unsigned">
+        <description>Defines number of data words per channel to be
+        read-out. Set it to 0x80 for full readout.</description>
+      </field>
+    </register>
+
   </group>
 </TrbNetEntity>
-
index 9fa33411f5d5faaaf100ea693d414faca03a0e0a..e1aff468c0be6424a7a998b6c4995d42b8f5c9f1 100644 (file)
@@ -94,6 +94,7 @@
       Simple Elements
       ==============================-->
   <xs:element name="description" type="xs:string" />
+  <xs:element name="granularity" type="xs:double" />
 
 
   <!--==============================
                other formats... -->
           <xs:element   ref="enumItem" />
         </xs:choice>
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+          <!-- granularity is only meaningful for format="time"
+               fields, however we don't complain if there are some for
+               other formats... -->
+          <xs:element ref="granularity" />
+        </xs:choice>
       </xs:sequence>
 
       <xs:attribute ref="name" use="required" />
-      <xs:attribute ref="start" />
+      <xs:attribute ref="start" use="required" />
       <xs:attribute ref="size" />
       <xs:attribute ref="purpose" />
       <xs:attribute ref="mode" />
     <xs:complexType>
       <xs:complexContent>
         <xs:extension base="basicTrbData">
+          <!-- size specified in 32bit long words -->
           <xs:attribute ref="size" />
         </xs:extension>
       </xs:complexContent>
index 4860e3cd63ea2d4a8052c88412935e5dcaf3d995..fe3858afe397d2e164024698cb782df835e35886 100755 (executable)
@@ -54,21 +54,22 @@ sub DoSomethingWithDb($) {
   # get the iterator for the document root.
   #my $iter = XML::LibXML::Iterator->new( $doc->documentElement );
 
-  # walk through the document, we select all groups which
-  # have some registers, since those share the same base name
-  # and base address
-  foreach my $groupNode ($doc->findnodes('//group[register]')) {
+  my $entityName = $doc->getDocumentElement->getAttribute('name');
+  my $entityAddr = hex($doc->getDocumentElement->getAttribute('address'));
+
+  # walk through the document, we select all groups
+  foreach my $groupNode ($doc->findnodes('//group')) {
     # determine base name (concatenated by /)
     # and base address (just add all previous offsets)
-    my $baseaddress = 0;
-    my $basename = '';
+    my $baseaddress = $entityAddr;
+    my $basename = $entityName;
     foreach my $anc ($groupNode->findnodes('ancestor-or-self::group')) {
       $baseaddress += hex($anc->getAttribute('address'));
       $basename .= '/'.$anc->getAttribute('name');
     }
 
     # now iterate over all children
-    foreach my $curNode ($groupNode->findnodes('register')) {
+    foreach my $curNode ($groupNode->findnodes('register | memory | fifo')) {
       #print $curNode->nodeName,"\t",$curNode->nodePath,"\n";
       my $name = $basename.'/'.$curNode->getAttribute('name');
       my $address = $baseaddress+hex($curNode->getAttribute('address'));
@@ -76,7 +77,7 @@ sub DoSomethingWithDb($) {
       foreach my $field ($curNode->findnodes('field')) {
         printf("%04x:%02d:%02d %s/%s\n", $address,
               $field->getAttribute('start'),
-              $field->getAttribute('size'),
+              $field->getAttribute('size') || 1,
               $name, $field->getAttribute('name'));
         #print $field->getAttribute('errorflag'),"\n";
       }