summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests
diff options
context:
space:
mode:
authorJim Lawson2015-08-13 13:13:37 -0700
committerJim Lawson2015-08-13 13:13:37 -0700
commit29132b9eddb12a6cbd0391be8c1fd6ee5b02838c (patch)
tree9228b273a99f3452a34157ca125fc8abd04147d8 /src/test/scala/chiselTests
parent0b4dc5457433659e52a8c36f043435762be94309 (diff)
rename package (lowercase)
Diffstat (limited to 'src/test/scala/chiselTests')
-rw-r--r--src/test/scala/chiselTests/BitsOps.scala41
-rw-r--r--src/test/scala/chiselTests/ChiselSpec.scala12
-rw-r--r--src/test/scala/chiselTests/GCD.scala50
3 files changed, 103 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/BitsOps.scala b/src/test/scala/chiselTests/BitsOps.scala
new file mode 100644
index 00000000..62f28038
--- /dev/null
+++ b/src/test/scala/chiselTests/BitsOps.scala
@@ -0,0 +1,41 @@
+package Chisel
+import Chisel.testers._
+import org.scalatest._
+import org.scalatest.prop._
+import org.scalatest.prop.GeneratorDrivenPropertyChecks._
+
+class BitwiseOps(w: Int) extends Module {
+ val io = new Bundle {
+ val a = Bits(INPUT, w)
+ val b = Bits(INPUT, w)
+ val not = Bits(OUTPUT, w)
+ val and = Bits(OUTPUT, w)
+ val or = Bits(OUTPUT, w)
+ val xor = Bits(OUTPUT, w)
+ }
+ io.not := ~io.a
+ io.and := io.a & io.b
+ io.or := io.a | io.b
+ io.xor := io.a ^ io.b
+}
+
+class BitwiseOpsSpec extends ChiselSpec {
+
+ class BitwiseOpsTester(w: Int, a: Int, b: Int) extends BasicTester {
+ val mask = (1 << w)-1;
+ val dut = Module(new BitwiseOps(w))
+ io.done := Bool(true)
+ dut.io.a := UInt(a)
+ dut.io.b := UInt(b)
+ when(dut.io.not != UInt(mask & ~a)) { io.error := UInt(1) }
+ when(dut.io.and != UInt(mask & (a & b))) { io.error := UInt(2) }
+ when(dut.io.or != UInt(mask & (a | b))) { io.error := UInt(3) }
+ when(dut.io.xor != UInt(mask & (a ^ b))) { io.error := UInt(4) }
+ }
+
+ "BitwiseOps" should "return the correct result" in {
+ forAll(safeUInts, safeUInts) { (a: Int, b: Int) =>
+ assert(TesterDriver.execute{ new BitwiseOpsTester(32, a, b) })
+ }
+ }
+}
diff --git a/src/test/scala/chiselTests/ChiselSpec.scala b/src/test/scala/chiselTests/ChiselSpec.scala
new file mode 100644
index 00000000..25ccf947
--- /dev/null
+++ b/src/test/scala/chiselTests/ChiselSpec.scala
@@ -0,0 +1,12 @@
+package Chisel
+import org.scalatest._
+import org.scalatest.prop._
+import org.scalacheck._
+
+class ChiselSpec extends FlatSpec with PropertyChecks {
+
+ val safeUIntWidth = Gen.choose(1, 31)
+ val safeUInts = Gen.choose(0, (1 << 30))
+
+}
+
diff --git a/src/test/scala/chiselTests/GCD.scala b/src/test/scala/chiselTests/GCD.scala
new file mode 100644
index 00000000..4f861201
--- /dev/null
+++ b/src/test/scala/chiselTests/GCD.scala
@@ -0,0 +1,50 @@
+package Chisel
+import Chisel.testers._
+import org.scalatest._
+import org.scalatest.prop._
+import org.scalatest.prop.TableDrivenPropertyChecks._
+
+class GCD extends Module {
+ val io = new Bundle {
+ val a = Bits(INPUT, 16)
+ val b = Bits(INPUT, 16)
+ val e = Bool(INPUT)
+ val z = Bits(OUTPUT, 16)
+ val v = Bool(OUTPUT)
+ }
+ val x = Reg(Bits(width = 16))
+ val y = Reg(Bits(width = 16))
+ when (x > y) { x := x -% y }
+ .otherwise { y := y -% x }
+ when (io.e) { x := io.a; y := io.b }
+ io.z := x
+ io.v := y === Bits(0)
+}
+
+class GCDSpec extends ChiselSpec {
+
+ class GCDTester(a: Int, b: Int, z: Int) extends BasicTester {
+ val dut = Module(new GCD)
+ val first = Reg(init=Bool(true))
+ dut.io.a := UInt(a)
+ dut.io.b := UInt(b)
+ dut.io.e := first
+ when(first) { first := Bool(false) }
+ when(dut.io.v) {
+ io.done := Bool(true)
+ io.error := (dut.io.z != UInt(z)).toUInt
+ }
+ }
+
+ val gcds = Table(
+ ("a", "b", "z"), // First tuple defines column names
+ ( 64, 48, 16), // Subsequent tuples define the data
+ ( 12, 9, 3),
+ ( 48, 64, 12))
+
+ "GCD" should "return the correct result" in {
+ forAll (gcds) { (a: Int, b: Int, z: Int) =>
+ assert(TesterDriver.execute{ new GCDTester(a, b, z) })
+ }
+ }
+}