summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorgrebe2016-12-15 01:47:26 -0500
committerGitHub2016-12-15 01:47:26 -0500
commitd622b43bd03b8f17fe9a11d41d8dd0865989c0c5 (patch)
tree09c58614b14d0e7fc7ca752ff17d1bbd6a39ebb9 /src/test
parentf9d528b3763429275430b84839ccf0b4570531a2 (diff)
parent59a7c25d5c708305216532ec49c8120e59219f69 (diff)
Merge branch 'master' into fixedPointFromBits
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/chiselTests/AnnotatingDiamondSpec.scala1
-rw-r--r--src/test/scala/chiselTests/AnnotationNoDedup.scala78
2 files changed, 78 insertions, 1 deletions
diff --git a/src/test/scala/chiselTests/AnnotatingDiamondSpec.scala b/src/test/scala/chiselTests/AnnotatingDiamondSpec.scala
index 3886ddd6..ff9f8e67 100644
--- a/src/test/scala/chiselTests/AnnotatingDiamondSpec.scala
+++ b/src/test/scala/chiselTests/AnnotatingDiamondSpec.scala
@@ -32,7 +32,6 @@ class IdentityTransform extends Transform {
getMyAnnotations(state) match {
case Nil => state
case myAnnotations =>
- /* Do something useful with annotations here */
state
}
}
diff --git a/src/test/scala/chiselTests/AnnotationNoDedup.scala b/src/test/scala/chiselTests/AnnotationNoDedup.scala
new file mode 100644
index 00000000..024b5a7a
--- /dev/null
+++ b/src/test/scala/chiselTests/AnnotationNoDedup.scala
@@ -0,0 +1,78 @@
+// See LICENSE for license details.
+
+package chiselTests
+
+import chisel3._
+import firrtl.FirrtlExecutionSuccess
+import firrtl.transforms.DedupModules
+import org.scalatest.{FreeSpec, Matchers}
+
+trait NoDedupAnnotator {
+ self: Module =>
+
+ def doNotDedup(module: Module): Unit = {
+ annotate(ChiselAnnotation(module, classOf[DedupModules], "nodedup!"))
+ }
+}
+
+class MuchUsedModule extends Module {
+ val io = IO(new Bundle {
+ val in = Input(UInt(16.W))
+ val out = Output(UInt(16.W))
+ })
+ io.out := io.in +% 1.U
+}
+
+class UsesMuchUsedModule(addAnnos: Boolean) extends Module with NoDedupAnnotator{
+ val io = IO(new Bundle {
+ val in = Input(UInt(16.W))
+ val out = Output(UInt(16.W))
+ })
+
+ val mod0 = Module(new MuchUsedModule)
+ val mod1 = Module(new MuchUsedModule)
+ val mod2 = Module(new MuchUsedModule)
+ val mod3 = Module(new MuchUsedModule)
+
+ mod0.io.in := io.in
+ mod1.io.in := mod0.io.out
+ mod2.io.in := mod1.io.out
+ mod3.io.in := mod2.io.out
+ io.out := mod3.io.out
+
+ if(addAnnos) {
+ doNotDedup(mod1)
+ doNotDedup(mod3)
+ }
+}
+
+class AnnotationNoDedup extends FreeSpec with Matchers {
+ "Firrtl provides transform that reduces identical modules to a single instance" - {
+ "Annotations can be added which will defeat this deduplication for specific modules instances" in {
+ Driver.execute(Array("-X", "low"), () => new UsesMuchUsedModule(addAnnos = true)) match {
+ case ChiselExecutionSucccess(_, _, Some(firrtlResult: FirrtlExecutionSuccess)) =>
+ val lowFirrtl = firrtlResult.emitted
+
+ lowFirrtl should include ("module MuchUsedModule :")
+ lowFirrtl should include ("module MuchUsedModule_1 :")
+ lowFirrtl should include ("module MuchUsedModule_3 :")
+ lowFirrtl should not include "module MuchUsedModule_2 :"
+ lowFirrtl should not include "module MuchUsedModule_4 :"
+ case _ =>
+ }
+ }
+ "Turning off these nnotations dedup all the occurrences" in {
+ Driver.execute(Array("-X", "low"), () => new UsesMuchUsedModule(addAnnos = false)) match {
+ case ChiselExecutionSucccess(_, _, Some(firrtlResult: FirrtlExecutionSuccess)) =>
+ val lowFirrtl = firrtlResult.emitted
+
+ lowFirrtl should include ("module MuchUsedModule :")
+ lowFirrtl should not include "module MuchUsedModule_1 :"
+ lowFirrtl should not include "module MuchUsedModule_3 :"
+ lowFirrtl should not include "module MuchUsedModule_2 :"
+ lowFirrtl should not include "module MuchUsedModule_4 :"
+ case _ =>
+ }
+ }
+ }
+}