diff options
| author | Jack Koenig | 2017-12-14 15:36:19 -0800 |
|---|---|---|
| committer | GitHub | 2017-12-14 15:36:19 -0800 |
| commit | 74de925ab437ef999a92b36630ebc4965992fdbf (patch) | |
| tree | 6d3c6bc52ec90820703fd8e91e3b7395836d2fee /src/test/scala/chiselTests/RecordSpec.scala | |
| parent | ef1400f45404210121f53b38585602a8c7c2560e (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.scala | 20 |
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 + }) + } } |
