热度 4| |
一、前言
什么是综合?综合就是将RTL代码经过优化之后,映射成对应于一套工艺的门级网表,这个网表也是使用verilog描述的,重点在于是门级网表,这是与实际电路一一对应好的。在前面的文章中有一篇单独讲解了工艺库的组成,这一章节将会用到该工艺库,并且将UART代码用该工艺库生成对应的门级网表。综合的流程一共分为三步:转化 优化 映射。对于每一步具体的理论解释,烦请参考推荐书籍。那么综合的重点在于哪儿呢?它与PT都有时序约束,两者的区别在哪儿?这些问题将在后面一一解说,说得不好,请大家包涵。
二、综合
综合是一个反复迭代的过程,而迭代的目的在于选择最好的约束条件以生成面积最小,满足时序要求的门级网表,所以,综合的重点在于如何编写合适的约束脚本。
综合的约束条件主要分为设计环境约束、设计规则约束、优化约束、时钟约束这么几类。按照DC 的userguide,时钟约束应该是属于优化约束的一部分,但为了强调时钟约束的重要性,所以单独提出来。每个约束条件的作用都需要慢慢的了解,之后才能加以运用,这在推荐的书籍中有详细的介绍。有关于约束条件的各项参数该如何选取的问题,这只能是依赖于具体的项目才能给出一个具体的值,比如说最大传输延迟,这个参数涉及到实际的版图布局与具体的工艺限制,经过仔细的斟酌才能确定。当然,如此之多的约束条件并不是每一条约束都会使用到,还是要根据具体的项目需求才能确定。
设计环境约束:主要包括工艺条件(最好、典型、最差)约束、输入驱动约束、输出负载约束、线负载模型等约束命令,如下:
set_operating_conditions
//参数在.lib工艺库文件搜索operating,就可以查到
set_drive
set_driving_cell //参数在.lib工艺库文件搜索BUF,就可以查到,当然根据具体需求选择不同的驱动单元。
set_wire_load_modle //参数在.lib工艺库文件搜索wire_load,就可以查到
set_fanout_load
set_min_library
设计规则约束:最大传输延迟约束、最大扇出约束、最大电容负载约束等,如下, set_max_transition
set_max_fanout
set_max_capacitance
优化约束:最大面积约束、输入输出延迟约束等,如下,
set_input_delay
set_max_area
set_output_delay
时序约束:时钟频率约束、时钟不确定度约束、时钟抖动约束、时钟源到目的寄存器延迟约束等,如下,
create_clock
set_clock_latency
set_propagated_clock
set_clock_uncertainty
set_clock_transition
前面提到DC与PT都有时序约束,那它们之间的区别是什么呢?其实,PT的时序约束是针对门级网表(不管是DC生成的门级网表还是从版图导出的门级网表)的,一般不会针对RTL代码进行约束,而DC的时序约束一般是针对RTL代码的,当然,也会用到对门级网表的约束上。PT的时序约束相对DC来讲会更为强大,不然也不会独立出PT软件出来,此外PT中还集成了PTPX功耗分析工具,针对门级网表来分析功耗会更接近实际的电路。这就是DC和PT之间的区别,本人在初学的时候(现在也是在初学状态)一直搞不清这个关系,经过多番参阅书籍,才总结出的这个结论。
关于物理综合。推荐的书籍当中会提到物理综合的概念,物理综合会使用到APR(自动布局布线)工具使用的版图相关文件,其目的在于在综合的时候尽量的综合出更接近实际的电路,避免多次迭代浪费时间,同时也提高了门级网表的精度。由本人最近得到的消息,物理综合这个概念其实已经不常用了,尽管某些厂商仍然还提供plib,pdb格式的物理综合库文件(本章节使用的工艺库就提供了.plib的文件,在综合库文件夹里)。
拓扑结构综合DCG,支持拓扑技术的综合。也会使用到APR(自动布局布线)工具使用的版图相关文件,例如寄生电阻电容文件。本人的理解是,DCG已经取代物理综合成为更好的综合方法。本章示例并未给出DCG的流程,原因在于缺乏所需要的工艺库文件。
二、工艺库说明:
有关工艺库的介绍前文有独立的章节,但针对综合使用的库文件,本人还是需要多说几句,在推荐的书籍《数字IC系统设计》、《集成电路静态时序分析与建模》中对综合流程使用的.lib库文件有着更为详细的介绍,了解这些库文件中代码的含义,会更有助于综合出更优质的门级电路。此外,为了在前期就能够对电路的功耗有一个大致的了解,那么对于综合库的功耗部分内容,应当有相当的了解才可以。
三、工具
综合的工具一般来说都是使用DesignComplier,这似乎没什么可说的。
推荐书籍:《高级asic芯片综合》、 《专用集成电路设计实用教程》
《集成电路静态时序分析与建模》、《数字IC系统设计》、《Design
Compiler User Guide 2016.03-SP2》
四、示例
利用前文提供的UART文件,这里演示一下综合的流程,但仅仅对UART发送模块做综合,UART接收模块留给大家自己去综合,流程都是一样的。
综合所需文件:a,UART发送模块源代码、b,DC设置文件、c,DC约束文件、d,run启动文件,e, .db工艺库文件。其中,DC设置文件、DC约束文件为DC-TCL脚本文件,这就需要大家多少要了解DC-TCL脚本语言;run启动文件则为bash脚本文件。脚本内容如下所示。
run启动文件:
cd work
dc_shell -f
../script/uart_dc.setup | tee ../log/uart_dc.log
tee命令的意思是不仅在终端显示综合过程的信息,也把这些信息保存在文件中。
DC设置文件uart_dc.setup:设置文件中的工艺库即为前文工艺库介绍提到的工艺库,不明白的可以回去再仔细阅读。
#config//设置DC综合时所使用的cpu核心数量
set_host_options
-max_cores 4
#/* specify the
libraries */设置各类工艺库文件路径
set
target_library [list
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys/tt_1v8_25c.db
\
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys/ff_1v98_m40c.db
\
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys/ss_1v62_125c.db
]
set
symbol_library
"/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/symbols/synopsys/smic18m.sdb"
set
link_library [list *
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys/tt_1v8_25c.db
\
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys/ff_1v98_m40c.db
\
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys/ss_1v62_125c.db
]
set
search_library "/home/Lance/synopsys/uart/dc/src \
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/synopsys
\
/home/Lance/synopsys/model/018SC7/SM00LB501-FE-00000-r0p0-00rel0/aci/sc-m/symbols/synopsys"
#读入约束脚本
source
../script/uart_dc.tcl
#/* map and
optimize the design */
compile
#下面这一句就是DCG流程使用的编译命令,用于取代compile
#compile_ultra
#/* analyze and
debug the design */输出各类报告以利于分析优化约束条件
report_timing
-net -transition_time -capacitance -input_pins > ../log/UART_XMTR_timing.rpt
report_timing
-delay_type max > ../log/UART_XMTR_setup.rpt
report_timing
-delay_type min > ../log/UART_XMTR_hold.rpt
report_constraint -verbose > ../log/UART_XMTR_const.rpt
report_qor >
../log/UART_XMTR_qor.rpt
report_area >
../log/UART_XMTR_area.rpt
#/* save the
design database */保存后端版图流程所需要的门级网表和SDC约束文件。
write_file
-format ddc -hierarchy -output ../outputs/UART_XMTR.ddc
write_file
-format verilog -hierarchy -output ../outputs/UART_XMTR.v
write_sdc
../outputs/UART_XMTR.sdc
write_sdf
../outputs/UART_XMTR.sdf
DC约束文件uart_dc.tcl:
#config
#/* read the
design */ analyze +elaborate配合读入设计文件,也可以用read_verilog
analyze -format
verilog -library work [exec cat ../src/uart.f]
elaborate UART_XMTR
-library WORK
#read_verilog
../src/$DESIGN$V
current_design
UART_XMTR
link
#/* define the
design environment */约束设计环境
set_operating_conditions
tt_1v8_25c -library tt_1v8_25c
set_wire_load_mode
enclosed
set_wire_load_model
-name "smic18_wl30"
#set_local_link_library
{slow.db fast.db}
set_load 1
[all_outputs]
set_driving_cell
-lib_cell BUFX16M [all_inputs]
#set_drive 0
Clock
#设计规则约束
#set_max_fanout
5 [get_ports ****]
#set_max_transition
0.3 [get_ports ***]
#/* set the
optimization constraints */时钟定义约束和面积优化约束
create_clock -period 10000 -waveform. {0 5000} [get_ports
Clock]
set_dont_touch_network
[get_clocks Clock]
set_clock_latency
5 [get_clocks Clock]
set_clock_latency
-source 10 [get_clocks Clock]
set_clock_uncertainty
-setup 5 [get_clocks Clock]
set_clock_uncertainty
-hold 4 [get_clocks Clock]
set_clock_transition
-fall 3 [get_clocks Clock]
set_clock_transition
-rise 3 [get_clocks Clock]
set_input_delay
-max 10 -clock Clock [all_inputs]
set_output_delay
-max 8 -clock Clock [all_outputs]
set_max_area 0
#set_fix_multiple_ports_net
–all
uart.f文件:
/home/Lance/synopsys/uart/dc/src/UART_XMTR.v
/home/Lance/synopsys/uart/dc/src/Control_Unit.v
/home/Lance/synopsys/uart/dc/src/Datapath_Unit.v
运行流程:运行run启动文件,DC将会在运行目录下寻找DC设置文件uart_dc.setup,再根据DC设置文件的内容寻找DC约束文件uart_dc.tcl,再根据DC约束文件的内容读入UART代码,运行的流程是串行运行的,看懂这些脚本文件之后就很容易理解。
附图:
文件夹按照如图所示的结构建立。src存放RTL源文件,script存放设置脚本和约束脚本,work为dc软件运行的路径,会产生很多中间文件,log存放产生的各类约束报告,output存放输出的门级网表文件、DDC、sdc文件等。
在理解了每个文件的内容之后,并注意文件的路径依赖关系之后,在终端键入./run即可综合出门级网表文件,sdc约束文件以及各类面积、时序报告。面积、时序报告是一种反馈,它能反映出对设计施加的各类约束是否合理。如果不合理又如何修改约束条件?这部分的内容非常的多,需要结合具体的项目需求才能更好的进行分析。由于本示例并无具体的项目要求,因此,约束条件给得很是宽泛。当接手具体的项目时,将需要根据项目要求来具体决定约束条件,这样才能对综合的本质理解得更加透彻
在得到.v门级网表文件、sdc约束文件之后,这些文件该如何使用呢?这将在APR(自动布局)流程中使用,关于APR,本人不是非常清楚,只是了解过一些,够用就行。推荐书籍《CMOS集成电路后端设计与实战》、《集成电路静态时序分析与建模》,这两本书是基于cadence的Encounter自动布局布线软件的后端版图流程。对后端版图有兴趣的小伙伴,可参阅这些推荐书籍。