Repository navigation
Conversation
ibex_icache_stress_all_with_reset sometimes fails NoReqInReset. To reset in the middle of a test, the combo sequence kills the running sequence and lowers req. The driver still runs the item it was working on, and that item can raise req again just before reset. Let reset_ifs() tell the driver to stop that item and clear the control signals. Clear them again once the item has stopped, because the item may have driven them later in the same time step. Signed-off-by: Kulan Palanichamy <kulan.palanichamy@opentitan.org>
|
This looks correct: cancelling the driver’s active transaction addresses the reset race. I also ran 50 VCS seeds of |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
ibex_icache_stress_all_with_resetfails on master on about 2 % of random seeds:The checker is right. The testbench leaves
reqhigh when reset is asserted.To reset in the middle of a test, the combo sequence kills the running sequence and calls
reset_ifs()to lowerreq. The next sequence then applies reset. Killing a sequence does not stop the item the core driver is workingon. That item can raise
reqagain afterreset_ifs()has lowered it.Now
reset_ifs()triggers an event instead. The driver runs each item next to a process that waitsfor that event. When the event comes, the driver stops the item with
disable forkand clears the control signals.The event and the item's last drive can happen at the same simulation time, in either order. So the driver clears
the signals when the event fires and again once the item has stopped.
Lowering only
reqcould leavereadyhigh. That violatesNoReadyWithoutReq. The protocol checker is unchanged.I tested with dvsim on VCS with the default icache bench parameters. On 300 random seeds, 7 fail on master and none
on this branch. The change alters the driver's random draws, so a seed gives different stimulus on each.
A local tree that forces the item to drive after the first clear fails without the second clear and passes with it.
Every icache test also passes on 20 seeds. I have not run Xcelium.
Unrelated to this change, a few seeds fail
TagHitKnownon master. I have not found the cause yet.Dependencies: none.
AI disclosure (CLA §9): written with help from Claude Code and reviewed with OpenAI Codex; I have reviewed and understood every change and take full responsibility for it.