-
Notifications
You must be signed in to change notification settings - Fork 681
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
[tracegen] Add tracegen support for the BOOM L1D #362
Conversation
cd363eb
to
febc28a
Compare
f6ebd08
to
ed1728d
Compare
2f36021
to
4284736
Compare
I split up the shim logic into its own module, and split up the mixins for instantiating the BOOM tracegen. |
Backport from #362 h/t @jerryz123
4284736
to
2a2f81c
Compare
Backport from #362 h/t @jerryz123
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.
There's some weirdness with queue handling here. Otherwise, I'm satisfied.
|
||
when (io.tracegen.req.fire()) { | ||
rob_tail := WrapInc(rob_tail, rob_sz) | ||
rob_bsy(rob_tail) := true.B |
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.
Aren't rob_head and rob_tail backwards here? Entries are placed into a circular buffer at the head and taken out at the tail.
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 follow's BOOM's ROB naming scheme.
io.tracegen.req.ready := (!rob_bsy(rob_tail) && | ||
!rob_wait_till_empty && | ||
(ready_for_amo || !(isAMO(io.tracegen.req.bits.cmd) || io.tracegen.req.bits.cmd === M_XLR || io.tracegen.req.bits.cmd === M_XSC)) && | ||
(WrapInc(rob_tail, rob_sz) =/= rob_head) && |
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 always leaves one entry in the ROB empty. Take a look at Chisel's queue implementation to see how you can detect full queues properly.
Take a look at this part of the Chisel codebase to see how to detect queue empty/full correctly. |
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.
I'll relent on the queue handling for now.
2a2f81c
to
9668996
Compare
9668996
to
abc5e30
Compare
Depends on #358 's BOOM bump