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

Media direction port

(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


PIN Name Description
0 res not yet used


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

Entity Name Description
TrbNetIBUF INITIBUF Input buffer for the init path
TrbNetIBUF REPLYIBUF Input buffer for the reply path
TrbNetOBUF INITOBUF Output buffer for the init path
TrbNetOBUF REPLYOBUF Output buffer for the reply path

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
Topic revision: r12 - 2008-03-25, JanMichel
Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki Send feedback | Imprint | Privacy Policy (in German)