ICC布局阶段

在布局规划阶段完成了芯片的整体规划,而布局阶段主要是软件自动的标准单元的摆放。

在布局开始之前,需要对设计进行确认和检查。

主要确认内容包括:

·检查设计中的所有macro是否设置为dont_touch属性。在大多数情况下,宏单元的位置是在布局规划期间确定的,并且其位置是“固定的”。最好再次修复所有宏位置,以防万一在设计计划后手动移动了宏,却忘记了将其fix住,导致在placement阶段使其移动。

Icc_shell>set_dont_touch_placement [all_macro_cells]

·检查placement blockage是否正确添加,以及确认blockage的类型。

·检查TLU+文件是否设置。前面说过这是软件计算RC的查找表,是软件计算timing的基础。

Icc_shell>check_tlu_plus_files       需要三项Passed!

如果还未设置,Icc_shell>set_tlu_plus_files   -max_tluplus $tlup_max    -min_tluplus $tlup_min   -tech2itf_map  $tlup_map

·将所有的scenario都激活。如果没有MCMM,则不用执行该操作。

Icc_shell>set_active_scenarios -all

·将每个scenario高扇出网络以及时钟网络设置为理想的网络。

Icc_shell>set_ideal_network [all_fanout  -flat  -clock_tree]

·检查绕线的layer是否设置正确。如果设置不正确,会影响到工具估算congestion map的准确性。

Icc_shell>report_ignored_layers

设置ignored layer(Eg:ignored M3以下 M5以上的layer)

Icc_shell>set_ignored_layers   -min_routing_layer M3   -max_routing_layer M5

·设置标准单元摆放的约束。一般在电源地Strap下面放置标准单元时,可能会在Strap的地方存在Congestion。这时可以限制工具在电源地Srtap下面少放或者不放置标准单元。举例说明对Pnet(Power net)Placement Blockages的设置:

将M1和M2的PG线下方设置为Partial Blockage:>set_pnet_options-partial {M1 M2}

不允许M1和M2的PG线下方放置任何标准单元:>set_pnet_options-complete { M1 M2}

允许软件在M1和M2的PG线下方放置任何标准单元,在不指定的情况下,软件默认:>set_pnet_options-none {M1 M2}

其中,-paretial option允许软件在pg strap下放置标准单元,但是需注意strap和单元引脚之间的短路,需要满足最小距离的DRC,但这将导致在strap附近的引脚能难以接线,使得拥塞增大。

以上即为布局之前的设计检查。

其中提到了scenario和MCMM(Multi-corner Multi-mode)。

corner是PVT上的区别,一种PVT对应一个corner;mode主要有func和scan。

由于影响cell delay的因素主要有:工艺,电压和温度三种(PVT),由此产生各种corner:
WC:worst case slow,低电压,高温度,慢工艺 -> 一般情况下delay最大,setup 差。
WCL:worst case low-temperature,低电压,低温度,慢工艺 -> 温度反转效应时delay最大,setup差。
LT:即low-temperature,也叫bc(best case fast),高电压,低温度,快工艺 -> 一般情况下delay最小,hold差。
ML:max-leakage,高电压,高温度,快工艺 -> 温度反转效应下delay最小,hold差。
TC:typical,也叫tt,普通电压,普通温度,标准工艺 -> 各种typical。
其中的快、慢和标准工艺指manufacture时的N/PFET的驱动电流值,min对应慢工艺,max对应快工艺。

一个corner和一个mode组成一个scenario 形成不同组合的scenario。针对不同的scenario可以进行不同的功耗以及setup、hold time的优化。

icc中创建不同的scenario的命令为Icc_shell>create_scenario $name 当需要多个scenario时一般可以自己写成一个脚本,设置dc输出的约束条件.sdc文件和相应的RC文件TLU+。

使用set_scenario_options命令设定该scenario对setup hold 或者动态静态功耗进行优化。

在布局前的检查完成之后,接着进行placement flow。

·DFT Setup

DFT全称是Design for test,这一步主要是针对设计中存在scan chains(扫描链)的情况下进行的优化。

为了满足可测试性设计(DFT)的需求(可观测,可控),将设计中所有(或大部分)的触发器连接在一条或者若干条链上,这条链我们称之为scan chain。这步是在逻辑综合工具(Design Compiler)中实现的。在netlist网表中,ICC读到设计进行了扫描链scan chains,需要读入scandef文件。这个scandef文件也是DC输出的。

在ICC中,我们可以用命令icc_shell>check_physical_design   -stage pre_place_opt进行检查,若出现Error:

说明该设计中进行了扫描链设计,但是没有输入scandef文件。

icc_shell>report_scan_chain  可以看到报告中没有任何scan_chain信息,此时我们就需要读入scandef文件。

在绕线资源比较紧张的情况下,在ICC/ICC2中读入对应的scandef,然后让工具做scan chain的reorder,从而缓解绕线资源紧张的状态。原因是:

在DC综合阶段,由于工具并没有所有寄存器的物理位置信息,所以工具默认情况下是按照字母的顺序来做scan chain的插入。大部分情况下,这样的scan chain连接方式并不是最优的。ICC/ICC2中的placement是基于timing和congestion driven的,所以原来两个寄存器(比如下图中的DFF2和DFF3)的scan chain是前后级的关系,但是在ICC/ICC2中可能这两个寄存器离的比较远,这样的情况,就会导致寄存器SI(scan in)端的走线很乱,加重design的congestion issue。而经过scan chain reorder之后,使得走线变得有序。

经过了scan chain reorder之后,设计的走线会变得有序,大大缓解绕线资源。通过飞线图我们可以直观地看出对比。

下面给出一个scandef文件的实例作为参考,其中包括:

在如图的一条scan chain中,+FLOATING中的寄存器单元是可以进行reorder的,软件可以对他们进行走线优化,而+ORDERED 中的是不能做reorder的。

正常情况 scan chain连接是无序的,若无需进行optimize_dft, 则icc_shell>place_opt   -continue_on_missing_scandef

若需要进行optimize_dft,则icc_shell>read_def design_data/ORCA_TOP.scandef  读入scandef文件后,

icc_shell>report_scan_chain,此时发现与开始报告的不同,设计中已经读入了scan chain

在读入了scandef文件后,在最后的place_opt命令里带上-optimize_dft的选项即可对扫面链进行优化。同时,ICC不仅支持place过程的scan chain reordering,也支持clock_opt阶段的scan chain reordering。所以在place阶段用了scan chain reordering之后,务必在clock_opt阶段继续做进一步的优化,减少hold violation的数量。

·Power Setup

功耗优化:芯片的整体功耗分为动态功耗(dynamic) 和静态功耗(Static Powers),又称漏电流功耗(Leakage Power)

其中动态功耗又分为:

·标准单元内部功耗(Internal Power),即短路功耗,即上下PMOS和NMOS同时导通时的功耗。这部分的计算是嵌入library库文件内部,通过标准单元的input transition和output load来查表得到的。

·Switch power,即开关功耗。动态功耗和data的翻转率(TR),静态概率(SP),电压,负载电容相关。这一部分为互连线(net)上的dynamic功耗,这部分的计算通过将所有net上每个翻转周期的功耗乘以其翻转率并相加得到。

在Power Setup中,主要进行优化的是开关功耗,为了优化动态功耗,ICC通常会读入SAIF文件(ICC只识别SAIF文件,可将VCD文件转化为SAIF文件后使用)。Saif文件记录cell和net的switching activity(翻转活动),即记录了上述的翻转率。

·SAIF文件:即switching activity interchange format,开关行为内部交换格式文件,用于仿真器和功耗分析之间交换信息的ASCII文件(美国标准信息交换码文件)。

·VCD文件,即value change dump 文件,它也是一个ASCII文件,文件中包括了一个设计中所选择变量值的变化信息,这些信息通过在仿真testbench中使用“VCD系统函数”得到。

平均功耗分析,分3种情况:

(1)假如有波形文件:最理想的情况是能提供后仿产生的VCD/SAIF文件,通过read_vcd/read_saif将真实的翻转率反标到Net上,然后通过report_switching_activity检查反标率,最后report_power报功耗值。

(2)人为设置翻转率:根据经验值,通过set_switching_activity/set_case_analysis来设置register,clock gate以及memory/blackbox的翻转率,这个经验是从以往项目的仿真得到的,然后通过以下类似下面的命令设置:

reset_switching_activity (重置之前设置的翻转率)
set_switching_activity [get_pins -of_object [all_registers]]   -toggle_rate 0.5   -static_probability 0.5    -base_clock * (设置register的翻转率)
set_switching_activity   -type black_boxes    -toggle_rate 0.1    -static_probability 0.5    -base_clock *    -hierarchy (设置blockboxs上的翻转率)
set_switching_activity   -toggle_rate 0.5    -static_probability 0.5    -base_clock * [remove_from_collection [all_inputs] [get_port -filter "is_clock_used_as_clock == true"]] (设置Input上的翻转率)
set_switching_activity [get_pins -of_object [get_cells -hierarchical * -filter "ref_name =~ *ICG*"]]    -toggle_rate 0.5 -static_probability 0.5    -base_clock * (设置clock gate上的翻转率)
set_case_analysis 1 [get_ports *reset*] (使reset信号不翻转,准静态信号)
set_switching_activity    -toggle_rate 0    -static_probability 1    -base_clock * [get_port *reset*]

(3)使用默认翻转率:最不济的方式就是使用工具默认的翻转率了,通过下面3个变量可以设定。

set_app_var power_default_toggle_rate 0.5 (默认值为 0.1)
set_app_var power_default_static_probability 0.5 (默认值为0.5)
set_app_var power_default_toggle_rate_reference_clock fastest (默认值related)

具体的翻转率的计算以及SAIF文件转换等内荣可以参考https://www.cnblogs.com/IClearner/p/6898463.html(出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner)

读入SAIF文件后,使用ICC的LPP(low power placement)功能,ICC在布局阶段会挪动一些cell,缩短高翻转率的net的长度,降低net上的电容,从而降低与之相连的cell的动态功耗。如下图中,将高翻转率0.8的net长度缩短,以降低动态功耗。

Icc_shell>set_optimize_pre_cts_power_options -low_power_placement true

静态功耗是指逻辑门在不切换时消耗的功耗,其主要由源极到漏极亚阈值泄漏电流引起的,即逻辑门未完全关闭。因此,静态功耗通常称为泄漏功耗leakage power。

每个标准单元的leakage都集成在其library库文件(.lib)中,因此计算leakage power只需在制定条件下将design中所有的标准单元(包括各种Macro)的leakage值相加即可。

单元门的阈值电压和漏电功耗(静态功耗)有如下图所示的关系:

静态功耗与阈值电压呈指数关系。

阈值电压Vt越高的单元,它的漏电功耗越低,但门延迟越长,也就是速度慢;

阈值电压Vt越低的单元,它的漏电功耗越高,但门延迟越短,也就是速度快。

为了满足时序的要求,关键路径中使用低阈值电压的单元(low Vt cells),以减少单元门的延迟,改善路径的时序。而为了减少静态功耗,在非关键路径中使用高阈值电压的单元(high Vt cells),以降低静态功耗。设计者根据设计需求选用不用阈值电压的Cell,取得性能和功耗的折中。

指定多阈值电压约束:icc_shell>set_multi_vth_constraint

指定scenario用于进行静态功耗的优化:icc_shell>set_scenario_options   -leakage_power true

关于低功耗设计在lab2010中只提及saif文件的读入,更多的内容在http://www.cnblogs.com/IClearner/ IC_learner低功耗设计入门中讲解了很多,比如门级功耗优化技术GLPO:Gate-level power opt等,据我所了解还有多电源多电压技术,Multi supply Multi Voltage(MSMV)划分为不同电压域(Voltage Area),也被称为Power Domain的技术。我也还在学习,并且我在跟着lab做的时候都是参考这位大佬的博客内容对lab进行理解的。于是自己也写一下博客记录一下。

最后开始布局,整个placement阶段进行标准单元的摆放命令其实就是place_opt ,但整个placement过程基于Timing Driven和Congestion Driven以及Power Optimization进行,不同的条件下placement的结果和质量,也是不一样的。placement的好坏,直接决定了时钟树的质量和绕线,最终体现为影响芯片的性能。

Timing-driven placement会将拥有时序关系的标准单元放置在接近的位置以减少连线上的RC

较小的timing违例可以在后续步骤中进行修复和优化,而在placement阶段不能出现太大的congestion违例。

place_opt进行以下四个部分,当然这都是软件自己完成的。

命令:Icc_shell>place_opt   -area_recovery   -congestion  -optimize_dft   -power

其中,-area_recovery可以减小非关键路径的单元尺寸,帮助减少congestion和power ,-optimize_dft 和 -power只有当DFT和powery优化的时候需要

-congestion 选项为设计已知congestion比较严重(如第一次使用未带选项进行place_opt发现congestion较严重),或者在布局规划(floorplan)中使用了 “high effort”算法(set_fp_placement_strategy  -congestion_effort high)时需要。

·Initial placement (Coarse placement)

这个步骤就是通常我们所说的Coarse placement。将标准单元粗略摆放好,此时不考虑overlap问题。

·Auto High Fanout Synthesis(AHFS)

这个步骤将design中高扇出的点(时钟信号,reset信号等除外),进行解high fanout操作,优化时序。所以用来做placement的constraint,请务必将其中那些不必要的ideal network移除。

·Logic Optimization

该步骤根据我们添加的选项进行优化,这个过程主要有cell sizing, moving, net spitting, gate cloning, buffer insertion和area recovery这些小步骤组成。

·Placement Legalization

进行legalization操作,将所有的标准单元放置在row上,并且保证所有的cell处于legal的状态,即不存在overlap或者不在对应的row上。

place_opt过后,标准单元应该被正确地摆放在row上,进行设计后的报告

icc_shell>report_congestion -grc_based -by_layer -routing_stage global -search_repair
                    report_design -physical
                    report_qor
                    report_power

分析报告,如果有不满足或者可以更优化的部分,可以使用如psynopt ( -area_recovery  -power)命令在在原有基础上做增量优化。此时设计中最好不要存在Setup的违反,可以存在Max Cap/tran、hold、Min Cap的违反。

保存设计 icc_shell>save_mw_cel -as ORCA_placed    placement阶段结束

ICC图文流程——(三)布局Placement相关推荐

  1. ICC图文流程——(二)布局规划Floorplan

    ICC布局规划 Floorplan是ICC设计流程中非常重要的一环,Floorplan的好坏直接影响到设计的timing和布线布通率, 很多时候流程中反复主要发生在这步. 在ICC student l ...

  2. 数字IC后端流程——(三)布局Placement

    参考原博地址:https://blog.csdn.net/weixin_46752319/article/details/107360843 ICC布局阶段 在布局规划阶段完成了芯片的整体规划,而布局 ...

  3. ICC 图文学习——LAB3:Placement 布局

    floorplan完成了芯片的整体规划后,需要对标准单元进行摆放.布局阶段主要内容包括: · 完成布局和时序优化的设置 · 完成DFT和功耗优化的设置 · 完成标准单元位置的摆放 · congesti ...

  4. ICC图文流程——(六)可造性设计Chip finishing

    ICC可造性设计 chip finishing阶段的主要内容是检查设计,以及为提高良率(yield)和解决物理规则违规做的工作.主要包括以下内容: 这一步通常被成为DFM(Design For Man ...

  5. 数字IC后端流程——(二)布局规划Floorplan

    参考博客原址:https://blog.csdn.net/weixin_46752319/article/details/107313770 ICC布局规划 Floorplan是ICC设计流程中非常重 ...

  6. java寂静岭 攻略,GBA版《寂静岭》HARRY篇图文流程攻略

    "Play Novel: Silent Hill"是KONAMI于2001年3月21日在GBA上推出的一款文字冒险游戏,剧情内容取自同社的恐怖冒险游戏--Silent Hill(& ...

  7. 卡图星小机器人怎么过_《星之卡比星球机器人》图文攻略 全收集图文流程攻略...

    <星之卡比星球机器人>3DS上一款非常好玩的动作冒险游戏,新加入了卡比机甲,玩家可以使用机甲来对付敌人,今天就为大家带来了星之卡比星球机器人全收集图文流程攻略,给那些没玩懂的小伙伴一些参考 ...

  8. icc 颜色 c语言,分色与色彩转换ICC色彩管理的三个C及Lab值

    分色与色彩转换ICC色彩管理的三个C及Lab值 资料来源:<印艺>第304期 作者:钟锦荣 笔者曾在本刊前数期中以『电子分色机是否有存在价值』.『印刷是否不需要分色技术』及今期『三地论坛』 ...

  9. Ubuntu18.04安装ros(顺利解决 sudo rosdep init 与 rosdep update 存在的问题,附保姆级图文流程)

    Ubuntu18.04(Ubuntu20.04)安装ros(顺利解决 sudo rosdep init 与rosdep update 存在的问题,附保姆级图文流程) 前言 安装了很多次,东拼西凑好多博 ...

最新文章

  1. Windows打印体系结构之打印驱动框架
  2. Canvas的save和restore方法
  3. #pragma pack(push,1)与#pragma pack(1)的区别
  4. 【CodeForces - 920E】Connected Components? (dsu,补图连通块,STLset+map,bfs 或bitset)
  5. 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)
  6. Struts2+Spring+Hibernate step by step 11 ssh拦截验证用户登录到集成
  7. 布隆过滤算法c语言,通过实例解析布隆过滤器工作原理及实例
  8. CentOS安装SonarQube7.9.1
  9. Mac PS 之 简单去除背景并设置背景透明,变更图片宽高。。。
  10. 三星android 8.0 流畅,三星Galaxy S8使用安卓Android 8.0:更顺滑更流畅
  11. flutter showDialog/AlertDialog 报错:No MaterialLocalizations found
  12. C语言实现简单状态机
  13. I219-V 14代 win7x64驱动程序
  14. python编写一个接口,链接mysql数据库查询数据
  15. 解决微信电脑版备份,手机端出现目前网络状况复杂的问题:当前网络状况复杂,请尝试使用其它网络
  16. 水晶报表(Crystal Report)- 水晶报表常见问题总结
  17. 新绝代双骄3终极全攻略1
  18. P2P之关资金存管(二)模式
  19. matlab中示波器如何使用,[原创]Matlab上位机示波器(中) · 立羽博客
  20. Select下拉框实现中国省市区三级联动

热门文章

  1. 其实你的AI技能并没有那么值钱\n
  2. InputReader读取rawEvent解析
  3. java h5在线音频_html5 mp3音频播放代码网页在线录音
  4. Redis学习笔记(实战篇)(自用)
  5. 互联网日报 | 3月5日 星期五 | 抖音成为2020欧洲杯官方合作伙伴;携程GMV连续三年全球旅企第一;华为发布好望云服务...
  6. 微擎支付返回商户单号_微信刷脸支付流程是怎么样的?
  7. 冒泡排序--咕噜咕噜
  8. linux命令 ln命令 ln -s命令
  9. 4.jetson更换python版本
  10. 淘晶驰芯片AIHMI简介