Per this: https://github.com/chipsalliance/chisel3/issues/2439 I've decided to change all Vec[Bool] to UInt where possible. One feature of a Vec[Bool] is that testing the values of each bit is simple.
For example, let's say I have a module that gives back a UInt. I want to test a particular bit is set but I don't care what the other bits are. With a Vec[Bool] I could easily do this:
dut.io.v(bit).expect(true.B)
Is there an equivalent using UInt?
dut.io.u(bit).expect(true.B) // this isn't allowed
The best I can come up with is this ugly mess:
assert(dut.io.u.peek().litValue & (1 << bit) != 0)
If this is the best that can be done in Chisel, should there exist a special expectBit()
on UInt wherein the user can expect a value on a particular bit?
I suppose the same question could be asked of sub portions of the UInt (aka extracting a portion of the UInt for testing)
The only way I could think of to improve your "ugly mess" suggestion is to use the new (since X.5.1)
peekInt()
method. So something like:I would be happy to accept a PR that adds an
expectBit()
like method. There are multiple possibilities for how we could do this:expectTrue(bit: Int)
andexpectFalse(bit: Int)
expectBit(bit: Int, value: BigInt)
Personally I would prefer option 1, because for option 2, it is unclear which argument is the value and which one is the bit.
Let's discuss on a chiseltest issue or PR.