ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ICC布局布线 第五课 实践课(2)

2020-12-01 16:34:08  阅读:587  来源: 互联网

标签:set CTS ICC clock tree 第五课 布线 时钟


第五课 Clock tree synthesis

做CTS的前提:
1.cell都放在了正确的位置上,可以用以下命令进行检查:

check_legality -verbose

2.power和ground都已经经过了预布线

3.高扇出的信号,例如使能信号已经用相应的buffer综合完毕。

***milkway本质上是一个数据库,database很容易崩溃(数据量过大),因此要及时保存自己的设计。
除了milkway以外,也可以用write_verilog或write_def来输出布局布线好的设计,但是可能会丢失一些信息。

create_clock			#第一步:创建时钟
set_clock_option		#第二歩:设置选项
clock_opt					#第三步:优化
#时钟树优化也分成两部分:
compile_clock_tree
optimize_clock_tree  #这两个命令合起来等价于clock_opt

mark_clock

第一步:创建CTS

create_clock和create_generated_clock的区别
用create_clock定义的pin会被ICC识别为except pin,别的CLK信号无法穿过,而generated clock则可以被穿过。

  • pins
    pin的几个类型:
    stop pins:常规的寄存器时钟pin
    nonstop pins:generated clock和integrated clock_gating(ICG)的pin等,都是可以穿过的pin。
    implicit exclude pins:
    在这里插入图片描述
    另外clock tree和data path所用到的buffer是不一样的, CTS的buffer会尽量保证上升/下降时间相同。

第二歩:设置选项

  • define attributes
    可以设置一些时钟树的属性:
set_driving cell -lib_cell mylib/CLKBUF [get_ports CLK1]
set_input_transition -rise 0.3 [get_ports CLK1]

在这里插入图片描述

  • clock tree exceptions
    在这里插入图片描述
    可以手动改变某几个pin的种类,在-float_pins选项当中的数值表示这个路径上的延迟,要求时钟总延迟+数值=时钟树的长度,因此如图中的-0.5就会使时钟树变长,正值则会使时钟树变短。
    还有一些dont touch的选项如下:
    在这里插入图片描述
  • balance multiple clocks
    用于平衡不同时钟之间的latency,软件会在多个时钟中寻找延迟最大的时钟,并使其它时钟的时钟树变长以适应该时钟。常见于多时钟域/异步时钟的设计。
balance_inter_clock CLK1 CLK2 ……
set_inter_clock_delay_options -balance_group {CLK1 CLK2}

第三步:优化

  • specify routing rules
    在这里插入图片描述
    为时钟树的布线设置规则
    ***在布局布线完毕之后有的部分触发器会挤在一起(从而节省面积),这时若时钟树的routing rule太过悲观可能会找不到地方给寄存器布线,因此需要调整设置为较乐观的选项。

  • 其它
    OCV:共享路径上不会用OCV分析,只会在分叉的时钟树上分析,因此要尽量增加共享路径。
    Logic-level:set_clock_tree_options -logic_level_balance true
    可以在逻辑层面上优化时钟树。
    绕线:route_zrt_group -all_clocks
    移除:remove_clock_tree

  • I/O timing
    做CTS之前sdc文件中的latency是0,因此在做完CTS之后需要重新调整I/O的输入输出延迟。

实践课(2)

用ICC作pretiming
做place之前首先做check_timing,可以检查.sdc文件或者设计是否有问题

设置脚本

脚本名称:clock_opt_cts_icc.tcl

首先可以给CTS的buffer设置独有的前缀/后缀:

set_app_var cts_instance_name_prefix CTS

然后规定具体的布线规则:

define_routing_rule $ICC_CTS_RULE_NAME -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule $ICC_CTS_RULE_NAME -use_default_routing_for_sinks 1
#第二条命令的意思是紧接在DFF时钟端口的buffer可以用默认的布线规则(而不需要遵守时钟布线规则)
#数字越大,允许的级数就越大

时钟屏蔽线的NDR:
在这里插入图片描述
当时钟和其它信号线之间的串扰比较严重,可以在中间放置接地的屏蔽线。
时钟的routing优化:
在这里插入图片描述
连接P/G(power/ground):
在这里插入图片描述
前端设计中没有P/G设定,后端中P/G则需要全部连接在power rail上,此时物理上连接了而逻辑上没有连接,因此derive_pg_connection可以在逻辑上连接P/G的pin

做完CTS以后移除ideal network:
在这里插入图片描述

时序报告

两条命令检查CTS结果,很重要

report_clock_tree
report_clock_timing		

单独输出某一条:

report_delay_calculation -from ... -to ...

此命令可以显示某一条路径的延迟时怎么计算出来的:
在这里插入图片描述
其它:

set_clock_tree_reference  #设置时钟树所用的buffer
mark_clock_tree   #标出特殊的时钟树

其它操作

cell density最好不要超过85%,否则布线可能会出现麻烦

create_placement_blockage -type {hard partial soft}
											-coordinate {}
											-percentage
											#对某个区域的cell布局做不同程度的限制
											#soft的情况下只对high-pin cell做限制
set_keepout_margin

标签:set,CTS,ICC,clock,tree,第五课,布线,时钟
来源: https://blog.csdn.net/qq_38453556/article/details/110223241

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有