summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/RecordSpec.scala
diff options
context:
space:
mode:
authorJack Koenig2017-12-14 15:36:19 -0800
committerGitHub2017-12-14 15:36:19 -0800
commit74de925ab437ef999a92b36630ebc4965992fdbf (patch)
tree6d3c6bc52ec90820703fd8e91e3b7395836d2fee /src/test/scala/chiselTests/RecordSpec.scala
parentef1400f45404210121f53b38585602a8c7c2560e (diff)
Fix a few compiler warnings (#738)
Make InvalidateAPI emit to a test directory Add *.swp and test_run_dir to .gitignore
Diffstat (limited to 'src/test/scala/chiselTests/RecordSpec.scala')
-rw-r--r--src/test/scala/chiselTests/RecordSpec.scala20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/test/scala/chiselTests/RecordSpec.scala b/src/test/scala/chiselTests/RecordSpec.scala
index d17ff9bd..834153a5 100644
--- a/src/test/scala/chiselTests/RecordSpec.scala
+++ b/src/test/scala/chiselTests/RecordSpec.scala
@@ -5,6 +5,7 @@ package chiselTests
import chisel3._
import chisel3.testers.BasicTester
import chisel3.util.{Counter, Queue}
+import chisel3.experimental.{DataMirror, requireIsChiselType}
import scala.collection.immutable.ListMap
// An example of how Record might be extended
@@ -12,9 +13,15 @@ import scala.collection.immutable.ListMap
// it is a possible implementation of a programmatic "Bundle"
// (and can by connected to MyBundle below)
final class CustomBundle(elts: (String, Data)*) extends Record {
- val elements = ListMap(elts map { case (field, elt) => field -> elt.chiselCloneType }: _*)
+ val elements = ListMap(elts map { case (field, elt) =>
+ requireIsChiselType(elt)
+ field -> elt
+ }: _*)
def apply(elt: String): Data = elements(elt)
- override def cloneType = (new CustomBundle(elements.toList: _*)).asInstanceOf[this.type]
+ override def cloneType = {
+ val cloned = elts.map { case (n, d) => n -> DataMirror.internal.chiselTypeClone(d) }
+ (new CustomBundle(cloned: _*)).asInstanceOf[this.type]
+ }
}
trait RecordSpecUtils {
@@ -129,4 +136,13 @@ class RecordSpec extends ChiselFlatSpec with RecordSpecUtils {
elaborate { new MyModule(new CustomBundle("bar" -> UInt(32.W)), fooBarType) }
}).getMessage should include ("Left Record missing field")
}
+
+ "CustomBundle" should "work like built-in aggregates" in {
+ elaborate(new Module {
+ val gen = new CustomBundle("foo" -> UInt(32.W))
+ val io = IO(Output(gen))
+ val wire = Wire(gen)
+ io := wire
+ })
+ }
}