问题描述
我正在使用 yosys 来合成简单的电路并展示结果如何随单元库而变化。 但是,看起来结果没有得到很好的优化。 我正在使用从以下位置下载的库 vsclib013.lib:http://www.vlsitechnology.org/synopsys/vsclib013.lib
例如我合成了一个由 4 个全加器组成的加法器。由于我不使用 Carry_in 和 Carry_out,我确实希望为 LSB 加法器合成一个半加器(具有两个输入的异或)。 合成结果如下。
Number of cells 12
cgi2v0x05 4
iv1v0x05 4
xor3v1x05 4
它使用 4 个单元,这些单元与三个输入进行 XOR。
从电路图中也可以清楚地看出这一点:graph obtained using the yosys command 'show'
该电路仅由四个相同的全加器组成,并且没有针对 Carry_in 等于 0 和 Carry_out 未连接进行优化。
我用来合成的脚本是:
ghdl TOP_ENTITY
hierarchy -check -top TOP_ENTITY
proc; opt; memory; opt; fsm; opt
techmap; opt
read_liberty -lib vsclib013.lib
dfflibmap -liberty vsclib013.lib
abc -liberty vsclib013.lib -D 1000 -constr constraint_file_vsclib013.txt
splitnets -ports; opt
clean
write_verilog TOP_ENTITY.v
flatten
show -stretch -format pdf -lib TOP_ENTITY.v
感谢您提出任何改进综合系统的建议。
解决方法
感谢您的回答。
经过一些尝试和错误后,我通过简单地使用 flatten 获得了良好的结果。 我还在 opt 命令中添加了 -full 以实现(希望)好的测量。 现在,我的工作脚本是这样的:
ghdl TOP_ENTITY
hierarchy -check -top TOP_ENTITY
flatten
proc; opt -full; memory; opt -full; fsm; opt -full
techmap; opt -full
read_liberty -lib vsclib013.lib
dfflibmap -liberty vsclib013.lib
abc -liberty vsclib013.lib -D 1000 -constr constraint_file_vsclib013.txt
splitnets -ports; opt -full
clean -purge
write_verilog TOP_ENTITY.v
flatten
show -stretch -format pdf -lib TOP_ENTITY.v
我还在 clean 命令中添加了 -purge 选项以获得更好的印刷原理图。