diff options
Diffstat (limited to 'src/test/scala/chiselTests/GCD.scala')
| -rw-r--r-- | src/test/scala/chiselTests/GCD.scala | 50 |
1 files changed, 50 insertions, 0 deletions
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) }) + } + } +} |
