To ensure deadlock-freedom a dataflow design needs to be buffered. In a simple language, it means data has to have available registers to move into, otherwise it would get stuck and cause the predecessor data tokens to pause/stall as well. This may raise a deadlock when the data tokens are stuck within a finite loop! which would never let the tokens to move; we technically call this situation a "deadlock" and needs the circuit to restart which may cause data loss!
To ensure deadlock-freedom a dataflow design needs to be buffered. In a simple language, it means data has to have available registers to move into, otherwise it would get stuck and cause the predecessor data tokens to pause/stall as well. This may raise a deadlock when the data tokens are stuck within a finite loop! which would never let the tokens to move; we technically call this situation a "deadlock" and needs the circuit to restart which may cause data loss!