You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If an APU-offloaded instruction finishes before the previous instruction, it is re-dispatched until the previous instruction is completed. For example, consider the following core snippet:
flw fa1, 0(a0)
fmv.w.x fa2,zero
If the load instruction takes longer to complete than the move instruction, the fp move instruction is dispatched again as soon as it finished until the load completes, leading to unnecessary offload requests. The result of the APU instruction is written back into the register file every time it completes. The source for this is that the ID stage keeps the apu_en_ex signal high until after the previous instruction is completed. The APU dispatcher interprets this as a new request and attempts to offload it again.
I assume the intended bahavior should be that the result of the APU instruction is stored in apu_rvalid_q / apu_result_q after completing the first time until it can be written back into the register file and the apu_valid is de-asserted, as it is currently done for other stall sources.