如何避免 Chisel 测试仪中的多重设计细节
How to avoid multiple design elaborations in Chisel testers
在 Chisel iotesters 中,我们将创建 Chisel 设计的工厂传递给测试仪,例如() => 新建DUT,如下:
"Test" should "simulate" in {
chisel3.iotesters.Driver.execute(arguments, () => new DUT) { c => new MyPeekPokeTester(c) } should be (true)
}
如果我有很多测试和大型设计,那么每次测试都会进行设计细化,从而导致运行时间很长。由于对于许多测试而言,可能通过的是完全相同的设计,因此出现了一个合乎逻辑的问题 - 是否有办法在多个测试中重用精心设计的设计(DUT.fir 或 DUT.v 取决于后端)?如果在每次测试开始时都调用了重置,它应该不会导致功能问题。
我建议构建一个聚合大量测试人员的 PeekPokeTester。像
class MyMegaPeekPokeTester(c: MyDut) extends PeekPokeTester(c) {
new MyPeekPokeTester1(c) &&
new MyPeekPokeTester2(c) &&
...
new MyPeekPokeTesterN(c)
}
您可以通过多种方式对此进行加糖(将 类 放入列表中,以编程方式调用它们之间的重置等)。
正在努力重构和现代化测试人员,这个问题正在考虑中。一个复杂的问题是 PeekPokeTesters 需要访问 dut 的实例,以便提供对 IO 的类型安全访问。很难序列化或以其他方式保存此信息。
在 Chisel iotesters 中,我们将创建 Chisel 设计的工厂传递给测试仪,例如() => 新建DUT,如下:
"Test" should "simulate" in {
chisel3.iotesters.Driver.execute(arguments, () => new DUT) { c => new MyPeekPokeTester(c) } should be (true)
}
如果我有很多测试和大型设计,那么每次测试都会进行设计细化,从而导致运行时间很长。由于对于许多测试而言,可能通过的是完全相同的设计,因此出现了一个合乎逻辑的问题 - 是否有办法在多个测试中重用精心设计的设计(DUT.fir 或 DUT.v 取决于后端)?如果在每次测试开始时都调用了重置,它应该不会导致功能问题。
我建议构建一个聚合大量测试人员的 PeekPokeTester。像
class MyMegaPeekPokeTester(c: MyDut) extends PeekPokeTester(c) {
new MyPeekPokeTester1(c) &&
new MyPeekPokeTester2(c) &&
...
new MyPeekPokeTesterN(c)
}
您可以通过多种方式对此进行加糖(将 类 放入列表中,以编程方式调用它们之间的重置等)。
正在努力重构和现代化测试人员,这个问题正在考虑中。一个复杂的问题是 PeekPokeTesters 需要访问 dut 的实例,以便提供对 IO 的类型安全访问。很难序列化或以其他方式保存此信息。