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.

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 (via the TrbNetIOMultiplexer)
MED_DATA_OUT[0...51] Data word
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...51] Data word
MED_READ_OUT buffer reads a word from media
MED_ERROR_IN[0..2] Status bits

Internal direction port

Line Decription
INT_HEADER_IN Concentrator kindly asks to resend the last header
INT_DATAREADY_OUT Data word ready to be read out by the Concentrator
INT_DATA_OUT[0...51] Data word
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...51] Data word
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 INIT_IS_LOCKED The IBUF of the init path is locked
1 REPLY_IS_LOCKED The IBUF of the reply path is locked


PIN Name Description
0 REMOVE_INIT_IS_LOCKED The IBUF of the init path will be cleared
1 REMOVE_REPLY_IS_LOCKED The IBUF of the reply path will be cleared


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

Locking of channels

The locking of channels is one of the basic features of the NewTriggerBus. It replaces the old wired-or-techique of the old trigger bus. The logic for this is done here.

When the INITOBUF receives an TRM word, the TrbNetIOBUF goes into the "locked" state. This means, the TrbNetIOBUF will not forward any data to the media. The MED_DATAREADY_OUT will be always FALSE (=0) in this case.

The TrbNetIOBUF will go back into the release state, if the REPLYIBUF has been read out and the last dataword was is a TRM

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
Edit | Attach | Print version | History: r12 | r10 < r9 < r8 < r7 | Backlinks | View wiki text | Edit WikiText | More topic actions...
Topic revision: r9 - 19 Jan 2007, IngoFroehlich
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Hades Wiki? Send feedback
Imprint (in German)
Privacy Policy (in German)