考虑一下这个例子:
read_verilog ./tests/simple/fsm.v
synth -flatten -top fsm_test
abc -g AND
write_aiger -ascii -symbols hoho.aag
生成的AIGER文件包含悬空的输入变量clk
是否可以避免将这种时钟输入引入AIGER?
感谢。
答案 0 :(得分:1)
不自动。存在以下选项:
只需使用SystemVerilog $ global_clock功能即可完全避免时钟输入。使用always @($global_clock)
代替always @(posedge clk)
,然后从设计中删除clk
输入。
删除合成脚本末尾附近的时钟输入。即在致电write_aiger
之前调用类似delete -input fsm_test/clk
的内容。这会将时钟信号转换为模块内部的悬空线。在运行大量优化命令之前,您应该避免这样做,否则您可能会冒险Yosys优化掉所有的FF。但是,在脚本结束时这样做应该没问题。
您可以将2.与您的FF映射到$ff
/ $_FF_
个单元格($global_clock
生成的FF单元格 - 块)。这种方法的优点是它使clk线真正未使用,因此没有优化混乱FF的风险,因为它们具有未驱动的时钟输入。我现在在commit 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