考虑这个例子:
read_verilog ./tests/simple/fsm.v
synth -flatten -top fsm_test
abc -g AND
write_aiger -ascii -symbols hoho.aag
生成的 AIGER 文件包含clk
悬空的输入变量 。
是否可以避免将这样的时钟输入引入 AIGER?
谢谢。
考虑这个例子:
read_verilog ./tests/simple/fsm.v
synth -flatten -top fsm_test
abc -g AND
write_aiger -ascii -symbols hoho.aag
生成的 AIGER 文件包含clk
悬空的输入变量 。
是否可以避免将这样的时钟输入引入 AIGER?
谢谢。
不是自动的。存在以下选项:
只需使用 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
-blocks 生成的 FF 单元格类型)结合起来。这种方法的优点是它使 clk 线真正未被使用,因此不存在优化弄乱您的 FF 的风险,因为它们具有未驱动的时钟输入。我现在dff2ff.v
在提交 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