Allow modules to globally enable layers #3799
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.
Add a function that allows the layer to be "enabled" within the current module scope. This has the effect of emitting the module with the "enablelayer " FIRRTL format. This is not currently in the FIRRTL spec---it is being prototyped inside CIRCT and is expected to land in the spec soon.
This is done to allow for the use case of a Test Harness needing to enable one or more layers (more than one layer is the union of several layers) inside a DUT in order to drive it properly. The specific use case is to get access to an expensive core trace inside a microprocessor that is hidden behind a layer.
This was originally written using an API where the layer provided a trait that enabled the layer. This runs afoul of Scala's restriction on inheriting the same trait multiple times.
FYI: @rwy7