-
Notifications
You must be signed in to change notification settings - Fork 175
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
Implement missing CXXRTL features #531
Comments
Most of the blockers are done. Only the memory write issue remains. |
An IRC discussion with @awygle confirmed my suspicion that race-free concurrent operations on memories are not something that has a lot of value, and given the significant amount of effort and complexity required to support them, it makes sense to not provide them at all. As a consequence, memory reads or writes from testbenches can only be, in general, safely done while the design is held in reset. In some specific cases, concurrent reads/writes from a testbench are possible while the design is running, but requires case-by-case evaluation for hazards. |
It would be nice if there was a way to detect if concurrent operations on memories are occurring and force an error (maybe a |
The thought of a "RTL TSAN" crossed my mind, but I do not expect to have time to work on it in foreseeable future. |
Integrating CXXSim requires a number of improvements to the Yosys CXXRTL backend that have to be done upstream.
Remaining tasks
See also #324 for nMigen-side view of these tasks.
Blockers (to be completed pre-merge)
reset
method. (cxxrtl: provide a way to perform unobtrusive power-on reset YosysHQ/yosys#2466) Although it is always possible to destroy and recreate the entire simulation, this has two downsides:-DNDEBUG
, since-DNDEBUG
would also disable assertions of CXXRTL API contracts, and most if not all CXXRTL embedders do not want the generated code toabort()
. (cxxrtl: use CXXRTL_ASSERT for RTL contract violations instead of assert YosysHQ/yosys#2468)Non-blockers (may be completed post-merge)
$print
and$assert
(& its related cells) that translate to console output and RTL assertions respectively.$print
and$assert
(& its related cells) that queue these events for consumption through the C API. (Add support for Print in simulation #432, Add support for Assert in simulation #427)The text was updated successfully, but these errors were encountered: