测试使用硬件构造的 Chisel 对象函数
Testing Chisel object functions that use hardware constructs
测试不属于生成硬件构造的模块的 Chisel 函数的正确方法是什么?
object Util {
def getSquare(vec2d: Vec[Vec[Bool]]) : Seq[Seq[Bool]] = {
val size = vec2d.size max vec2d(0).size
return Seq.fill(size, size) {Wire(Bool())}
}
}
如何测试这个功能?因为它不是模块,所以标准的 Chisel 测试格式会报错。
一般来说,您只能使用在模块中生成凿子硬件结构的代码(文字除外)。因此,典型的方法是编写包装器并查看生成的代码是否包含您期望的内容。例如,这是对你的功能的一些测试
"test non-module generator" in {
// pads out rectangular vec into square nested seq, fills with values based on indices
class Wrapper extends Module {
val square = (Util.getSquare(Vec(4, Vec(2,Bool()))))
square.indices.foreach { i => square(i).indices.foreach { j => square(i)(j) := ((i + j ) % 2 == 0).B}}
val out = IO(Output(Vec(4, Vec(4,Bool()))))
out.indices.foreach { i => out(i).indices.foreach { j => out(i)(j) := square(i)(j)}}
}
val firrtlSource = ChiselStage.emitFirrtl(new Wrapper)
println(firrtlSource)
firrtlSource should contain ("wire square_4_4")
}
您还可以使用 chiseltest 基本测试工具测试您的包装函数,例如:
test(new Wrapper) { dut =>
dut.out(3)(3).expect(true.B)
}
测试不属于生成硬件构造的模块的 Chisel 函数的正确方法是什么?
object Util {
def getSquare(vec2d: Vec[Vec[Bool]]) : Seq[Seq[Bool]] = {
val size = vec2d.size max vec2d(0).size
return Seq.fill(size, size) {Wire(Bool())}
}
}
如何测试这个功能?因为它不是模块,所以标准的 Chisel 测试格式会报错。
一般来说,您只能使用在模块中生成凿子硬件结构的代码(文字除外)。因此,典型的方法是编写包装器并查看生成的代码是否包含您期望的内容。例如,这是对你的功能的一些测试
"test non-module generator" in {
// pads out rectangular vec into square nested seq, fills with values based on indices
class Wrapper extends Module {
val square = (Util.getSquare(Vec(4, Vec(2,Bool()))))
square.indices.foreach { i => square(i).indices.foreach { j => square(i)(j) := ((i + j ) % 2 == 0).B}}
val out = IO(Output(Vec(4, Vec(4,Bool()))))
out.indices.foreach { i => out(i).indices.foreach { j => out(i)(j) := square(i)(j)}}
}
val firrtlSource = ChiselStage.emitFirrtl(new Wrapper)
println(firrtlSource)
firrtlSource should contain ("wire square_4_4")
}
您还可以使用 chiseltest 基本测试工具测试您的包装函数,例如:
test(new Wrapper) { dut =>
dut.out(3)(3).expect(true.B)
}