-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Delay flush by one cycle #762
base: master
Are you sure you want to change the base?
Conversation
Benchmarks summaryPerformance benchmarks
You can view all the metrics here. Synthesis benchmarks (basic)
Synthesis benchmarks (full)
|
# Condition is used to avoid FRAT locking during normal operation | ||
with condition(m) as cond: | ||
with cond(commit): | ||
retire_instr(rob_entry) | ||
with cond(): | ||
# Not using default condition, because we want to block if branch is not ready | ||
flush_instr(rob_entry) | ||
|
||
m.d.comb += core_flushing.eq(1) | ||
with m.If(commit): | ||
retire_instr(rob_entry) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not valid - when instruction is an exception with commit=0
(like synchronous exceptions),
RF is not freed (and not pushed to Free RF), but instruction is retired from ROB, and TRAP_FLUSH would flush next instruction.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed, you're right - this was not thought out enough. Still, this means we have a blind spot in tests for this.
This PR simplifies retirement by delaying the start of flushing. This eliminates one use of
condition
and makes theflushing
signal registered. Looking at benchmarks:is not significantly impactedsomehow didn't change at all.