Как сделать утверждения в долоте просто предупреждениями, а не прекращением симуляции - PullRequest
0 голосов
/ 12 ноября 2018

Мы добавили утверждения в наш код долота, но хотим, чтобы они только предупреждали, а не останавливали симуляцию.Есть ли способ сказать долото сделать это?

Например:

assert (x (1) = / = nxt_val (1))

Мы хотим, чтобы этопросто предупредите нас, чтобы мы могли собрать журнал, чтобы найти места, где стробирование часов наиболее эффективно.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Ответ Чика разумный, хотя я подозреваю, что вы ищете что-то, что симуляторы Verilog регистрируют как ошибку, а не как printf.

К сожалению, поддержка симуляционной конструкции в FIRRTL довольно примитивна - примером может служить испускание утверждений $fatal. Обычно мы работали с этим с помощью преобразований FIRRTL или специфических для симулятора вещей (например, см. Нашу проверку Verilator ). Как обсуждалось в КХЦ, я думаю, что мы должны вкладывать больше усилий в создание лучших библиотек моделирования. Если у вас есть идеи и предложения, было бы очень полезно, если бы вы могли упаковать их в RFC: https://github.com/freechipsproject/chisel3/issues.

0 голосов
/ 13 ноября 2018

Можете ли вы просто написать метод, которому вы передаете условие и, возможно, флаг поведения.

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
    }
  }
}
...