aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/annotations/PresetAnnotations.scala
diff options
context:
space:
mode:
authorJohn's Brew2020-03-13 02:35:10 +0100
committerGitHub2020-03-12 18:35:10 -0700
commit5c0c0018d812d57270035a9d3bd82e2289acf4ec (patch)
tree3e9c319c0e98566b42540a5f31d043d5d0287c17 /src/main/scala/firrtl/annotations/PresetAnnotations.scala
parent7e8d21e7f5fe3469eada53e6a6c60e38c134c403 (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.scala33
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
+}
+
+
+