如何在 Chisel 中做出断言只是警告而不是停止模拟

How to make assertions in Chisel be just warnings and not stop simulation

我们已将断言添加到我们的 Chisel 代码中,但我们只希望它们发出警告,而不是停止模拟。有没有办法告诉 Chisel 这样做?

例如:

断言(x(1) =/= nxt_val(1))

我们希望这只是给我们一个警告,这样我们就可以收集日志,找到时钟门控最有效的地方。

你能不能只写一个传递条件和行为标志的方法。

object warnAssert {
  def apply(condition: Bool, message: String = "", isFatal: Boolean = false) {
    (isFatal, message.isEmpty) {
      case (true, true)   => assert(condition)
      case (true, false)  => assert(condition, message)
      case (false, _) => when(bool) { printf("Warning: %s\n", message) // line number should get included here
    }
  }
}

Chick 的回答是合理的,尽管我怀疑您正在寻找 Verilog 模拟器注册为错误而不是 printf 的东西。

不幸的是,FIRRTL 中的模拟构造支持非常原始——断言发射 $fatal 就是一个例子。我们通常通过 FIRRTL 转换或特定于模拟器的东西来处理这个问题(实现见我们的 Verilator testing top for example). As discussed at the CCC, I think we should invest more effort in better simulation libraries. If you have ideas and suggestions, it would be super helpful if you could package them up in an RFC: https://github.com/freechipsproject/chisel3/issues.