根据这个:https://github.com/chipsalliance/chisel3/issues/2439,我决定在可能的情况下将所有的VecBool更改为UInt。VecBool的一个特性是测试每个位的值很简单。
例如,假设我有一个返回UInt的模块。我想测试一个特定的位设置,但我不在乎其他位是什么。有了VecBool,我可以很容易地做到这一点:
dut.io.v(bit).expect(true.B)是否有使用UInt的等价物?
dut.io.u(bit).expect(true.B) // this isn't allowed我能想出的最好办法就是这个丑陋的烂摊子:
assert(dut.io.u.peek().litValue & (1 << bit) != 0)如果这是在Chisel中所能做的最好的事情,那么是否应该在UInt上存在一个特殊的UInt,用户可以期望在特定位上有一个值呢?
我想,对于UInt的子部分(也就是提取UInt的一部分进行测试),也可以问同样的问题。
发布于 2022-03-09 20:25:39
我能想到的改善“丑陋的混乱”建议的唯一方法是使用新的(自X.5.1以来) peekInt()方法。所以,就像:
assert(dut.io.u.peekInt() & (1 << bit) != 0)我很乐意接受一个添加expectBit()类方法的PR。我们如何做到这一点有多种可能性:
expectTrue(bit: Int)和expectFalse(bit: Int)expectBit(bit: Int, value: BigInt)就我个人而言,我更喜欢选项1,因为对于选项2,不清楚哪个参数是值,哪个参数是位。
让我们讨论一个最棘手的问题或公关。
https://stackoverflow.com/questions/71414516
复制相似问题