如何避免 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 的类型安全访问。很难序列化或以其他方式保存此信息。