blob: 0f67ea343113f78d5cba3d90ff17102c0a754455 (
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
35
36
37
38
|
// SPDX-License-Identifier: Apache-2.0
package chiselTests
import chisel3._
import chisel3.testers.BasicTester
class MulLookup(val w: Int) extends Module {
val io = IO(new Bundle {
val x = Input(UInt(w.W))
val y = Input(UInt(w.W))
val z = Output(UInt((2 * w).W))
})
val tbl = VecInit(
for {
i <- 0 until 1 << w
j <- 0 until 1 << w
} yield (i * j).asUInt((2 * w).W)
)
io.z := tbl(((io.x << w) | io.y))
}
class MulLookupTester(w: Int, x: Int, y: Int) extends BasicTester {
val dut = Module(new MulLookup(w))
dut.io.x := x.asUInt
dut.io.y := y.asUInt
assert(dut.io.z === (x * y).asUInt)
stop()
}
class MulLookupSpec extends ChiselPropSpec {
property("Mul lookup table should return the correct result") {
forAll(smallPosInts, smallPosInts) { (x: Int, y: Int) =>
assertTesterPasses { new MulLookupTester(3, x, y) }
}
}
}
|