UCL Zeus Z System Test Suite - TCT


Technical Contents
What does it do?
TCT (Timing Controller Test)
This is a simple register and buffer-loop test for either an LTC or an MTC. (for details see below)
TCCC (Timing Controller Continous Copy test) NO INFO
This is a simple interrupt clearing loop for an LTC under MTC control. (Uses an MTC and an LTC in the same crate, though the MTC is not essential)
SST (Simple System Test) OBSOLETE
This is a test that uses both an MTC and an LTC in the same crate. It loads a reference pattern into the MTC dpminfo registers and produces triggers. The LTC runs under MTC control. The contents of the LTC dpminfo registers are compared with the original contents of the MTC dmpminfo registers after each trigger.
TCTA: (Timing Controller Trigger Address test) NO INFO
This test is still under development. It is intended to work in a similar manner to SST, but checking the trigger address against the BCN, assuming this has been correctly passed down from the GFLTB.
Unfortunately the only separate documentation is for TCT and is a little out of date (there is now a register loop test option to start with).
What are the loop tests?

TCT provides a choice of loop test options. In each case the ZLTC is initialised and then cycled round a given number of trigger loops, the software each time performing various checks and resets. Errors are communicated to the error-reporting process (emu_to_vax on the ROC transputer), and accumulated in counters which are displayed by TCT at the end of the loop test.

The current loop test options are: (this list is incomplete)
Buffer Cycle Loop test
In this test all "DPM valid" bits which have been set are cleared before the next trigger command is issued. After a trigger command has been issued the program waits for the "copy complete" bit to be set in the ZLTC interrupt register before clearing any set "DPM valid" bits and issuing the next trigger command.
Buffer Interrupt Loop test
This test is like the Buffer Cycle Loop test above, except that the program waits for an interrupt to be received at the ROC transputer from the ZLTC, rather than waiting for the "copy complete" bit to be set in the ZLTC interrupt register.
Buffer Full Loop test
In this test the "DPM valid" bits are NOT cleared after after each trigger. This means that when all ten DPM buffers have been used the "buffers full" bit should become set in the ZLTC Control Status register. The program checks that this bit has been set at the appropriate stage before going on to clear the "DPM valid" bits ready for another cycle round the DPM buffers.

The detailed sequence is rather complicated, and the first cycle is different from subsequent ones. On the first cycle buffers 0 to 8 are filled by the first 9 triggers. The 10th trigger initiates a copy to the 10th buffer (i.e. buffer 9), but the "DPM valid 9" bit will not be set in the ZLTC interrupt register until the "copy complete" bit is set, which won't happen whilst there are no further free buffers (this prevents the ZLTC getting a trigger when there is no free buffer to copy into). So the ZLTC_TEST program has to perform its "buffers full" check after the 10th trigger, but before the "copy complete" bit is set. This means that when the "DPM valid" bits are all cleared down after the "buffers full" check the "copy complete" bit will become set and the "DPM valid 9" bit will be set for the 10th buffer. Consequently the next cycle will start with only 9 free buffers instead of the 10 that were free for the first cycle. Thus the "buffers full" check will now have to be performed after the 9th subsequent trigger. Again, when the "DPM valid" bits have been cleared down after the check, there will be an outstanding copy to complete and the associated "DPM valid" bit will get set. The buffer number of this bit will steadily decrease with each cycle over the buffers (wrapping back to 9 after it has reached 0), but the number of free buffers at the beginning of each cycle will stay at 9 for every cycle after the first (for which there are 10 free buffers).

What do the errors mean?

Several different types of error are checked for in the transputer process "test.ltc". On the occurrence of an error a message is sent to the process "emu.to.vax" and the appropriate error counter is incremented inside "test.ltc". At the end of the chosen test, "test.ltc" sends all the error counters to ZLTC_TEST as a block, where they are then output (to LUN 6).

The current counter offsets in the error-counter block are as follows:
[00] E.ERROR ......... UNCATEGORISED ERROR
any error number greater than the highest known error number is logged in this counter.

[01] E.BC.NOSAME ..... BUFFER COUNT DIFFERENT FROM "LAST" VALUE
the buffer count is checked after the trigger command has been given, but before the "event" has been validated: the buffer count should be unchanged.

[02] E.IR.NOSAME ..... INTERRUPT REGISTER DIFFERENT FROM "LAST" VALUE
the interrupt register is checked after the trigger command has been given, but before the "event" has been validated: the interrupt register should be unchanged.

[03] E.BC.NONEXT ..... BUFFER COUNT DIFFERENT FROM "NEXT" VALUE
the buffer count is checked after the trigger command bit has been cleared, i.e. after the "event" has been validated: the buffer count should have incremented (cyclically).

[04] E.IR.NONEXT ..... INTERRUPT REGISTER DIFFERENT FROM "NEXT" VALUE
the interrupt register is checked after the trigger command bit has been cleared, i.e. after the "event" has been validated: the next (cylic) interrupt bit should be set.

[05] E.BW.NOSET ...... ZLTC NOT IN "WAIT FOR BUFFER" STATE (WHEN IT SHOULD BE)
in the buffers full loop test, the ZLTC should have the "wait for buffer" bit set in the current state register when all the buffers have been used, but before the "DPM valid" bits have been cleared.

[06] E.BW.SET ........ ZLTC IN "WAIT FOR BUFFER" STATE (WHEN IT SHOULD NOT BE)
in the "buffers full" loop test, the ZLTC should have the "wait for buffer" bit cleared in the current state register once the "DPM valid" bits have been cleared.

[07] E.INT.TIMEOUT ... NO INTERRUPT RECEIVED WITHIN PROGRAMMED INTERVAL
in the buffer interrupt loop test, the test.ltc program waits for an interrupt from the ZLTC rather than polling the "copy complete" flag in the ZLTC interrupt register. The interrupt should normally already be set by the time it is waited for, since it will have taken some time to execute the several Occam instructions that comprise the checking code that follows the setting of the trigger command bit. To make sure, the timeout interval is set to one transputer "tick" (approx. 64 microseconds) which should allow plenty of time for a normal length event to be copied.

[08] E.BAD.COPYLEN ... END COPY ADDRESS DIFFERENT FROM EXPECTED VALUE
the expected end copy address can always be calculated since the trigger address, copy length, and pipeline length are all known.

[09] E.BAD.REG ....... REGISTER DOES NOT CONTAIN EXPECTED PATTERN
the register tests write various patterns to the ZLTC registers and check that they have been written successfully.

A Diagram of ZLTC_TEST process interaction:
  +++++++++++                                               +++++++++++
  + LUN 6   +<--.                                       .-->+ LUN 6   +
  +++++++++++   |                                       |   +++++++++++
                |                                       |   +++++++++++
                |                                       |-->+ LUN 10  +
                |                                       |   +++++++++++
                |                                       |
    ************************                 ************************
    *                      *                 *                      *
    *   LTC_TEST           *                 *    EMU_FROM_ROC      *
    *                      *                 *                      *
    ************************                 ************************
                    ^  |  |                    ^  |  |
                    |  |  |                    |  |  |
               *****************************************  
               *    |  |  |                    |  |  | *   +++++++++++++
               *    |  |  .--------------------|--|--.-*-->+ debug LUN +
               *    |  |                       |  |    *   +++++++++++++
               *    |  |  HARNESS (VAX)        |  |    *               
               *****************************************
                    |  |                       |  |
  VAX               |  |                       |  |
  ................. :..:.......................:..:.....................
  ROC transputer    |  |                       |  |
                    |  |                       |  |
               *****************************************
               *    |  |                       |  |    *
               *    |  |                       |  |    *
               *    |  |  HARNESS (transputer) |  |    *
               *****************************************
                    |  |                       |  |
                    |  v                       |  v
    ************************                 ************************
    *                      *                 *                      *
    *    test.ltc          * --------------->*   emu.to.vax         *
    *                      *  error messages *                      *
    ************************                 ************************
Key:
      *******             ++++++                           | ^
      *     * = process   +    + = output LUN/window   --> | | = data flows
      *******             ++++++                           v |