Improvements to chipyard clocking #1489
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Localizes all the clock devices to prci_ctrl_domain, and adds a xbar for all the clock control devices.
This should improve physical design of clock/reset devices, since it all is under a single module hierarchically with fewer IO
Fixes TLClockDivider behavior.
Previously, if the divisor register somehow misses the reset pulse, it would set the DividerOrPass to a bad state that could initialize the system to a very slow clock. This would never happen in a physical implementation.
However, in RTL simulations where the power-reset sequence is not totally simulated, only a
negedge reset
might be evaluated with noposedge reset
. Since the AsyncResetRegs are sensitive toposedge reset or posedge clock
, and theasyncReset
may deassert before a clock arrives at the TLBus, that register might never be reset in simulation.This fix overall makes the system more robust, it forces the DivideOrPass to output the undivided clock until the TL bus clock is alive, and the TL bus reset is deasserted, regardless of the value of the divisor register. The divisor register is now reset by the TL bus reset as well, which guarantees that it would be reset properly under any RTL simulation, as the TL bus reset should be deasserted after the TL bus clock is alive.
Fixes divisor synchronization
The divisor register is clocked to the TL bus clock, but it needs to be synchronized to the clock it is dividing (which may not be the same). The testchipip bump fixes this.
Explicitly use RawModules
Blocks which produce clocks/reset/sync-issues should not use implicit clock/reset, it is too confusing. The ClockDivideOrPass is now a RawModule.
Related PRs / Issues:
Type of change:
Impact:
Contributor Checklist:
main
as the base branch?changelog:<topic>
label?changelog:
label?.conda-lock.yml
file if you updated the conda requirements file?Please Backport
?