CTC: An end-to-end flow control protocol for multi-core systems-on-chip