summaryrefslogtreecommitdiff
path: root/src/test/scala
diff options
context:
space:
mode:
authorJim Lawson2016-07-25 13:37:53 -0700
committerJim Lawson2016-07-25 13:37:53 -0700
commit3624751e2e63ba9f107c795529edfe48cf8340b2 (patch)
tree951deec27b8a75d9d9c0eec0aee6fa08f80f9ae0 /src/test/scala
parent50518f43cbd9c783633714a26ecdb0f2f18a1142 (diff)
parent54cd58cbb435170dd2ed67dafe1cb1d769a799e8 (diff)
Merge branch 'master' into sdtwigg_connectwrap_renamechisel3
Diffstat (limited to 'src/test/scala')
-rw-r--r--src/test/scala/chiselTests/BetterNamingTests.scala101
-rw-r--r--src/test/scala/chiselTests/GCD.scala2
2 files changed, 102 insertions, 1 deletions
diff --git a/src/test/scala/chiselTests/BetterNamingTests.scala b/src/test/scala/chiselTests/BetterNamingTests.scala
new file mode 100644
index 00000000..44fc542a
--- /dev/null
+++ b/src/test/scala/chiselTests/BetterNamingTests.scala
@@ -0,0 +1,101 @@
+package chiselTests
+
+import org.scalatest.{FlatSpec, Matchers}
+import collection.mutable
+
+import Chisel._
+
+
+// Defined outside of the class so we don't get $ in name
+class Other(w: Int) extends Module {
+ val io = new Bundle {
+ val a = UInt(width = w)
+ }
+}
+class PerNameIndexing(count: Int) extends Module {
+ val io = new Bundle { }
+
+ val wires = Seq.tabulate(count) { i => Module(new Other(i)) }
+ val queues = Seq.tabulate(count) { i => Module(new Queue(UInt(width = i), 16)) }
+}
+
+// Note this only checks Iterable[Chisel.Data] which excludes Maps
+class IterableNaming extends Module {
+ val io = new Bundle { }
+
+ val seq = Seq.tabulate(3) { i =>
+ Seq.tabulate(2) { j => Wire(init = (i * j).U) }
+ }
+ val optSet = Some(Set(Wire(init = 0.U),
+ Wire(init = 1.U),
+ Wire(init = 2.U),
+ Wire(init = 3.U)))
+
+ val stack = mutable.Stack[Module]()
+ for (i <- 0 until 4) {
+ stack push Module(new Other(i))
+ }
+
+ def streamFrom(x: Int): Stream[Module] =
+ Module(new Other(x)) #:: streamFrom(x + 1)
+ val stream = streamFrom(0) // Check that we don't get into infinite loop
+ val list = stream.take(8).toList
+}
+
+/* Better Naming Tests
+ *
+ * These tests are intended to validate that Chisel picks better names
+ */
+class BetterNamingTests extends FlatSpec {
+
+ behavior of "Better Naming"
+
+ it should "provide unique counters for each name" in {
+ val verilog = Driver.emit(() => new PerNameIndexing(4))
+ val ModuleDef = """\s*module\s+(\S+)\s+:\s*""".r
+ val expectedModules = Set("PerNameIndexing",
+ "Queue", "Queue_1", "Queue_2", "Queue_3",
+ "Other", "Other_1", "Other_2", "Other_3")
+ val foundModules = for {
+ ModuleDef(name) <- verilog.split("\n").toSeq
+ } yield name
+ assert(foundModules.toSet === expectedModules)
+ }
+
+ it should "provide names for things defined in Iterable[HasId] and Option[HasId]" in {
+ val verilog = Driver.emit(() => new IterableNaming)
+
+ val lines = verilog.split("\n").toSeq
+
+ val SeqDef = """\s*wire\s+seq_(\d+)_(\d+)\s+:\s+UInt\s*""".r
+ val seqs = for {
+ i <- (0 until 3)
+ j <- (0 until 2)
+ } yield (i.toString, j.toString)
+ val foundSeqs = for {
+ SeqDef(i, j) <- lines
+ } yield (i, j)
+ assert(foundSeqs.toSet === seqs.toSet)
+
+ val OptSetDef = """\s*wire\s+optSet_(\d+)\s+:\s+UInt\s*""".r
+ val optSets = (0 until 4) map (_.toString)
+ val foundOptSets = for {
+ OptSetDef(i) <- lines
+ } yield i
+ assert(foundOptSets.toSet === optSets.toSet)
+
+ val StackDef = """\s*inst\s+stack_(\d+)\s+of\s+Other.*""".r
+ val stacks = (0 until 4) map (_.toString)
+ val foundStacks = for {
+ StackDef(i) <- lines
+ } yield i
+ assert(foundStacks.toSet === stacks.toSet)
+
+ val ListDef = """\s*inst\s+list_(\d+)\s+of\s+Other.*""".r
+ val lists = (0 until 8) map (_.toString)
+ val foundLists = for {
+ ListDef(i) <- lines
+ } yield i
+ assert(foundLists.toSet === lists.toSet)
+ }
+}
diff --git a/src/test/scala/chiselTests/GCD.scala b/src/test/scala/chiselTests/GCD.scala
index 5e4c897a..d683ce34 100644
--- a/src/test/scala/chiselTests/GCD.scala
+++ b/src/test/scala/chiselTests/GCD.scala
@@ -30,7 +30,7 @@ class GCDTester(a: Int, b: Int, z: Int) extends BasicTester {
dut.io.a := a.U
dut.io.b := b.U
dut.io.e := first
- when(first) { first := false.B }
+ when(first) { first := Bool(false) }
when(!first && dut.io.v) {
assert(dut.io.z === z.U)
stop()