blob: 9db602ee38b2961c6503d3da432bd4a014c4e4df (
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
69
70
71
72
73
74
75
76
|
// See LICENSE for license details.
package chiselTests
import chisel3._
import chisel3.core.FixedPoint
import chisel3.experimental.RawModule
import chisel3.testers.BasicTester
import org.scalatest._
class BundleLiteralSpec extends ChiselFlatSpec {
class MyBundle extends Bundle {
val a = UInt(8.W)
val b = Bool()
// Bundle literal constructor code, which will be auto-generated using macro annotations in
// the future.
import chisel3.core.BundleLitBinding
import chisel3.internal.firrtl.{ULit, Width}
// Full bundle literal constructor
def Lit(aVal: UInt, bVal: Bool): MyBundle = { // scalastyle:ignore method.name
val clone = cloneType
clone.selfBind(BundleLitBinding(Map(
clone.a -> litArgOfBits(aVal),
clone.b -> litArgOfBits(bVal)
)))
clone
}
// Partial bundle literal constructor
def Lit(aVal: UInt): MyBundle = { // scalastyle:ignore method.name
val clone = cloneType
clone.selfBind(BundleLitBinding(Map(
clone.a -> litArgOfBits(aVal)
)))
clone
}
}
"bundle literals" should "work in RTL" in {
val outsideBundleLit = (new MyBundle).Lit(42.U, true.B)
assertTesterPasses{ new BasicTester{
// TODO: add direct bundle compare operations, when that feature is added
chisel3.assert(outsideBundleLit.a === 42.U)
chisel3.assert(outsideBundleLit.b === true.B)
val bundleLit = (new MyBundle).Lit(42.U, true.B)
chisel3.assert(bundleLit.a === 42.U)
chisel3.assert(bundleLit.b === true.B)
chisel3.assert(bundleLit.a === outsideBundleLit.a)
chisel3.assert(bundleLit.b === outsideBundleLit.b)
val bundleWire = Wire(new MyBundle)
bundleWire := outsideBundleLit
chisel3.assert(bundleWire.a === 42.U)
chisel3.assert(bundleWire.b === true.B)
stop()
} }
}
"partial bundle literals" should "work in RTL" in {
assertTesterPasses{ new BasicTester{
val bundleLit = (new MyBundle).Lit(42.U)
chisel3.assert(bundleLit.a === 42.U)
val bundleWire = Wire(new MyBundle)
bundleWire := bundleLit
chisel3.assert(bundleWire.a === 42.U)
stop()
} }
}
}
|