Отключить проход FIRRTL, который проверяет комбинационные циклы

Есть ли способ отключить проход 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:

Сборка взята из последней HEAD github.


person Steve Burns    schedule 01.06.2017    source источник


Ответы (1)


РЕДАКТИРОВАТЬ: теперь это поддерживается через --no-check-comb-loops. Соответствующий PR

В настоящее время нет способа, но я создал проблему для добавления этой функции, и это не должно быть таким сложным. https://github.com/ucb-bar/firrtl/issues/600

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

* Например, они обычно случаются с типами агрегатов, которые имеют зависимость между подэлементами, если агрегат приводится к битам и обратно (например, через chisel3.util.Mux1H). Просто пытаюсь понять, какие другие распространенные шаблоны использования могут вызывать ложные петли.

person Jack Koenig    schedule 06.06.2017
comment
Пути отображаются между модулями, обменивающимися данными через разделенные вводы-выводы. Контроллеры в модулях сложны и показывают ложные зависимости от готовности (вход модуля) к действию (выход модуля), которые исчезнут после логического синтеза. Я работаю над преобразованием FIRRTL, чтобы исправить эту проблему, и многому учусь. - person Steve Burns; 06.06.2017
comment
@SteveBurns Теперь это поддерживается, см. Правку выше. Будет в следующем выпуске. - person Jack Koenig; 13.06.2017