-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Debug Network Flow Control #2
Comments
Hi Wei, you are right, the spec should be updated to include a size limitation of the debug packet. This size is the minimum size of the new Regarding the second point, packets can generally not pass their destination. If it is not ready, the ring blocks. Otherwise you run into serious deadlock problems. But this leads me to my plan to open a long term issue to discuss flow control in the debug network. I will hijack this one now :) |
As highlighted in #2 the packet cannot be arbitrary long as it has to be fully buffered before being transfered to the host.
Still not sure how the NoC can be blocked considering the NoC is distributed without backpressure? |
There is flit flow control from router to router for backpressure. All routers must be in the same clock domain. Clock domain crossing should occur in each debug module between the debugged clock domain and the debug clock domain. There can be multiple different debugged clock domains, but only one debug clock domain. Does that sound reasonable? |
For reference:
|
Yes, router to router flow control should be fine. |
Debug NetworkThe debug network is a ring with the following properties:
Host InterfaceThe host interface width is identical to the width on the debug network. Instead of the extra Packets from the HostPackets from the host go into the debug module. For the moment we can safely assume they are processed sufficiently fast. Packets from the Debug ModulesThe debug modules can produce packets at an arbitrary rate. Backpressure from the Host InterfaceThe host interface can be blocked, so that backpressure gets into the network. If the network can not further compensate with its buffers, the debug modules are accordingly blocked. Hence the debug modules should have capabilities to buffer debug packets. When one debug module overflows that means it has to raise an There are currently two strategies for overflow signals planned:
Problem: How to implement proper flow control?This leads to the issue of how to have proper flow control, namely how to avoid blockages of one debug module by another. I think there are many strategies out there. I will think about it, but maybe we can also get some real networking/NoC experts into the discussion. |
One concern has been discussed in the email with Stefan regarding the possible deadlock caused by the incapability of debug modules to ensure a packet can be fully accepted (enough space in their local buffer).
Here is another one.
The Debug Packet Datagram (DPD) used between host and physical transport has the length field in the header. However, there is no length field in debug packets.
So for the host interface, it needs to receive the whole packet to count a length and then it can send out the packet in the format of DPD.
This requires the host interface must has enough space for at least one debug packet; however, the length of a debug packet can be arbitrarily long as indicated in the spec.
Besides, let us consider the scenario that the host interface is busy and there is a long debug packet incoming for host interface. The host interface is suppose to ignore the packet (low ready) as it is busy. Then the packet will continue cycling on the NoC. The available pipeline stages in the Ring NoC is limited (the number of Ring Routers). What happens when the packet header reaches the sending Router and that router is still sending more flits? Will the header be lost or the router must stop sending flits? If the router stops sending flits, it is suppose the remember where to resume? And could other router start sending a packet see there is a gap (host interface begins to accept), but actually the the previous packet is not finished yet. One solution could be enforcing all routers to track tail flits.
The text was updated successfully, but these errors were encountered: