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
|
// SPDX-License-Identifier: Apache-2.0
package chiselTests.util.experimental
import chisel3.util.experimental.decode.{DecodeTableAnnotation, Minimizer, QMCMinimizer, TruthTable}
import chiselTests.SMTModelCheckingSpec
import chiselTests.util.experimental.minimizer.DecodeTestModule
import firrtl.annotations.ReferenceTarget
class DecoderSpec extends SMTModelCheckingSpec {
val xor = TruthTable(
"""10->1
|01->1
| 0""".stripMargin)
def minimizer: Minimizer = QMCMinimizer
"decoder" should "pass without DecodeTableAnnotation" in {
test(
() => new DecodeTestModule(minimizer, table = xor),
s"${minimizer.getClass.getSimpleName}.noAnno",
success
)
}
"decoder" should "fail with a incorrect DecodeTableAnnotation" in {
test(
() => new DecodeTestModule(minimizer, table = xor),
s"${minimizer.getClass.getSimpleName}.incorrectAnno",
fail(0),
annos = Seq(
DecodeTableAnnotation(ReferenceTarget("", "", Nil, "", Nil),
"""10->1
|01->1
| 0""".stripMargin,
"""10->1
| 0""".stripMargin
)
)
)
}
"decoder" should "success with a correct DecodeTableAnnotation" in {
test(
() => new DecodeTestModule(minimizer, table = xor),
s"${minimizer.getClass.getSimpleName}.correctAnno",
success,
annos = Seq(
DecodeTableAnnotation(ReferenceTarget("", "", Nil, "", Nil),
"""10->1
|01->1
| 0""".stripMargin,
QMCMinimizer.minimize(TruthTable(
"""10->1
|01->1
| 0""".stripMargin)).toString
)
)
)
}
}
|