Мне показалось, что быстрый комментарий Джека о том, как избежать сбоев, заслуживает более подробного объяснения.
Использование асинхронного сброса создает второй тактовый элемент c в дизайне, от сброса до конечного флопа. Сигнал сброса может быть заявлен в любое время, но его необходимо деактивировать синхронно с часами, иначе флоп может стать метастабильным.
Обычный способ сделать это - использовать синхронизатор сброса.
https://scastie.scala-lang.org/hutch31/EPozcu39QBOmaB5So6fyeA/13
Синхронизатор, показанный в приведенном выше коде, кодируется непосредственно в Verilog как Я не знаю, как удержать оптимизатор FIRRTL от постоянной оптимизации. Лог c после сброса syn c может быть либо syn c, либо asyn c reset.