-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
Define ResetCrossingType and use with BlockDuringReset in TilePRCIDomain #2641
Conversation
c13ae5f
to
b4a5fd7
Compare
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 think the reset treatment matches what we discussed.
src/main/scala/tile/BaseTile.scala
Outdated
/** Node for external consumers to source a legacy instruction trace from the core. */ | ||
val traceNode: BundleBridgeOutwardNode[Vec[TracedInstruction]] = | ||
BundleBridgeNameNode("trace") :*= traceNexusNode := traceSourceNode | ||
BundleBridgeNameNode("trace") := traceSourceNode |
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.
So this moves traceNexusNode
to the PRCI layer so it can be blocked during reset. There's some technical debt to apply the same treatment to traceCoreNexusNode
(below). This bundle doesn't have a valid signal. Either we will have to add a valid
to TraceCoreInterface
(bending the definition of this interface from the RISC-V Trace Spec) or add another form of BlockDuringReset
specifically for this (which would zero out iretire
and itype
).
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.
Thanks for the feedback, I was wondering a bit about whether that bundle needed to be blocked too. There's almost certainly a way to have each Bundle subclass define it's own blockMe
function (name TBD) that returns a copy of itself but with certain signals tied low. You still have to make one NexusNode per type of bundle bridge, but it's at least very generic code to ensure that the blocking occurs in a type-specific way.
cb9f2ec
to
91d57cf
Compare
91d57cf
to
7349383
Compare
fb94e1c
to
2acb5e2
Compare
2acb5e2
to
10bf48a
Compare
10bf48a
to
5c6d174
Compare
This PR combines and merges the effects of #2618 and #2623 while also partially reverting #2611. The overall goals are:
RocketTile
, instead, move all logic requiring raw reset into theTilePRCIWrapper
ResetSchemes
(when aResetStretcher
is injected) and then they need to maintain the blockage for the duration of any stretched reset.TileResetDomain
is added to manage diplomatic control of the Tile'sreset
input. All other clock crossing logic inTilePRCIDomain
goes back to being on the raw subsystem reset (but still on the tile clock domain).TileResetDomain
is inlined by firrtl to prevent further disruption to the module hierarchy.ResetCrossingType
is defined to be analogous toClockCrossingType
, the two defined reset crossing types are currentlyNoResetCrossing
andStretchedResetCrossing(cycles: Int)
CrossingHelper
functionality for TL and Interrupts are extended to also deal withResetCrossingType
StretchedResetCrossing
they will injectBlockDuringReset
logic in the scope where the helper is invoked; in this specific case, that scope isTilePRCIDomain
, ensuring the logic gets the raw reset.@aswaterman, @ernie-sifive can you double check that my changes to the actual
BlockDuringReset
logics look kosher?Type of change: other enhancement
Impact: API modification
Development Phase: implementation
Release Notes