At the moment, the code does not check the RX request path when sending packets. This means that request packets from the tiles can back-pressure into the network.
If enough request packets are sent to the host, and the host is sending data, the host will eventually be stopped by the network backpressure too!
Obviously there's a deadlock issue here.
This was solved in the bigblade_endpoint_fifos_refactor branch, but that specific C++ never got merged.
What I did was add a software fifo for rx packets. TX calls a method to check for rx packets, and if it finds them, inserts them into the software fifo.
At the moment, the code does not check the RX request path when sending packets. This means that request packets from the tiles can back-pressure into the network.
If enough request packets are sent to the host, and the host is sending data, the host will eventually be stopped by the network backpressure too!
Obviously there's a deadlock issue here.
This was solved in the bigblade_endpoint_fifos_refactor branch, but that specific C++ never got merged.
bsg_replicant/libraries/platforms/dpi-verilator/bsg_manycore_platform.cpp
Line 71 in 108ddb6
What I did was add a software fifo for rx packets. TX calls a method to check for rx packets, and if it finds them, inserts them into the software fifo.