Overview
The
TrbNetIOBUF is the basic element which controls the connection between the media layer (after de-multiplexing of the individual channels) and the Fan-Out and concentrator of a hub. It consists of two
TrbNetIBUF and two
TrbNetOBUF
Signal description
(similar as described in
NewTriggerBusMedia)
Line |
Decription |
MED_DATAREADY_OUT |
Data word ready to be read out by the media |
MED_DATA_OUT[0...15] |
Data word |
MED_PACKET_NUM_OUT[0..1] |
Packet number |
MED_READ_IN |
Media is reading |
MED_ERROR_OUT[0..2] |
Status bits |
MED_DATAREADY_IN |
Data word is offered by the Media (the IOBUF MUST read) |
MED_DATA_IN[0...15] |
Data word |
MED_PACKET_NUM_IN[0..1] |
Packet number |
MED_READ_OUT |
buffer reads a word from media |
MED_ERROR_IN[0..2] |
Status bits |
Internal direction port
Line |
Decription |
INT_DATAREADY_OUT |
Data word ready to be read out by the Concentrator |
INT_DATA_OUT[0...15] |
Data word |
INT_PACKET_NUM_OUT[0..1] |
Packet number |
INT_READ_IN |
Concentrator is reading |
INT_ERROR_OUT[0..2] |
Status bits |
INT_DATAREADY_IN |
Data word is offered by the Fan-Out |
INT_DATA_IN[0...15] |
Data word |
INT_PACKET_NUM_IN[0..1] |
Packet number |
INT_READ_OUT |
buffer reads a word from Fan-Out |
INT_ERROR_IN[0..2] |
Status bits |
Status and control port
Line |
Decription |
STAT_GEN[0...31] |
General Status |
STAT_LOCKED[0...31] |
Status of the locking mechanism |
STAT_INIT_BUFFER[0...31] |
Status of the handshake and buffer control |
STAT_REPLY_BUFFER[0...31] |
Status of the handshake and buffer control |
CTRL_GEN[0...31] |
General Status |
CTRL_LOCKED[0...31] |
Status of the locking mechanism |
STAT_CTRL_INIT_BUFFER[0...31] |
Status of the handshake and buffer control - reserved, pull to 0 |
STAT_CTRL_REPLY_BUFFER[0...31] |
Status of the handshake and buffer control - reserved, pull to 0 |
Status bits are output, CTRL bits are input
STAT_GEN
STAT_INIT_BUFFER and STAT_REPLY_BUFFER
PIN |
Name |
Description |
0-3 |
SEND_BUFFER_SIZE_OUT |
Buffer size of this IBUF |
4-7 |
REC_BUFFER_SIZE_OUT |
Buffer size of the other IBUF (on the other side of the optical link) |
8 |
GOT_EOB_OUT |
EOB/TRM is killed (and thus the complete buffer) in this clock cycle |
9 |
GOT_ACK_OUT |
Got an ACK from the other side |
10 |
GOT_OVERFLOW_ERROR |
fifo has been filled although full |
11 |
GOT_LOCKED_ERROR |
fifo has been filled while in locked mode |
14-15 |
TRANSMITTED_BUFFERS |
Transmitted buffers without ACK |
16-31 |
CURRENT_DATA_COUNT |
Transmitted data words in current buffer |
Internal components
Functional description
Handshake and buffer control
The second important feature is that no single data word should ever be lost in the system in normal operation. This means that a sender (the OBUF) has to
know how deep the IBUF of the receiver is.
The minimum buffer depth for any operation is 4. This is devided into 2 buffers, with 2 words (one word plus one EOB). This does not mean
that these are the ideal conditions. It is simply the default operation. It can be increased, and the inceased value of the receiver will be stored by the IBUF (REC_BUFFER_SIZE_OUT). The own value is SEND_BUFFER_SIZE_OUT (= hardcoded from a generic value)
Sender operation I
The OBUF is counting the words which have been read out by the media. If the count is matching the REC_BUFFER_SIZE_IN, the OBUF will not read a word from the Fan-Out, but form a word by its own (EOB). Value of transmitted buffers will be increased. If this value is 2, not data will be further transmitted.
Receiver operation I
If the actual data of the IBUF word which could be read out by the Concentrator is an EOB, this will not be forwarded to the Concentrator. INT_DATAREADY_OUT will stay low.
The EOB is processed by the IBUF itself (= killed in one clock cycle). The GOT_EOB signal will stay high for one clock cycle. The same happens with a TRM (which is an intrinsic EOB)
Sender operation II
If the OBUF is getting the SEND_ACK signal (connected to GOT_EOB), this will be registered if the ACK cannot be transmitted in the same clock cycle.
With the ACK word, the depth of the own buffer (SEND_BUFFER_SIZE_IN) will be transmitted.
Receiver operation II
If the receiver is getting the ACK signal, the GOT_ACK signal will go high for one cycle, the REC_BUFFER_SIZE_OUT will be updated.
Sender operation III
If GOT_ACK is high, the value of transmitted buffers will be decreased
--
IngoFroehlich - 18 Aug 2006