Bar
SpaceWire UK
Specialist providers of VHDL Intellectual Property & Design Services
BarBarBarBar
SpaceWire CODEC Transmit FIFO Testbench
The testbench for the SpaceWire CODEC Transmit FIFO is built up using the standard testbench modules, PGive, PTake and PSnoop.

An illustration of how the testbench modules are connected together to form the Transmit FIFO Testbench is given below:-

FCT Input Report FCT Input Stimulus Data Output Stimulus Data Output Report Data Input Stimulus Data Input Report SpaceWire CODEC Transmit FIFO SpaceWire PSnoop Testbench Module SpaceWire PGive Testbench Module SpaceWire PTake Testbench Module SpaceWire PSnoop Testbench Module SpaceWire PGive Testbench Module SpaceWire PSnoop Testbench Module
SpaceWire CODEC Transmit FIFO Testbench
Interactive block diagram - click on area of interest to find out more.

The FIFO has three handshake interfaces that are all controlled via stimulus files input to the PGive and PTake testbench modules. By adjusting the content of these files an almost infinite amount of operating scenarios can be created. In addition to the stimulus files the testbench can also change the state input, thus allowing the FIFO's operation to be validated in every SpaceWire state.

Also provided within the testbench is a self-checking mechanism that checks the following points:- There are 11 sets of tests used to validate the functionality of the SpaceWire CODEC Transmit FIFO, these are detailed below.



Test 1 (0us to 1us) - Error Reset state with empty FIFO
This test is used to check that during the Error Reset state the empty Transmit FIFO does absolutely nothing other that discard all the incoming data, i.e:- The test is set-up such that:- The Data In handshake signal should show frequent handshakes thoughout the test, but the Data Out and FCT In handshakes should remain negated.



Test 2 (1us to 2us) - Error Wait state with empty FIFO
This test is used to check exactly the same as Test 1 but for the Error Wait state.



Test 3 (2us to 3us) - Ready state with empty FIFO
This test is used to check exactly the same as Test 1 but for the Ready state.



Test 4 (3us to 4us) - Started state with empty FIFO
This test is used to check exactly the same as Test 1 but for the Started state.



Test 5 (4us to 5us) - Connecting state with empty FIFO
This test is used to check that during the Connecting state the empty Transmit FIFO does absolutely nothing other than input FCT's and discard all the incoming data, i.e:- The test is set-up such that:- The Data In handshake signal should show frequent handshakes throughout the test, but the Data Out handshake should remain negated. The FCT In handshake signal should show 7 handshakes taking place.



Test 6 (5us to 6us) - Run state with empty FIFO
This test is used to check that during the Run state the empty Transmit FIFO operates fully, i.e:- The test is set-up such that:- The three handshake signals should show frequent handshakes taking place throughout the test. The main point to check with this test is that for every FCT input to the FIFO eight NChar's are output from it.

Note initially how the Data Out handshake remains negated, this is because the FIFO is discarding the rest of a packet that it started discarding during the last state (test).



Test 7 (6us to 7us) - Run state with FIFO filling faster that it is emptying
This test is used to check that during the Run state the FIFO can handle being constantly full and nearly full, i.e:- The test is set-up such that:- All three handshake signals should show frequent handshakes throughout the test, with the Data Out handshake pattern closely following the Data In handshake pattern.



Test 8 (7us to 8us) - Run state with FIFO emptying faster that it is filling
This test is used to check that during the Run state the FIFO can handle being constantly empty and nearly empty, i.e:- The test is set-up such that:- All three handshake signals should show frequent handshakes throughout the test, with the Data Out handshake pattern closely following the Data In handshake pattern.



Test 9 (8us to 9us) - Run state changing to Error Reset state
This test is used to check that during a state change from Run to Error Reset the FIFO correctly stops outputting data, i.e:- The test is set-up such that:- All three handshake signals should show frequent handshakes until the state changes to Error Reset, after this only the Data In handshake should show transfers with the other two showing none.



Test 10 (9us to 10us) - Error Reset state changing to Run state
This test is used to check that during a state change from Error Reset to Run the FIFO correctly starts outputting new packets, i.e:- The test is set-up such that:- The Data Out and FCT In handshake signals should remain negated until the state changes to Run, after this they should show frequent handshakes. The Data In handshake signal should show frequent handshakes thoughout the test.



Test 12 (10us to 100ms) - Total Chaos!
This test is used to try and break the FIFO design by operating it in totally random states, with input Data that has random gaps between the transfers, output Data that has random gaps between the transfers and also FCT's that have random gaps between the transfers, i.e:- The test is set-up such that:- The three handshake signals should show frequent handshakes taking place throughout the test. The main thing to check with this test is that the Transmit FIFO swallows packets when in a non-Run state. This swallowing also extends into the Run state if a packet started to be swallowed in another state.

If any of the three handshake signals stop before the full 50,000 NChar's go into the FIFO (100ms second of simulation time) then the FIFO is behaving incorrectly. Likewise if the self-checking testbench reports an error to the simulator window then the FIFO is also behaving incorrectly.

Note that this test produces many illegal states and also state transitions that would never occur during normal CODEC operation.