summaryrefslogtreecommitdiff
path: root/src/test/scala/ChiselTests/Mul.scala
blob: 9f7c604c99479ed01da6bfe01c4dd11f2557b935 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package ChiselTests
import Chisel._
import scala.collection.mutable.ArrayBuffer

class Mul(val w: Int) extends Module {
  val io = new Bundle {
    val x   = UInt(INPUT,  w)
    val y   = UInt(INPUT,  w)
    val z   = UInt(OUTPUT, 2 * w)
  }
  val muls = new ArrayBuffer[UInt]()

  val n = 1 << w

  for (i <- 0 until n)
    for (j <- 0 until n)
      muls += UInt(i * j, 2 * w)
  val tbl = Vec(muls)
  // val ad = (io.x << w) | io.y
  io.z := tbl(((io.x << w) | io.y).toUInt)
}


class MulTester(c: Mul) extends Tester(c) {
  val maxInt  = 1 << c.w
  for (i <- 0 until 10) {
    val x = rnd.nextInt(maxInt)
    val y = rnd.nextInt(maxInt)
    poke(c.io.x, x)
    poke(c.io.y, y)
    step(1)
    expect(c.io.z, (x * y))
  }
}