Wrapper entity for various fifos. The design files for the different fpgas can also be found in the cvs, as xco-configuration files for the xilinx coregen or as precompiled ngc netlists. In all cases, the trb_net16_fifo-wrapper-entity is needed for a consistent naming of the ports.
Generic: WIDTH and DEPTH.
| DATA_IN [0...WIDTH-1]
|| data is written when active
| DATA_OUT [0...WIDTH-1]
|| data is been read when active
|| The depth of the fifo hardware instance
The fifo depth is calculated by a simple formula real_depth = 2**depth. The smallest reasonable depth is 4 since the smallest shift register inside the fpga is 16 bits deep.
A special case is depth = 8, width = 18 and force_lut = 0 : This will generate a fifo located in a BlockRAM
with a depth of 1023.
DEPTH_OUT might differ from DEPTH because of hardware reasons (I might get different things from what I want, the real fifo depth might be more than desired)
The 16 bit fifo entity is a wrapper for this fifo. Like every 16 bit entity it carries the packet number. This is combined with the data and put into a 18 Bit wide fifo. As this is a special fifo version, the width is not selectable as in the
Fifo depths with respect to the network
These values for depths can be used within the network. The usable values are limited to a few values due to restrictions for the buffer size.
The size of every buffer is given by a number from 0 to 7. 0 means that no fifo is used at all; depths 1 to 3 are implemented in Lookup tables and for a buffer size of 6 a BlockRAM
is used if the width is 18 Bit (16 bit data plus 2 bit packet number). The exact sizes will be as follows:
"data bytes w/o waitstates" refers to the amount of data that can be transmitted before one has to wait for the first acknowledge of the receiving station. When using a block ram, the number of bytes that can be transmitted at full speed is not limited on the optical link, since the mean response time is in most cases smaller than 2.5 us.
Depth 7 can not be used as a generic value, but is used within the network protocol for endpoints that are always reading.
The fifo size that is used by the sender also depends on the DATA_COUNT_WIDTH generic of the OBUF.