Answer each question out loud before opening it. If you miss more than three in the checkpoint, revisit the lessons linked at the end.
Ready would reach the sender ten cycles late, so up to a round trip of words would arrive after the receiver filled. Every stage would need a skid buffer. Credits let the sender know in advance how much room there is, with the buffer concentrated at the receiver.
The receiver advertises its free slots as credits. The sender spends one per word and stops at zero; the receiver returns one each time a slot frees. The sender can never overflow the receiver. For full rate the receiver needs at least bandwidth × credit round trip of buffer.
RTT = 6 + 6 + 2 = 14 cycles, so at least 14 flits.
Credits at the sender + words in flight + words in the buffer + credits returning = the buffer size, every cycle.
A credit leak, often a send and a credit return in the same cycle with only one applied. Assert conservation every cycle; in silicon, compare the idle credit count with the limit.
On/off is simpler and needs headroom of about bandwidth × round trip above the off threshold, so it wastes buffer and can oscillate; credits are exact. On/off suits links where buffers are cheap or a stop must override everything (PAUSE); credits suit long or high-rate links.
So one class filling its buffers cannot stop another. A shared pool lets requests consume all credits and block the responses that would free them, which can deadlock.
H(r + L) against Hr + L: store-and-forward pays the packet's serialisation at every hop, cut-through once.
Task. A chip-to-chip link carries requests and responses at one 32-byte flit per cycle. The wire takes 12 cycles each way; each end adds 2 cycles. Responses must never be blocked by requests. Bit errors are possible. Design the flow control: mechanisms, classes and sizes.
Credits, because the stop arrives far too late for ready: RTT = 12 + 12 + 2 + 2 = 28 cycles. Two classes with separate pools, requests and responses, so requests can never consume the credits responses need; each pool needs at least 28 flits (896 bytes) for its class to reach full rate alone. Bit errors need a reliability layer: sequence numbers, a CRC per packet, a replay buffer and a window of at least bandwidth × ACK round trip, also about 28 flits plus the ACK's own delays. Credits return as running totals so a corrupted credit update is repaired by the next. Assert credit conservation per class in simulation, and check idle credit counts in silicon.
A sender overrunning a receiver's buffer.
When its credit count reaches zero.
Too high and the sender can overflow the receiver; too low and throughput is wasted for ever. It is set by an initialisation exchange after reset.
At least RTT + K − 1.
Data sent but not yet acknowledged; acknowledgements free it.
S + RT = 10 + 20 = 30.
No buffer overflows; it does not stop a slow endpoint's back-pressure from blocking unrelated traffic in shared buffers.
Full buffers make their upstreams wait; a cycle of waits never drains. Lossy networks drop instead, breaking the cycle.
Head-of-line blocking: about 58.6% throughput.
How late the stop arrives; whether data can be lost; whether the resource is shared with protected traffic; whether the path is multi-hop.