-
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
Support for Multiple Reset Schemes (for some parts of the codebase) #2375
Conversation
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 looks good to me.
13a73f7
to
fd171ba
Compare
This is failing because fesvr writes dmactive =1, then immediately tries to do another operation and gets an error response. This is due to the synchronization on dmActiveAck which adds a delay before the blocker is released. Another rocket-tools bump to fesvr 😭 ? or other ideas @ernie-sifive ? |
@ernie-sifive I filed FESVR issue (riscv-software-src/riscv-isa-sim#435) and added a workaround. But I am confused why the dmactiveAck needs to be synchronized in the testbench anyway. Isn't it already synchronized here: |
@mwachs5 dmactive is generated in dmi_clock domain, get synced to clock in the testbench (where dmactiveAck is used to control the clock gate), then dmactiveAck returns to dmOuter where it is synced back to dmi_clock. If you remove the sync to clock then won't the clock gate misbehave? Ah, I see this workaround is only for simulation... |
@@ -198,7 +199,7 @@ class LazyRawModuleImp(val wrapper: LazyModule) extends RawModule with LazyModul | |||
// It is recommended to drive these even if you manually shove most of your children | |||
// Otherwise, anonymous children (Monitors for example) will not be clocked | |||
val childClock = Wire(Clock()) | |||
val childReset = Wire(Bool()) | |||
val childReset = Wire(Reset()) |
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.
FYI @hcook
Am going to do a cleanup rebase now |
c27108b
to
773d4fb
Compare
Add IO() required by chisel3 Revert chisel3 to Chisel for now
… chisel3 reset type
…g assigned to Bool
Review comments
…th no clock edges to avoid violating tile link protocol. Also use chiselName to give predictable naming within withClockAndReset blocks
Arbiter: fix parenthesis Arbiter more typo fixes arbiter. srsly don't try to write actual code throug github GUI interface
bumping to have proper fesvr handling
773d4fb
to
7f31ae4
Compare
closing to reopen because travis seems borked |
Currently this PR includes parts of #2205, which I would like to be merged first and then I will rebase this on top of that(note, this has been done).This PR will be rebased often before merging if necessary and commit history will be cleaned up.(this has also been done)This PR includes/replaces #2237 and #2217
Related issue:
Type of change: feature request
Impact: API modification
Development Phase: implementation
Release Notes
Adds support for multiple reset schemes for much of the code base (some parts of the code base would still need to be converted to chisel3 or use the
DefaultCompileOptions.NonStrictInferReset
capability to infer resets, as previously this code base only allowed Bool resets. Notably, async reset of the Rocket Core/Tile is not supported.Important changes to note:
Adds parameterization scheme for reset types (
SubsystemResetSchemeKey
)Adds LazyModulewithClock
,withClockAndReset
,withReset
Changes significantly the exported I/Os for debug related logic
Removes internal synchronization logic for debug reset-- this must be done externally now
More detailed release notes from #2237:
This PR converts the debug module to the new Configurable Reset Scheme using chisel3 abstract reset.
debug_clock must be synchronous to clock. The clock gate formerly in dmInnerAsync now resides outside the debug module in customer logic. User logic can call connectDebugClockAndReset to achieve the same functionality as before, in a different level of the hierarchy.