Fix rvfi_bus_imem_check issue in #44 #46
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.
When a 32-bit instruction is fetched over the course of two bus accesses, and the first half of the instruction is the halfword-of-interest, the check assumes the fetch of the first halfword doesn't fault. However it still permits faults on the second halfword. When this happens, the core takes a trap and clears the entire instruction reported on rvfi_insn. This does not match the expected halfword-of-interest so fails the check.
Fix by also preventing faults on imem_addr + 2 if imem_data is the first half of a 32-bit instruction. Note that imem_data can always be assumed to be the first half of an instruction as the assertions only fire when pc is equal to imem_addr.
The
bus_imemcheck fails on Hazard3 without this change, and passes with it (depth=12). See discussion on #44