blob: 62f28038bbb04adb5f0e2733e4a176ebef10fee0 (
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
39
40
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) })
}
}
}
|