1

考虑这个例子:

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

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

4

1 回答 1

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_单元格(由$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
于 2017-05-31T09:49:38.703 回答