Можно ли удалить входную переменную часов из выхода AIGER?

Рассмотрим пример:

read_verilog ./tests/simple/fsm.v
synth -flatten -top fsm_test
abc -g AND
write_aiger -ascii -symbols hoho.aag

Результирующий файл AIGER содержит входную переменную clk, которая висит.
Можно ли избежать ввода таких часов в AIGER?
Спасибо.


person Ayrat    schedule 30.05.2017    source источник


Ответы (1)


Не автоматически. Существуют следующие варианты:

  1. Просто используйте функцию SystemVerilog $global_clock, чтобы вообще не использовать тактовый ввод. Используйте always @($global_clock) вместо always @(posedge clk), а затем удалите ввод clk из своего дизайна.

  2. Удалите ввод часов в конце вашего скрипта синтеза. т.е. прямо перед вызовом write_aiger вызовите что-то вроде delete -input fsm_test/clk. Это превратит тактовый сигнал в оборванный провод внутри модуля. Вам следует избегать этого перед запуском большого количества команд оптимизации, иначе вы рискуете, что Yosys оптимизирует все ваши FF. Но делать это ближе к концу вашего скрипта должно быть хорошо.

  3. Вы можете комбинировать 2. с сопоставлением ваших FF с ячейками $ff/$_FF_ (вид ячеек FF, сгенерированных $global_clock-блоками). Преимущество этого подхода заключается в том, что он делает провод clk действительно неиспользуемым, поэтому нет риска того, что оптимизация испортит ваши FF, потому что у них есть незанятый тактовый вход. Теперь я добавил файл dff2ff.v techmap в коммит e7a984a, который немного упрощает это.

Скрипт для варианта 2:

read_verilog ./tests/simple/fsm.v
synth -flatten -top fsm_test
abc -g AND
delete -input fsm_test/clk
write_aiger -ascii -symbols hoho.aag

Скрипт для варианта 3 (требуется Yosys git commit e7a984a или новее):

read_verilog ./tests/simple/fsm.v
hierarchy -top fsm_test
proc
techmap -map +/dff2ff.v
delete fsm_test/clk
synth -flatten 
abc -g AND
write_aiger -ascii -symbols hoho.aag
person CliffordVienna    schedule 31.05.2017