summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/UIntOps.scala
diff options
context:
space:
mode:
authorHenry Cook2015-11-06 13:23:24 -0800
committerHenry Cook2015-11-06 13:25:07 -0800
commit7fe61318433a8ecaac80ef2b547a88ab9dc04aec (patch)
tree466be7da48a2dfe57b37ada346ebaf01e82389f8 /src/test/scala/chiselTests/UIntOps.scala
parent89c5d10c81808406b6ae684e1e122d440466280c (diff)
added elaboration tests for remaining old Chisel3 examples
Diffstat (limited to 'src/test/scala/chiselTests/UIntOps.scala')
-rw-r--r--src/test/scala/chiselTests/UIntOps.scala109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/test/scala/chiselTests/UIntOps.scala b/src/test/scala/chiselTests/UIntOps.scala
new file mode 100644
index 00000000..9affb511
--- /dev/null
+++ b/src/test/scala/chiselTests/UIntOps.scala
@@ -0,0 +1,109 @@
+// See LICENSE for license details.
+
+package chiselTests
+import Chisel._
+import org.scalatest._
+import Chisel.testers.BasicTester
+
+class UIntOps extends Module {
+ val io = new Bundle {
+ val a = UInt(INPUT, 16)
+ val b = UInt(INPUT, 16)
+ val addout = UInt(OUTPUT, 16)
+ val subout = UInt(OUTPUT, 16)
+ val timesout = UInt(OUTPUT, 16)
+ val divout = UInt(OUTPUT, 16)
+ val modout = UInt(OUTPUT, 16)
+ val lshiftout = UInt(OUTPUT, 16)
+ val rshiftout = UInt(OUTPUT, 16)
+ val lessout = Bool(OUTPUT)
+ val greatout = Bool(OUTPUT)
+ val eqout = Bool(OUTPUT)
+ val noteqout = Bool(OUTPUT)
+ val lesseqout = Bool(OUTPUT)
+ val greateqout = Bool(OUTPUT)
+ }
+
+ val a = io.a
+ val b = io.b
+
+ io.addout := a +% b
+ io.subout := a -% b
+ io.timesout := (a * b)(15, 0)
+ io.divout := a / Mux(b === UInt(0), UInt(1), b)
+ // io.modout := a % b
+ // TODO:
+ io.modout := UInt(0)
+ io.lshiftout := (a << b(3, 0))(15, 0)
+ io.rshiftout := a >> b
+ io.lessout := a < b
+ io.greatout := a > b
+ io.eqout := a === b
+ io.noteqout := (a != b)
+ io.lesseqout := a <= b
+ io.greateqout := a >= b
+}
+
+/*
+class UIntOpsTester(c: UIntOps) extends Tester(c) {
+ def uintExpect(d: Bits, x: BigInt) {
+ val mask = (1 << 16) - 1
+ println(" E = " + x + " X&M = " + (x & mask))
+ expect(d, x & mask)
+ }
+ for (t <- 0 until 16) {
+ val test_a = rnd.nextInt(1 << 16)
+ val test_b = rnd.nextInt(1 << 16)
+ println("A = " + test_a + " B = " + test_b)
+ poke(c.io.a, test_a)
+ poke(c.io.b, test_b)
+ step(1)
+ uintExpect(c.io.addout, test_a + test_b)
+ uintExpect(c.io.subout, test_a - test_b)
+ uintExpect(c.io.divout, if (test_b == 0) 0 else test_a / test_b)
+ uintExpect(c.io.timesout, test_a * test_b)
+ // uintExpect(c.io.modout, test_a % test_b)
+ uintExpect(c.io.lshiftout, test_a << (test_b&15))
+ uintExpect(c.io.rshiftout, test_a >> test_b)
+ expect(c.io.lessout, int(test_a < test_b))
+ expect(c.io.greatout, int(test_a > test_b))
+ expect(c.io.eqout, int(test_a == test_b))
+ expect(c.io.noteqout, int(test_a != test_b))
+ expect(c.io.lessout, int(test_a <= test_b))
+ expect(c.io.greateqout, int(test_a >= test_b))
+ }
+}
+*/
+
+class GoodBoolConversion extends Module {
+ val io = new Bundle {
+ val u = UInt(1, width = 1).asInput
+ val b = Bool(OUTPUT)
+ }
+ io.b := io.u.toBool
+}
+
+class BadBoolConversion extends Module {
+ val io = new Bundle {
+ val u = UInt(1, width = 5).asInput
+ val b = Bool(OUTPUT)
+ }
+ io.b := io.u.toBool
+}
+
+class UIntOpsSpec extends ChiselPropSpec with Matchers {
+ property("Bools can be created from 1 bit UInts") {
+ elaborate(new GoodBoolConversion)
+ }
+
+ property("Bools cannot be created from >1 bit UInts") {
+ a [Exception] should be thrownBy { elaborate(new BadBoolConversion) }
+ }
+
+ property("UIntOps should elaborate") {
+ elaborate { new UIntOps }
+ }
+
+ ignore("UIntOpsTester should return the correct result") { }
+}
+