禁用检查组合循环的 FIRRTL 传递

Disable FIRRTL pass that checks for combinational loops

有没有办法禁用 CheckCombLoops FIRRTL pass? (这些循环是错误的。) 如果可能的话,我想在测试驱动程序中执行此操作。我看到了 FIRRTL 解释器的选项,但在 FIRRTL 运行 期间我仍然遇到异常。我也希望能够使用 VCS 作为后端。

class LazyStackNWait2Test extends FlatSpec with Matchers {
  behavior of "LazyStackNWait2"
  it should "work" in {
    chisel3.iotesters.Driver.execute( Array( "--fr-allow-cycles", "--backend-name", "firrtl"), () => new LazyStackN(10, () => new LazyStackWait2)) { c =>
      new LazyStackNTester( c)
    } should be ( true)
  }
}

这是日志的一部分:

[info] [1.057] Done elaborating.
[info] - should work *** FAILED ***
[info]   firrtl.passes.PassExceptions: 
firrtl.passes.CheckCombLoops$CombLoopException:  @[:@5437.2]: [module LazyStackN] Combinational loop detected:

构建来自最新的 github HEAD。

编辑:现在通过 --no-check-comb-loops 支持。 Relevant PR

目前没有办法,但我创建了一个问题来添加此功能,不应该那么难做到。 https://github.com/ucb-bar/firrtl/issues/600

出于好奇,您看到了什么样的错误组合循环?我们发现它们非常罕见*并且通常很容易解决,因此如果您有任何示例可以分享,我将不胜感激。

* 例如,如果聚合被转换为位并返回(例如通过 chisel3.util.Mux1H),它们通常发生在子元素之间具有依赖性的聚合类型中。只是想看看其他哪些常见的使用模式会导致错误循环。