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

时间:2017-06-01 18:00:58

标签: chisel

有没有办法禁用CheckCombLoops FIRRTL传递? (这些循环是错误的。) 如果可能的话,我想在测试仪驱动程序中执行此操作。我看到了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。

1 个答案:

答案 0 :(得分:1)

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

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

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

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