|
|
The testbench described in this page provides means for verification of
|
|
|
the proper operation and different configurations of the WR Streamers.
|
|
|
It is configured to run as part of [Continuous Integration (CI)
|
|
|
tests](https://builds.cern.ch/browse/WR-WRPCHDL3) which is done by
|
|
|
tests](https://ohwr.org/project/wr-cores/pipelines) which is done by
|
|
|
including the run\_ci.do file inside the testbench directory, and
|
|
|
including the path to the testbench as a single line in the
|
|
|
`wr_cores/testbench/makefile`.
|
... | ... | @@ -16,7 +16,7 @@ Figure 1 below shows a diagram describing the structure of the |
|
|
testbench:
|
|
|
|
|
|
[![](/uploads/c08094333c870ac85d04e80fdff1ec96/wr_streamers-TB-small.png)](/uploads/d3eb9a9e872fb0679c2eb726246e081a/wr_streamers-TB.png)
|
|
|
*Figure 1 - Diagram of simulation testbench for WR Tx and Rx
|
|
|
**Figure 1 - Diagram of simulation testbench for WR Tx and Rx
|
|
|
streamers**
|
|
|
|
|
|
The testbench operates by generating stimulus in the form of data words
|
... | ... | @@ -25,19 +25,15 @@ simulation: |
|
|
|
|
|
- **Data monitoring**: These tests check that the output from the Rx
|
|
|
streamer corresponds to the transmitter input data (Stored in a
|
|
|
SystemVerilog transfer queue).
|
|
|
This test is continuous and runs everytime a new block is received.
|
|
|
|
|
|
<!-- end list -->
|
|
|
|
|
|
SystemVerilog transfer queue). This test is continuous and runs everytime a new block is received.
|
|
|
- **Functional Tests**: The remaining tests are run by the testbench
|
|
|
sequentially, one after the other, to check for specific features in
|
|
|
the Tx or Rx streamer.
|
|
|
|
|
|
*The testbench fails if any single one of these tests fails, monitoring
|
|
|
**The testbench fails if any single one of these tests fails, monitoring
|
|
|
or functional.**
|
|
|
|
|
|
*Note:** The testbench focuses on creating specific input conditions to
|
|
|
**Note:** The testbench focuses on creating specific input conditions to
|
|
|
check for particular features or use cases of the streamers.
|
|
|
Nonethelesss, the testbench makes use of some randomisation in terms of
|
|
|
the number of words per block and the number of blocks per frame. So
|
... | ... | @@ -55,7 +51,7 @@ To run the testbench follow the instructions on installing hdlmake |
|
|
(stable version 2.1). In the command line, from the `wr-cores` folder:
|
|
|
|
|
|
$ cd testbench/wr_streamers/streamers_multi_test
|
|
|
$ hdlmake
|
|
|
$ hdlmake makefile
|
|
|
$ make
|
|
|
|
|
|
Once the build is complete, the simulation can be run either in
|
... | ... | @@ -102,7 +98,7 @@ received. |
|
|
|
|
|
## Simulation output and results
|
|
|
|
|
|
### Functional tests for tx-streamer:
|
|
|
### Functional tests for Tx-streamer:
|
|
|
|
|
|
Figure 2 and 3 depict tests 1-4 that are described below.
|
|
|
|
... | ... | @@ -122,11 +118,11 @@ Figure 2 and 3 depict tests 1-4 that are described below. |
|
|
frames).
|
|
|
|
|
|
[![](/uploads/7056ff6269d5ddbaf884610b2065118b/wr_streamers-tx-sim-small.png)](/uploads/0e389f5328d6ffe2a872690297e30b7b/wr_streamers-tx-sim.png)
|
|
|
*Figure 2 - Simulation run showing Tx streamer operation for frame
|
|
|
**Figure 2 - Simulation run showing Tx streamer operation for frame
|
|
|
transmission**
|
|
|
|
|
|
[![](/uploads/60cd630fdd268d87318da3979d6641fa/wr_streamers-tx-max_wrds-small.png)](/uploads/952645caacd321ecb9d5d1d93245f33f/wr_streamers-tx-max_wrds.png)
|
|
|
*Figure 3 - Simulation output showing Tx streamer sending multiple
|
|
|
**Figure 3 - Simulation output showing Tx streamer sending multiple
|
|
|
frames when the number of words per frame is exceeded**
|
|
|
|
|
|
### Functional tests for Rx-streamer:
|
... | ... | @@ -137,10 +133,9 @@ Figure 4 depicts test 5 and Figure 5 depicts test 6 as described below. |
|
|
`cfg_fixed_latency_i` is not set to zero then the Rx does not ouput
|
|
|
the contents of the frame until the fixed latency has ellapsed. See
|
|
|
figure
|
|
|
4.
|
|
|
|
|
|
[![](/uploads/c0d09260dd16f77c49bdd4a6d17318d0/wr_streamers-rx-fxd_lat-small.png)](/uploads/45c334f9276a07698d0e8e983ef63cb0/wr_streamers-rx-fxd_lat.png)
|
|
|
*Figure 4 - Simulation run showing fixed latency check test for Rx
|
|
|
**Figure 4 - Simulation run showing fixed latency check test for Rx
|
|
|
streamer**
|
|
|
|
|
|
- **Test 6**: Check that when frames are lost (purposefully dropped in
|
... | ... | @@ -148,15 +143,14 @@ streamer** |
|
|
signalled on the ouput port (`rx_lost_p1_o` and
|
|
|
`rx_lost_frames_p1_o`) and that the output count
|
|
|
(`rx_lost_frames_cnt_o`) is also correct. See figure
|
|
|
5.
|
|
|
|
|
|
[![](/uploads/c48ab3689c08423d0d09fbeddb747ace/wr_streamers-rx-drp_frm-small.png)](/uploads/7b8dee396adfb9ea25ff5062c95c39d4/wr_streamers-rx-drp_frm.png)
|
|
|
*Figure 5 - Simulation run showing how lost frames are signalled at Rx
|
|
|
**Figure 5 - Simulation run showing how lost frames are signalled at Rx
|
|
|
streamer**
|
|
|
|
|
|
-----
|
|
|
|
|
|
26 September 2017
|
|
|
12 May 2020
|
|
|
|
|
|
|
|
|
|
... | ... | |