tfpwl_lj的个人空间 https://blog.eetop.cn/1638430 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Asic设计学习总结-综合

热度 4已有 7166 次阅读| 2018-3-7 20:01 |系统分类:芯片设计

一、前言

什么是综合?综合就是将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

 

前面提到DCPT都有时序约束,那它们之间的区别是什么呢?其实,PT的时序约束是针对门级网表(不管是DC生成的门级网表还是从版图导出的门级网表)的,一般不会针对RTL代码进行约束,而DC的时序约束一般是针对RTL代码的,当然,也会用到对门级网表的约束上。PT的时序约束相对DC来讲会更为强大,不然也不会独立出PT软件出来,此外PT中还集成了PTPX功耗分析工具,针对门级网表来分析功耗会更接近实际的电路。这就是DCPT之间的区别,本人在初学的时候(现在也是在初学状态)一直搞不清这个关系,经过多番参阅书籍,才总结出的这个结论。

关于物理综合。推荐的书籍当中会提到物理综合的概念,物理综合会使用到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存放设置脚本和约束脚本,workdc软件运行的路径,会产生很多中间文件,log存放产生的各类约束报告,output存放输出的门级网表文件、DDCsdc文件等。

在理解了每个文件的内容之后,并注意文件的路径依赖关系之后,在终端键入./run即可综合出门级网表文件,sdc约束文件以及各类面积、时序报告。面积、时序报告是一种反馈,它能反映出对设计施加的各类约束是否合理。如果不合理又如何修改约束条件?这部分的内容非常的多,需要结合具体的项目需求才能更好的进行分析。由于本示例并无具体的项目要求,因此,约束条件给得很是宽泛。当接手具体的项目时,将需要根据项目要求来具体决定约束条件,这样才能对综合的本质理解得更加透彻

在得到.v门级网表文件、sdc约束文件之后,这些文件该如何使用呢?这将在APR(自动布局)流程中使用,关于APR,本人不是非常清楚,只是了解过一些,够用就行。推荐书籍《CMOS集成电路后端设计与实战》、《集成电路静态时序分析与建模》,这两本书是基于cadenceEncounter自动布局布线软件的后端版图流程。对后端版图有兴趣的小伙伴,可参阅这些推荐书籍。

 

3

点赞

刚表态过的朋友 (3 人)

发表评论 评论 (1 个评论)

回复 我要成为架构师 2021-8-7 20:15
顶一个

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 74

    粉丝
  • 38

    好友
  • 42

    获赞
  • 52

    评论
  • 4344

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-27 12:41 , Processed in 0.020325 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部