scala - 错误 "Combinational loop detected"

标签 scala chisel firrtl

当将复杂的记录(基于键值对的 bundle )作为 UInt 传递并使用 asUInt() 和 asTypeOf(...) 将 UInt 转换回记录时,我收到错误的“CombLoopException”。

当直接连接两个Record而不进行UInt转换步骤时,不会出现CombLoopException。我花了几天时间尝试解决/重现该问题。这就是为什么我非常确定不应该出现 CombLoopException。

不幸的是,我无法提供任何小代码片段来重现该错误,因为我正在对 Rocket Chip Generator 进行自定义修改,并且该问题仅发生在对 Bundle 进行复杂修改时。

我的问题:如何使用“--no-check-comb-loops”选项来避免 CombLoopException? 有没有办法在 build.sbt 中添加此选项?

如果需要的话,我还想对这个特殊情况进行详细描述,以帮助解决这个罕见的问题: Disable FIRRTL pass that checks for combinational loops

最佳答案

这显然取决于您的具体代码,但我仍然建议尝试避免创建错误的组合循环。这很可能是一个错误循环,但像 Verilator 这样的工具也可能会遇到困难。

话虽这么说,您可以通过将 --no-check-comb-loops 传递到编译的 FIRRTL 步骤(也称为 Verilog 生成步骤)来禁用检查。在 Rocket-chip 中,这取决于您正在执行的模拟目录,但在 vsim 中它是 here ,在模拟器中是 here .

关于scala - 错误 "Combinational loop detected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71565366/

相关文章:

java - 无法使用maven用java和scala编译spring boot项目

scala - 如何在 Scala 中编写正确的空安全合并运算符?

javascript - 在 liftweb 静态内容中嵌入 javascript for 循环的问题

scala - 当我想要构建功能模块创建时如何处理 Vec 输入

scala - 类是抽象的;无法在凿子上实例化错误

chisel - 解复用器 : Unconnected Wires/firrtl error

chisel - 如何将已弃用的低 Firrtl 转换转换为依赖项 API

Scala 为什么我会遇到与 hashmap 类型不匹配的问题?