blob: 574a63359a75c07e21327c4ba4370c44dd9b80f6 (
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// See LICENSE for license details.
package chiselTests
import java.io.File
import org.scalatest._
import Chisel._
import Chisel.testers.BasicTester
class BlackBoxInverter extends BlackBox {
val io = new Bundle() {
val in = Bool(INPUT)
val out = Bool(OUTPUT)
}
}
class BlackBoxPassthrough extends BlackBox {
val io = new Bundle() {
val in = Bool(INPUT)
val out = Bool(OUTPUT)
}
}
class BlackBoxTester extends BasicTester {
val blackBoxPos = Module(new BlackBoxInverter)
val blackBoxNeg = Module(new BlackBoxInverter)
blackBoxPos.io.in := UInt(1)
blackBoxNeg.io.in := UInt(0)
assert(blackBoxNeg.io.out === UInt(1))
assert(blackBoxPos.io.out === UInt(0))
stop()
}
/** Instantiate multiple BlackBoxes with similar interfaces but different
* functionality. Used to detect failures in BlackBox naming and module
* deduplication.
*/
class MultiBlackBoxTester extends BasicTester {
val blackBoxInvPos = Module(new BlackBoxInverter)
val blackBoxInvNeg = Module(new BlackBoxInverter)
val blackBoxPassPos = Module(new BlackBoxPassthrough)
val blackBoxPassNeg = Module(new BlackBoxPassthrough)
blackBoxInvPos.io.in := UInt(1)
blackBoxInvNeg.io.in := UInt(0)
blackBoxPassPos.io.in := UInt(1)
blackBoxPassNeg.io.in := UInt(0)
assert(blackBoxInvNeg.io.out === UInt(1))
assert(blackBoxInvPos.io.out === UInt(0))
assert(blackBoxPassNeg.io.out === UInt(0))
assert(blackBoxPassPos.io.out === UInt(1))
stop()
}
class BlackBoxSpec extends ChiselFlatSpec {
"A BlackBoxed inverter" should "work" in {
assertTesterPasses({ new BlackBoxTester },
Seq("/BlackBoxTest.v"))
}
"Multiple BlackBoxes" should "work" in {
assertTesterPasses({ new MultiBlackBoxTester },
Seq("/BlackBoxTest.v"))
}
}
|