是否可以从 AIGER 输出中删除时钟输入变量?

Is it possible to remove clock input variable from the AIGER output?

考虑示例:

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

生成的 AIGER 文件包含悬空的输入变量 clk
是否可以避免在AIGER中引入这样的时钟输入?
谢谢

不会自动。存在以下选项:

  1. 只需使用 SystemVerilog $global_clock 功能即可完全避免时钟输入。使用 always @($global_clock) 而不是 always @(posedge clk),然后从您的设计中删除 clk 输入。

  2. 删除综合脚本末尾附近的时钟输入。 IE。在调用 write_aiger 之前调用 delete -input fsm_test/clk 之类的东西。这会将时钟信号变成模块内部的悬垂线。你应该避免在 运行 大量优化命令之前这样做,否则你冒着 Yosys 优化你所有 FF 的风险。但是在你的脚本快结束时这样做应该没问题。

  3. 您可以结合 2. 将您的 FF 映射到 $ff/$_FF_ 单元格(由 $global_clock 块生成的 FF 单元格类型)。这种方法的优点是它使 clk 线真正未被使用,因此不存在优化扰乱您的 FF 的风险,因为它们具有未驱动的时钟输入。我现在在提交 e7a984a 中添加了一个 dff2ff.v techmap 文件,稍微简化了这一点。

选项 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