Skip to content

APU keeps re-despatching the same instruction while previous instruction is not completed #1039

@LucaRufer

Description

@LucaRufer

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.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions