[chiselsim] Unified peek/poke/expect API for all Data types, include Records and Vecs #4824
+533
−81
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.
This PR changes the "testable" implicit classes in
PeekPokeAPI
to allow for a unifiedpeek()
,poke()
, andexpect
API for all data types, including Records, Vecs, Enums, and nested aggregates.This unified API would be very helpful when developing higher-level test abstractions, such as enqueue/deque over clocked Decoupled interfaces.
This is a step towards adding some useful features and ergonomic APIs similar to those provided by
chiseltest
(#4209 included a rough PoC for integrating some of these features).The code does not look very pretty, but I could not figure out a cleaner way to make it work. Also, there is some repeated code.
I'd greatly appreciate comments and ideas for an alternative approach or other improvements.
Note: The previous (existing) implementation of
expect[T]()
seems incorrect. In addition to mistakingly using the same type name,T
for the different method type parameter, the comparison uses object equality (!=
).For the implemented
Element
values, the observed value is tuned into a Chisel object using theencode()
method. Since the objects are not the same, the comparison would always fail, even when the value is expected. Seems the previous tests did not cover this, but using the tests in this PR, I get false failures with the previousexpect
+encode
:Contributor Checklist
docs/src
?Type of Improvement
Feature
Desired Merge Strategy
Release Notes
Reviewer Checklist (only modified by reviewer)
3.6.x
,5.x
, or6.x
depending on impact, API modification or big change:7.0
)?Enable auto-merge (squash)
and clean up the commit message.Create a merge commit
.