如何在 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.
我们已将断言添加到我们的 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.