Ver I: Hand Shaking Router
Two years ago, I started designing a router for a Network on Chip infrastructure. The work belonged to a project called Bonfire (you can find the link to the project here). Anyways, we had this router designed by one of my colleagues but it didn’t have any flow-control. So I wrote this one.
The entire design is available in this github repository. So the idea was to have a handshaking between the routers. It takes 3 cycles to communicate each flit over the network:
- cycle 1: sender puts data on the link and sets a valid signal
- cycle 2: receiver (if it has empty buffer) will read the data and sets the ACK signal towards the sender
- cycle 3: sender reads ACK and lowers the valid signal.
If you think that this is a horrible idea for high-performance communication, I should say that i totally agree with you. But since our group is focused on dependability and hardware testing, we didn’t care (later on I made a credit based version. I will write about that in future posts).
Later we added a bunch of online-checkers to this router and made a chip out of one channel of the router. To this day, we still need to test the chip.
P.S. We have in our agenda a so called “clean-up plan” for the project and its repositories. however, it doesn’t apply to this version of the router since its obsolete.