Possible cyclic dependency (see the figure above):
(1) Load tries to send the data to lazy_fork, but this path is not ready.
(2) lazy_fork tries to say the program is finished, but waits for the lsq's end (program return) channel to be ready.
(3) To let the LSQ be ready to accept the end token, it has to empty the load queue, but the load is not ready to accept the returned data, so the load queue cannot be emptied.
Thus, the circuit deadlocks.
One obvious mistake here is that the wrong fork produces the end signal (notice that the normal fork below the lazy fork only has one output.
Benchmark:
while_loop_2.c
Commit:
To reproduce the bug, use the following script:
Possible cause:
Possible cyclic dependency (see the figure above):
lazy_fork
, but this path is not ready.lazy_fork
tries to say the program is finished, but waits for the lsq'send
(program return) channel to be ready.Thus, the circuit deadlocks.
One obvious mistake here is that the wrong fork produces the end signal (notice that the normal fork below the lazy fork only has one output.