EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 605|回复: 1

[转帖] 自动布局布线(Astro)

[复制链接]

29

主题

6

回帖

226

E币

技术员

Rank: 2

积分
65
发表于 2020-4-10 18:18:24 | 显示全部楼层 |阅读模式
Astro中的布局布线流程和注意事项
1 Astro中的布局布线流程
Asro是功能强大的布局布线工具,其基本流程如下:
1、读入网表,跟foundry提供的标准单元库和Pad库以及宏模块库进行映射;
2、整体布局,规定了芯片的大致面积和管脚位置以及宏单元位置等粗略的信息;
3、读入时序约束文件,设置好timing setup菜单,为后面进行时序驱动的布局布线做准备;
4、详细布局,力求使后面布线能顺利满足布线布通率100%的要求和时序的要求;
5、时钟树综合,为了降低clock skew而产生由许多buffer单元组成的“时钟树”;
6、布线,先对电源线和时钟信号布线,然后对信号线布线,目标是最大程度地满足时序;
7、为满足design rule从而foundry能成功制造出该芯片而做的修补工作,如填充一些dummy等。

七大步骤的流程,其中每大步骤里面包含小的步骤,并根据各个不同的芯片特点而有很多的变化,流程依次如下:
Design_setup
该流程如下:
1、创建库,库的名称最好就是前端输入的网表文件的名称,如H053A,需要提供技术文件,如smic18_6lm.tf,注意把大小写设置为敏感; 命令是cmCreateLib
2、添加参考库,主要包括foundry提供的(也可能是第三家公司帮忙foundry做的库,如Artisan的库)标准单元库和IO库,以及前端定制的宏单元库,如cache,RAM,ROM,PLL等;添加完毕之后显示参考库以确认; 命令是cmRefLib和cmShowRefLib
3、读入前端网表,注意拿到网表后往里面手动添加电源PAD和CORNER单元,读入的应该是经过这步添加的网表;命令是auVerilogIn
4、展开网表,因为一般读入的是层次化的网表,需要flatten; 命令是cmCmdExpand
5、打开第一步创建的库并且新创建一个CELL,名字也最好是跟网表文件名称一致;命令是geOpenLib和geCreateCell
6、绑定,就是把展开的网表绑定到刚创建的CELL中,这样,这个CELL就包含了网表中的所有元件;命令是axgBindNetlist
7、保存网表的层次化信息到Astro的数据库中;这样布局布线结束后能输出层次化的网表进行后仿。注意,要先initial hierarchy preservation,然后mark module instances preserved;
8、保存CELL,并另存一份备份。命令是 (dbSaveCell (geGetEditCell)) 和geSaveAs
Floorplanning
该流程如下:
1、Load TDF文件,这一步通常可以这样做:先Setup floorplan,然后dump io pins,修改dump出来的tdf文件,把各个PAD放到合适的位置,然后再把这个修改好的文件load进来;命令是axgLoadTDF
2、Setup floorplan,注意设置合适的参数;命令是axgPlanner
3、Connect ports to PG,这一步把网表中元件端口中电源和地部分标志为VDD和VSS,并且所有1和0也分别标志为VDD和VSS,这样以后布线的时候这些就能自动连接到电源和地上;命令是aprPGConnect
4、放置宏单元模块;手动操作,脚本控制;
5、创建core的电源环;命令是axgCreateRectangularRings
6、创建core的电源条带,使供电更充分;命令是axgCreateStraps
7、把宏单元和PAD的电源和地连接到电源环上或者电源条带上;命令是axgPrerouteInstances
8、把floorplan 的信息dump出来保存备用;命令是axgDumpFloorPlan
9,保存CELL,并另存一份备份。
Timing setup
该流程如下:
1、Load 前端用DC写出的SDC时序约束文件;命令是ataRemoveTC然后ataLoadSDC
2、检查该文件是否约束完全,与前端讨论哪些是可以忽略的;命令是astTimingDataCheck
3、设置时序面板,此时可以选择比较宽松的约束,如ignore interconnect;命令是atTimingSetup
4、report timing,此时应该是有比较大的余量的,这样后面计算实际延时时才可能满足;命令是astReportTiming
5、保存CELL,并另存一份备份。
standard cell placement
该流程如下:
1、如果网表中有扫描链就先抽取扫描链信息然后去除扫描链,等时钟树综合完毕再还原扫描链,这样能避免拥塞;命令是axgScanTrace然后axgScanChainOptim
2、设置placement选项,时序驱动时要把timing,以及congestion都选上;命令是astPlaceOptions
3、预布局优化,通过优化高扇出点等产生一个种子网表(意思是高扇出点被“打烂”,加进去的buffer象种子一样散落于芯片各处,使得没有过高负载的点);astPrePS
4、标准单元放置;astPlaceDesign
5、 优化标准单元的位置;astPostPS1
6、 保存,备份。
cts
流程如下:
1、设置时钟综合选项,选上时序;astClockOptions
2、时钟树综合;astCTS
3、修改时序面板,ignore propagated clock和ingore clock uncertainty互换选择;atTimingSetup
4、把扫描链重新连接上;axgScanChainOptim
5、优化标准单元放置;astPostPS
6、时钟树优化;astCTO
7、报时序,此时应该为正,否则继续优化;astReportTiming
8、保存,备份。
Routing
流程如下:
1、标准单元电源连接;axgPrerouteStandardCells
2、设置布线选项;axgSetRouteOptions
3、时钟信号布线;axgRouteGroup
4、信号线自动布线,规模较小可以直接AutoRoute,也可以分四步做;axgAutoRoute
5、有violation就Search&Repair;axgSearchRepair
6、布线后时钟树优化;astPostRouteCTO
7、布线优化;astPostRT
8、DRC,这要花比较多时间,可以先不做,等到后面版图合并完了用专用的工具做;geNewDRC
9、保存,备份。
dfm
流程如下:
1、修天线违规;先Load天线规则,然后axReportAntennaRatio (geGetEditCell) 有violation那么就axgSearchRepair,还有violation就axgInsertDiode
2、加PAD FILLER,组成PAD电源环;axgAddPadFiller
3、在Core中填充FILLER CELL;axgAddFillerCell
4、在电源环开槽;axgSlotWire
5、Fill Notch&Gap;命令是geNewFillNG
6、填充金属dummy,选2到3倍间距;axgFillWireTrack
7、最后的DRC和LVS,如果有违规就要Search&Repair;geNewDRC和geNewLVS
8、输出三种文件;auStreamOut、astDumpHierVerilog、ataDumpSDF
9、保存。

Astro 流程注意事项

1、目录和文件管理:在主目录下面建立以下几个主要的工作目录
1)backend 主要用来存放后端人员编写的TDF文件
2)frontend 存放前端的.v以及.sdc文件
3)lib 存放reference library ,技术文件,以及需要建立的主库
4)scripts 存放参考脚本文件
5)report 从Astro倒出的数据放在这里,比如.vg .sdf .spef等文件以及每次时序报告
6)work 工作目录,从这里启动Astro。存放日志、命令历史、时钟树Buffer等文件,这里记录着Astro工作的轨迹。每次需要重新        开始做的时候,可以把这里面自动生成的cmd 以及log等各种文件删除
7)star 为StarRCXT抽取时序参数而建立的工作目录,在这启动StarRCXT

2、TDF文件注意:Astro对TDF有特定的识别方式,后端人员在编写TDF文件时必须符合格式要求,否则floorplan时可能得不到符合预期的结果,如正方形变长方形。Astro中的PAD order,假设有208个PAD: 特别注意CORNER的order,另外每边都要从1到53(或从53到1)。如果不紧密排放,那么就按照location来写,这样能控制相邻PAD之间距离,也需要注意CORNER的位置。

3、关于时钟信号PAD 摆放:一般放在某边的中间位置,bottom的第25号PAD,这样时钟树能生长的比较正,有利于clock skew的降低。关于电源PAD,要均匀分布,这样能使供电充分;另外电源PAD不要放在每边的开始以及结束处,原因是可能造成不能直连到core ring 电源环上,影响布线。

4、关于电源strap放置。macro单元边上放strap,使该宏模块周围的standard cell 由这些strap供电,而不用跨过macro再连到core ring上,这能省下macro 上层的布线资源给信号线用。可以通过route setup 里面的 create route guide 把no automatic preroute on layer M1,M2,M3,M4,M5,M6全选上。

5、电源ring和strap布置完毕,preroute电源(macro,,pad,此时不必给标准单元也连接电源)后,要进行verify PGconnectivity。

6、在做placement时,如果可利用面积比较大,(core的使用率不是特别大),推荐strap下面不要放置标准单元;在strap下面不放标准单元的方法:先在place common options里选择no standard cells under preroute of M1-M6;再 axgPlaceDesign。

7、时钟树综合结束,开始布线,第一步是连接标准单元的电源和地,之前其他的大步骤中都不需要连接标准单元的电源线和地线       连接结束后同样要进行verify PGconnectivity!

8、布局布线完毕,timing report没有问题之后,可以提取hierarchy netlist 和 SDF 以及SPEF文件给前端人员做静态仿真(formality 以及PrimeTime);DFM结束之后再报timing和做DRC,之后再次提取这些文件做后仿,此时包含了dummy元素的影响,最接近实际。一般比较大的case不做动态仿真,因为比较消耗时间。

9、FillWireTrack时,不要选择self,多一个FILL VIEW比较好,只是注意后面用StarRCXT抽取参数时,cmd文件要保证抽取的参数包含了FILL的寄生参数影响;以及在倒gds文件时把FILL选上。选择2到3倍间距,能保证金属密度,又不易有mini spacing错误。

10、前端网表更新之后,要重新开始整个流程:把Astro 退出,删除主库,删除 .cmd以及 .log文件,然后再次建库。

11、为了验证前端网表是不是有物理错误,可以先不选择Timing Driven,而仅仅布局布线,确定无误了,再从Timing Setup这步开始Timing Driven 的布局布线流程。

12、关于时序面板的设置。这个是时序驱动的布局布线中非常重要而又容易忽略的;Ignore Clock Uncertainty不能选择,应该采用由SDC文件设置的Uncertainty。CTS结束之后面板设置改变为如下:
不能Ignore Propagated Clock;时钟树综合完了Clock Uncertainty就确定了,Ignore Clock Uncertainty不能选上。时序面板中的
Model选项卡在布线前后也需要改变,布线前的Net Delay Model是 Elmore,计算延时是用的Virtural_RC,是近似的而不是精确的布线结束之后,就应该把上述模型选择为AWE或者Arnoldi,这时计算的延时就是比较精确的。
积分规则
回复

使用道具 举报

0

主题

4

回帖

6

E币

技术员

Rank: 2

积分
4
发表于 2020-9-4 10:35:32 | 显示全部楼层
这么古老的工具,还有人用吗?  ICC取代Astro也十多年了。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-20 07:49 , Processed in 0.042143 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表