diff options
| author | John's Brew | 2020-03-13 02:35:10 +0100 |
|---|---|---|
| committer | GitHub | 2020-03-12 18:35:10 -0700 |
| commit | 5c0c0018d812d57270035a9d3bd82e2289acf4ec (patch) | |
| tree | 3e9c319c0e98566b42540a5f31d043d5d0287c17 /src/main/scala/firrtl/annotations/PresetAnnotations.scala | |
| parent | 7e8d21e7f5fe3469eada53e6a6c60e38c134c403 (diff) | |
Add Support for FPGA Bitstream Preset-registers (#1050)
Introduce Preset Register Specialized Emission
- Introduce EmissionOption trait
- Introduce PresetAnnotation & PresetRegAnnotation
- Enable the collection of Annotations in the Emitter
- Introduce collection mechanism for EmissionOptions in the Emitter
- Add PropagatePresetAnnotation transform to annotate register for emission and clean-up the useless reset tree (no DCE involved)
- Add corresponding tests spec and tester
Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'src/main/scala/firrtl/annotations/PresetAnnotations.scala')
| -rw-r--r-- | src/main/scala/firrtl/annotations/PresetAnnotations.scala | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/annotations/PresetAnnotations.scala b/src/main/scala/firrtl/annotations/PresetAnnotations.scala new file mode 100644 index 00000000..727417c1 --- /dev/null +++ b/src/main/scala/firrtl/annotations/PresetAnnotations.scala @@ -0,0 +1,33 @@ +// See LICENSE for license details. + +package firrtl +package annotations + +/** + * Transform all registers connected to the targeted AsyncReset tree into bitstream preset registers + * Impacts all registers connected to any child (cross module) of the target AsyncReset + * + * @param target ReferenceTarget to an AsyncReset + */ +case class PresetAnnotation(target: ReferenceTarget) + extends SingleTargetAnnotation[ReferenceTarget] with firrtl.transforms.DontTouchAllTargets { + override def duplicate(n: ReferenceTarget) = this.copy(target = n) +} + + +/** + * Transform the targeted asynchronously-reset Reg into a bitstream preset Reg + * Used internally to annotate all registers associated to an AsyncReset tree + * + * @param target ReferenceTarget to a Reg + */ +private[firrtl] case class PresetRegAnnotation( + target: ReferenceTarget +) extends SingleTargetAnnotation[ReferenceTarget] with RegisterEmissionOption { + def duplicate(n: ReferenceTarget) = this.copy(target = n) + override def useInitAsPreset = true + override def disableRandomization = true +} + + + |
