
数字后端
-
2023年3月19日发(作者:小学安全教育内容100条)dbAddAntennaLayerRule_libId4"VIA12"20'(0.203083.3375)
dbAddAntennaLayerRule_libId4"VIA23"20'(0.203083.3375)
dbAddAntennaLayerRule_libId4"VIA34"20'(0.203083.3375)
dbAddAntennaLayerRule_libId4"VIA45"20'(0.203083.3375)
dbAddAntennaLayerRule_libId4"VIA56"20'(0.203083.3375)
Astro笔记Yuzh2009-11-13
Astro是数字后端的布局布线的重要工具,还数字后端设计中,关于Astro的设计主要由以下几部分组成:
【1】新建一个pnr文件夹,在其子目录下创建clfconsinlogliboutrptscripttf以及一个
makefile文件
【2】clf文件夹中主要存放工艺延时功耗负载等相关文件以便导入主要可以有以下几个部分:
antenna_**.*.*.可以由Foundry提供的工艺库文件中拷贝
【3】cons文件夹中主要存放MacroPADLocationa文件PinLocation文件,dbdefine文件以及antenna
rules文件以便导入设计中使用
【4】in文件夹中主要存放有DC综合后生成的综合网表*.sv文件时序约束文件*.sdc以及*.sdf文件,
但是需要对sdc文件进行相关修改后才能作为Astro布局布线的时序约束参考因此需要有一个Makefile
文件对其内容进行修改
【5】lib文件夹中存放有standardcell的工艺库文件(如silterra18)Foundry工艺库中拷贝
【6】tf文件夹中存放有设计工艺库的技术文件(如silterra18_*)Foundry工艺库中拷贝
【7】script为了布局布线修改方便常会将运行的Astro命令导出到相应的脚本文件中,CTS前布局一次为一
个脚本,CTS后优化布局为一个脚本,最后布线以及check为一个脚本,存放在script文件夹中分别
命名为pnr___
【8】其余的文件夹分别存放输出的报告和网表以及gds文件,其中log文件夹中为Astro运行报告,rpt中
为
AstroCTSclockskew分析报告,out中为gds文件和布局布线后网表,以及WireRC参数提取文件
*spef
Antenna_rules文件是截取Antenna_rules_*文件的一部分一般只截取dbAddAntennaLayerRule的定义设计
中如下截取:
define_libId(dbGetCurrentLibId)
dbDefineAntennaRule_libId4200
dbAddAntennaLayerRule_libId4"METAL1"400'(0.2030400.002200)
dbAddAntennaLayerRule_libId4"METAL2"400'(0.2030400.002200)
dbAddAntennaLayerRule_libId4"METAL3"400'(0.2030400.002200)
dbAddAntennaLayerRule_libId4"METAL4"400'(0.2030400.002200)
dbAddAntennaLayerRule_libId4"METAL5"400'(0.2030400.002200)
dbAddAntennaLayerRule_libId4"METAL6"400'(0.20308000.0030000)
Astro笔记Yuzh2009-11-13
dbDefine文件是为了Astro做时钟树综合优化时作准备的,在CTS之前需调用该文件,Astro做时钟树时只对它
默认的DFF的时钟管脚做相关处理一般是定义了clock但我们设计需要对一些多扇出的复位信号scan链信号做处
理就需要专门声明下这也是时钟树需要处理的信号,就在dbDefine做这样的声明,一般有同步复位、异步复
位、scan_enable以及宏单元的clk信号,异步复位最常用需要做scan链才定义SE,有Memory时才定义clk,
具体设置如下:
(let*(
(selectedlist(geGetSelectedSet(getEditWindow)))
)
(for-each(lambda(x)
(let*(
(instName(dbFetchObjectField(geGetEditCell)x"name"))
)
(dbDefineSyncPin(geGetEditCell)instName'(("RN""nonInvertRise"0)("RN""invertRise"0)))
(dbDefineSyncPin(geGetEditCell)instName'(("SN""nonInvertRise"0)("SN""invertRise"0)))
;;(dbDefineSyncPin(geGetEditCell)instName'(("SE""nonInvertRise"0)("SE""invertRise"0)))
;;(dbDefineSyncPin(geGetEditCell)instName'(("CLK""nonInvertRise"0)("CLK""invertRise"0)))
)
)
selectedlist
)
)
tdf文件定义相关的PAD或者是PIN的位置信息,坐标描述方法基本一致设计中根据实际的需要略有不同如
下:
tdfPurgePadConstr
definestep15
defineoffset50
defineoff0
pin"clk"3900"right"0(set!offset(+step1offset))
pin"rstn"3900"right"0(set!offset(+step1offset))
pin"scan_mode"3900"right"0(set!offset(+step1offset))
pin"mic_fm_sel"3900"right"0(set!offset(+step1offset))
在Astro布局布线时需要根据DC综合时设置生成的时序约束文件对相关cel(lstandardcell)进行布局优化,
通常在Place设置时考虑congestion和time因素,通常考虑关键性的时序路径,满足设计的时序约束条件,而对
于非关键路径的cell可以放置的远离些,增加延时,如果将非关键路径的cell布局在关键时序路径布局区域就
会对其产生影响,使其布线拥塞增加布线难度。
Astro笔记Yuzh2009-11-13
而对于DC生成的时序约束文件并不是直接就是导入使用,DC中估算连线延时采用wire_load_model的方
法估算,但在Astro中我们实际对cell进行布线直接提取wire连线的RC信息计算netdelay更为精确接近实际设
计,同时对各个时钟的uncertainty的定义也不需要了,CTS后各个时钟负载和延时可以达到最佳平衡uncertainty
只由jitter引起,虽然还是会存在skew(几乎可以忽略),latency主要有2部分组成source_latency和
network_latency一般设计只考虑network_latency,Astro不需要设置network_latency,CTS后各个DFF的
network_latency的基本平衡了。具体脚本如下:
#!/bin/bash
#echo"Enterthefilename(.sdc)"
filename=ADPCM_Encoder
run:
#read$(filename)
cp$(filename).sdc$(filename).
echo":%s/set_wire_load_model/#set_wire_load_model/g">$(filename).vimrc
echo":%s/-dont_scale//g">>$(filename).vimrc
echo":%s/set_isolate_ports/#set_isolate_ports/g">>$(filename).vimrc
echo":%s/set_clock_latency/#set_clock_latency/g">>$(filename).vimrc
echo":%s/set_clock_uncertainty/#set_clock_uncertainty/g">>$(filename).vimrc
echo":w!">>$(filename).vimrc
vim-e-s$(filename).sdc<$(filename).vimrc
rm$(filename).vimrc
Astro笔记Yuzh2009-11-13
Astro布局布线主要流程
*******************************************************************************************
之前布局布线以及优化设置
*******************************************************************************************
【1】设置db库总线名称属性类型
dbSetLibBusNameStyle“lib/silterra18”“[%d]”
【2】导入相关db文件到工艺库文件
Tools>CellLibrary>hePrepareLogicalLibrary
heLIB/DBbutton
gePrepLibs
setFormField"LibraryPreparation""LibraryName""lib/silterra18"
formButton"LibraryPreparation""importLMDB"
formButton"LibraryPreparation""selectDB"
setFormField"LibraryPreparation""MinDBToImport""../dc/lib_syn/db/"
setFormField"LibraryPreparation""MaxDBToImport""../dc/lib_syn/db/"
formOK"LibraryPreparation"
Astro笔记Yuzh2009-11-13
【3】根据设计层次导入库技术文件*.tf
TechFile>Replace
cmReplaceTech
setFormField"ReplaceTechnologyFile""LibraryName""lib/silterra18"
setFormField"ReplaceTechnologyFile""TechnologyFileName""tf/silterra18_"
formOK"ReplaceTechnologyFile"
【4】读入DC综合的网表根据设计约束对照LIB库进行cell的映射,此类映射方法有2种。
老系统:创建项目Lib--Æ获取RefLib--Æ读入网表--Æ展开网表--Æ打开Lib创建项目Cell--Æ
将网表绑定到Cell
新系统:直接读入网表创建Cell后打开该Cell将上述旧系统的几个步骤合成一个完成
老系统
ILibrary>create
cmCreateLib
setFormField"CreateLibrary""LibraryName""ADPCM_Encoder"
setFormField"CreateLibrary""TechnologyFileName""tf/silterra18_"
formOK"CreateLibrary"
Astro笔记Yuzh2009-11-13
IILibrary>addRef
cmRefLib
setFormField"RefLibrary""LibraryName""ADPCM_Encoder"
setFormField"RefLibrary""RefLibraryName""lib/silterra18"
formOK"RefLibrary"
IIINetlistin>VerilogIn
auVerilogIn
setFormField"VerilogInDataFile""VerilogFileName""in/ADPCM_"
setFormField"VerilogInDataFile""LibraryName""ADPCM_Encoder"
setFormField"VerilogInDataFile""NetNamefor1'b0""VSS"
setFormField"VerilogInDataFile""NetNamefor1'b1""VDD"
formOK"VerilogInDataFile"
Astro笔记Yuzh2009-11-13
IVNetlistin>Expand
cmCmdExpand
setFormField"ExpandNetlist""LibraryName""ADPCM_Encoder"
setFormField"ExpandNetlist""UnexpandedCellName""ADPCM_"
setFormField"ExpandNetlist""ExpandedCellName""ADPCM_"
formOK"ExpandNetlist"
VLibrary>Open
geOpenLib
setFormField"OpenLibrary""LibraryName""ADPCM_Encoder"
formOK"OpenLibrary
VICell>Create
geCreateCell
setFormField"CreateCell""CellName""ADPCM_Encoder_cel"
formOK"CreateCell"
Astro笔记Yuzh2009-11-13
VIIDesignSetup>BindNetlist
axgBindNetlist
setFormField"BindNetlist""NetCell""ADPCM_"
formOK"BindNetlist"
新系统
IINetlistin>auVerilogToCell
auVerilogToCell
setFormField"VerilogToCell""LibraryName""ADPCM_Encoder"
setFormField"VerilogToCell""VerilogFileName""in/ADPCM_"
setFormField"VerilogToCell""OutputCellName""ADPCM_Encoder_cel"
setFormField"VerilogToCell""TopModuleName""ADPCM_Encoder"
setFormField"VerilogToCell""TechFileName""tf/silterra18_"
setFormField"VerilogToCell""SetCaseSensitive""1"
setFormField"VerilogToCell""OpenLibraryandCellWhenDone""0"
setFormField"VerilogToCell""NetNamefor1'b0""VSS"
setFormField"VerilogToCell""NetNamefor1'b1""VDD"
formButton"VerilogToCell""refLibOptions"
setFormField"VerilogToCell""ReferenceLibrary""lib/silterra18"
formButton"VerilogToCell""add"
formOK"VerilogToCell"
在导入TDF文件之间可以设置一些我们综合所不使用的cell,这些cell可能在功耗逻辑功能上等方面不符合设计
所要求,所以要提示astro不会综合优化时使用这些cell命令如下:
astSetDontUse"*.*"#t
例如
astSetDontUse"SDN_BUFTS_*"#t
astSetDontUse"SDN_BUSH_*"#t
astSetDontUse"SDN_DEL_*"#t
Astro笔记Yuzh2009-11-13
【5】导入编辑好的Pinlocation文件(*.tdf)
DesignSetup>LoadTDF或者Timing>LoadTDF
AxgLoadTDF
setFormField"LoadTDFFile""CellName""ADPCM_Encoder_cel"
setFormField"LoadTDFFile""TDFFileName""cons/ADPCM_"
formOK"LoadTDFFile"
TDF中特别注意出PIN层数,一般考虑不要与电源环同层,电源环一般设置METAL1和METAL2,那么横向处
PIN最好就设置成METAL2纵向出PIN设置成METAL3,查看*.tf文件得到METAL2和METAL3的层数,不同工
艺电源环设置可能有所不同视具体情况而定
【6】设计大范围的布局包括定义设计Core的尺寸,绕线金属层次等
Core面积设置有几种方式一般设置高和宽以及Row在整个Core中所占比重,所有的cell必放置在row上按一定
的规格排放,因此如果Row/Core的比重越大说明整个Core中用来放Cell部分越多,用来绕线的部分比重小,一
般同层只能在2个row相隔空间进行绕线或者其它层走线,而DoubleBack、StartFirstRow和FlipFirstRow只
是Row排放的设置选项,这个在help文件中有详细说明,MaxMetalRoutingLayer是指最大的金属走线层,一
般在数字部分会用四层走线,如果是六层工艺,余下的两层会留给版图走线使用。
DesignSetup>SetUpFloorPlan
Astro笔记Yuzh2009-11-13
axgPlanner
setFormField"FloorPlanning""ControlParameter""width&height"
setFormField"FloorPlanning""Row/CoreRatio""1"
setFormField"FloorPlanning""CoreWidth""350"
setFormField"FloorPlanning""CoreHeight""350"
setFormField"FloorPlanning""DoubleBack""1"
setFormField"FloorPlanning""Startfromfirstrow""1"
setFormField"FloorPlanning""Flipfirstrow""1"
setFormField"FloorPlanning""CoreToTop""25"
setFormField"FloorPlanning""CoreToRight""25"
setFormField"FloorPlanning""CoreToLeft""25"
setFormField"FloorPlanning""CoreToBottom""25"
setFormField"FloorPlanning""MaxMetalRoutingLayer""4"
formOK"FloorPlanning"
【7】将网表中映射元件的电源和地标识为VDD/VSS,并且对1’b1和1’b0也处理为VSS和VDD
PreRoute>ConnectPortToP/G
menuReload"Astro"
aprPGConnect
setFormField"Connect/DisconnectPG""NetName""VSS"
setFormField"Connect/DisconnectPG""PortPattern""VSS"
setFormField"Connect/DisconnectPG""NetType""Ground"
formApply"Connect/DisconnectPG"
formYes"DialogBox"
Astro笔记Yuzh2009-11-13
setFormField"Connect/DisconnectPG""NetName""VDD"
setFormField"Connect/DisconnectPG""PortPattern""VDD"
setFormField"Connect/DisconnectPG""NetType""Power"
formOK"Connect/DisconnectPG"
formYes"DialogBox"
【8】创建电源环和地环
要求先创建电源环VDD后创建地环VSS,使得整个Core被外围的VSS隔离,有一定防噪干扰。
PreRoute>RectangularRings
axgCreateRectangularRings
setFormField"CreateRectangularRings""NetName(s)""VDD,VSS"
setFormField"CreateRectangularRings""L-Width""10"
setFormField"CreateRectangularRings""R-Width""10"
setFormField"CreateRectangularRings""B-Width""10"
setFormField"CreateRectangularRings""T-Width""10"
setFormField"CreateRectangularRings""Left""1"
setFormField"CreateRectangularRings""Right""1"
setFormField"CreateRectangularRings""Bottom""2"
setFormField"CreateRectangularRings""Top""2"
formOK"CreateRectangularRings"
Astro笔记Yuzh2009-11-13
【9】电源条带的创建(可选)
电源条带创建方法有2种,一般第二种方式比较方便。第一种方法先画好条带,确定位置,然后到处条带位置
信息到文件保存,以便下次读入使用,导出的信息如下:
define_cell(geGetEditCell)
axCreateWire_cell"VDD"18.58'(130.9852.445)
axCreateWire_cell"VSS"18.445'(120.38513.065)
PreRoute>CustomWires
axgCreateCustomWires
setFormField"CreateCustomWires(UptoTwoNets)""SpecifyNets""byNetName(s)"
setFormField"CreateCustomWires(UptoTwoNets)""Bus/NetName(s)""VSS,VDD"
setFormField"CreateCustomWires(UptoTwoNets)""HorizontalWidth""10"
formHide"CreateCustomWires(UptoTwoNets)"
第二种方法直接创建无需到处处理
PreRoute>Straps
axgCreateStraps
setFormField"CreateStraps""Direction""Vertical"
setFormField"CreateStraps""StartX""150"
setFormField"CreateStraps""NetName(s)""VSS,VDD"
setFormField"CreateStraps""Width""10"
setFormField"CreateStraps""Layer""18"
setFormField"CreateStraps""LowEnds""AtFirstTargets"
Astro笔记Yuzh2009-11-13
setFormField"CreateStraps""HighEnds""AtFirstTargets"
setFormField"CreateStraps""ExtendHigh""1"oundariesandGeneratePins""1"
setFormField"CreateStraps""ExtendLow""1"oundariesandGeneratePins""1"
formOK"CreateStraps"
【10】导入设计约束文件
在布局之前,需要先导入设计的相关约束文件,根据这些约束来放置cell到Core中以便布线方便和满足设计要
求,一般有FanOut/maxtransition/maxcapacitance等,对于关键路径Timingcriticalpath软件尽量会放置cell在
一个区域满足时序要求,对于非关键路径的cell则会远离这些区域避免影响时序和拥塞走线。
Timing>LoadSDC
Astro笔记Yuzh2009-11-13
ataLoadSDC
setFormField"LoadSDCFile""SDCFileName""in/ADPCM_"
formOK"LoadSDCFile"
【11】时序环境设置(可选)
Timing>TimingSetup
时序面板的设置有2种情况PreCTS和PostCTS,这里是在CTS之前,采用理想的uncertainty,但在SDC文
件中我们注释了关于uncertainty的设置可以看成零,因此需要打开ignorePropagatedclock和includeNon
PropagatedNets选项其他值默认设置。对于constraint的设置只有在时序约束比较紧实才设,对于hold、
setup、maxlength等等视情况而定。
atTimingSetup
atTimingSetupGoto"Environment"atCmdSetField
"IgnoreClockUncertainty""1"atCmdSetField
"IgnorePropagatedClock""0"atCmdSetField
"EnableRecovery/RemovalArcs""0"
atTimingSetupGoto"Model"
atCmdSetField"DelayModelCellDelayModel""tlu"
atCmdLoadModels
atTimingSetupGoto"Optimization"
atCmdSetField"OptimizationTargetHoldSlack""0.3"
atCmdSetField"OptimizationHighFanout""15"
Astro笔记Yuzh2009-11-13
atTimingSetupHide
【12】Placement选项设置
放置cell无需过多操作,其他选项默认只需勾起timing优化模式选项。
InPlace>PlacementCommonOptions
Astro笔记Yuzh2009-11-13
astPlaceOptions
setFormField"AstroPlaceOptions""TimingDriven""1"
formOK"AstroPlaceOptions"
【13】设计综合的cell放置到Core
放置cell时候需要打开In-PlacementOptimization选项,可布线层次选择与FloorPlan一致。
InPlace>DesignPlacement
astPlaceDesign
setFormField"AstroPlace-Design""timing/routability""4"
setFormField"AstroPlace-Design""OptimizeNetlist""1"
formOK"AstroPlace–Design"
【14】优化之前设置fanout属性【可选直接命令】
astFanoutSetup
formDefault"FanoutSetup"
setFormField"FanoutSetup""FanoutLimit""15"
formOK"FanoutSetup"
【15】PrePS【可选】
主要用来优化设计的高Fanout的Nets和设计的setup的违例,只能操作一次在CTS之前。
PrePlace>PrePlacementOptimization
Astro笔记Yuzh2009-11-13
astPrePS
setFormField"Pre-PlacementOptimization""High-FanoutCollapse""1"
setFormField"Pre-PlacementOptimization""AreaRecovery""1"
setFormField"Pre-PlacementOptimization""High-FanoutSynthesis""1"
setFormField"Pre-PlacementOptimization""High-FanoutCollapseFanout""15"
formOK"Pre-PlacementOptimization"
【16】设计Place放置后根据时序和约束进行优化【可选一般在第二个脚本CTS后采用但在时序过不了的情况下
可以选用在第一个脚本里cell布局之后前操作一次】
Optimizationphase1只可以优化一次,主要是针对高扇出的Nets以及一些时序优化如maxcapaticance和max
transition
PostPlace>Post-PlaceOptimizationphase1
astPostPS1
setFormField"Post-PlacementOptimizationPhase1""Optimizationeffort""LOW"
Astro笔记Yuzh2009-11-13
setFormField"Post-PlacementOptimizationPhase1""HoldFixing""1"
setFormField"Post-PlacementOptimizationPhase1""PreventXtalk""1"
setFormField"Post-PlacementOptimizationPhase1""RedoHFN""1"
setFormField"Post-PlacementOptimizationPhase1""MaxFanouts""15"
setFormField"Post-PlacementOptimizationPhase1""UseGlobalRouting""1"
setFormField"Post-PlacementOptimizationPhase1""FixMaxLength""1"
setFormField"Post-PlacementOptimizationPhase1""MaxLength""300"
formOK"Post-PlacementOptimizationPhase1"
Post-PlaceOptimization可以操作多次,可以优化布局中的一些violation重新优化布局以满足时序。
PostPlace>Post-PlaceOptimization
astPostPS
setFormField"Post-PlacementOptimization""SetupFixing""1"
setFormField"Post-PlacementOptimization""HoldFixing""1"
setFormField"Post-PlacementOptimization""MaxTranFixing""1"
setFormField"Post-PlacementOptimization""MaxCapFixing""1"
setFormField"Post-PlacementOptimization""AreaRecovery""0"
setFormField"Post-PlacementOptimization""Logic-Remapping""0"
formOK"Post-PlacementOptimization"
【17】保存Cell
Cell>SaveAs
geSaveAs
setFormField"SaveAs""CellName""ADPCM_Encoder_cel_bf_cts"
formOK"SaveAs"
Astro笔记Yuzh2009-11-13
*******************************************************************************************
布局优化
*******************************************************************************************
【1】选定CTS的所有DFF单元
Select>(De)selectbyName
geNameSelect
setFormField"NameSelect""Select""membersofobject"
setFormField"NameSelect""patternmatch""1"
setFormField"NameSelect""Type""cell"
setFormField"NameSelect""Name"".*DFF.*"
formOK"NameSelect"
【2】导入编辑好的Dbdefine文件关闭cell
输入命令:
load'cons/dbDefine
Cell>Closed
(dbSaveCell(geGetEditCell))
geCloseWindow
formOK"CloseWindow"
Astro笔记Yuzh2009-11-13
【3】再次打开cell以CTS
Cell>Open
geOpenCell
SetFormField“OpenCell”“CellName”“ADPCM_Encoder_cel”
formOK“OpenCell”
【4】时钟树标识【选用】
Clcok>Utilities–MarkClockTree
astMarkClockTree
setFormField"MarkClockTree""Options""PropagateNetProperty"
formOK"MarkClockTree"
ClockNetName时钟Net名该项空缺则默认所有的时钟信号都执行操作
MarkClockTree在通常做CTS并不用到,往往用在CTS之前的一些设置:
ResetDontTouch选项复位时钟树的Don’tTouch属性,选择该项允许综合和插入buffer对ClockNet
ResetNetSynthesizedFlag当完成时钟树综合后会产生一个Flag标示,当再次对同一时钟Net做时钟树时会提
示,ResetNetSynthesizedFlag就是用来复位该提示后再继续综合时钟树,这种情况要求不删除原有的时钟树的
前提下进行再次时钟树综合操作。
Astro笔记Yuzh2009-11-13
Fix修复选项不改变Size只改变ClockTreeInvert或者buffer位置和FlipFlops位置
SoftFix只针对ClockTreeInvert或者buffe可以同时修改位置和Size大小
Unfix选择不做修复处理的ClockTreeFlipFlopsOnly或者ClockTreeandFlipFlops
PropagateNetProperty对Net的各类属性(LoadCAP/maxtransition/Fanout等等)可以级联传播到所有时钟树
网络Net
MarkClockNetInDB对milkway的databasenet进行Mark处理
Mark将DB文件中一些Net标识为ClockNet
Reset将上述标识了的Net复原为原来默认的属性
【5】时钟树选项设置和综合
Clock>ClockCommonOptions
时钟树综合选项中主要包括以下几个部分:
Condition:时钟树综合环境一般选用延时最大最恶劣的条件【Worst】
SkewType:Globe不考虑时钟DFF之间的逻辑联系,全局Skew平衡【默认】
Local考虑相互之间有逻辑关系的(即在一条timingarc上的所有DFF的clock平衡)局部Skew
Useful选择性的对某个Clockskew优化以改进整个电路的时序
ClockNet:需要做时钟树的ClockNet
Astro笔记Yuzh2009-11-13
Buffer/Inverts:时钟树综合优化时所选用的cell一般会用到buffer和invert,该选项空时,自动选择库中可以
使用的所有符合要求的buffer和invert,填写需要注意次序,在前面的cell会优先综合使用,对于专门的clock
net则需要专门的clockbuffer和inverter插入改进时序,这些cell可以再lib文件中找到,它们的transition的fall
和rise2种情况比较平衡,不太会出现上升沿和下降沿的延时差别很大的情况,当然也有例外的要根据实际工艺
考虑最佳方案
Target:时钟树综合目标Skew优化后skew控制范围【经验值设置0.2】
InsertionDelay优化InsertionDelay大小范围【经验值设置0.5】
Optimization:优化选项effort时钟树综合力度
BufferRelocationbuffer重新布局
LevelAdjustmentcell所在层次调整
GateSizing门电路Size在优化时允许改变
GateRelocation门电路位置在优化时允许改变
DelayInsertion允许插入Delaycell
【一般选用默认】
时钟树综合优化时采用尽量少的命令实现,如果默认设置优化时能满足要求则最好,如不能才设置ClockTree
Constraints条件,依据LIB库中的工艺要求进行相关调整,如Silterra18工艺中maxtransition最大为3max
cap为1.246000设置这些时可以根据Astro默认值适当的放缩,但不能超过lib的上限,这里设置为0.5和0.6
fanout则需要根据实际情况调整同样不能超过lib库中fanout属性的上限,缩放无所谓规律,目的即达到时钟树
的skew达到设计要求小于0.2ns,可以反复调试
在查验PNR时钟树skew报告时发现skew值过大,或者时钟树未能做上怎么办?
时钟树未做上可能设置的fanout值过大,而实际的clocknet的fanout并没有达到astro默认需要做时钟树的
上限,所以可以修改ClockTreeConstraints中MaximumFanout值减小。
时钟树skew值过大则可能有多种原因,一般需要查看导出的分析报告如下例中所示CLK12M时钟树skew为
0.43ns不符合设计要求。
Astro笔记Yuzh2009-11-13
时钟CLK12M设置的输入驱动强度为CLKBUFX1,在时钟树优化综合时,它的下一级fanout为8驱动8个
CLKBUFX8,报告中可以看出,CLK12M在时钟的rise和fall的transition明显不同,一个为1.75,一个为0.93,
它们是构成skew0.43的主因。
对于驱动8个CLKBUFX8,CLKBUFX1驱动强度不足,需要连接大驱动强度的CLKBUFX2,
CLKBUFX4,然后用CLKBUFX4去驱动时钟网络,这样就不会出现rise和falltransition不平衡的情况,通过修
改网表,再做时钟树综合即能实现。
新的时钟树skew达到0.023ns,完全满足设计要求,看报告发现CLK12M后插入的CLKBUFX2,
CLKBUFX4被优化掉了,最后由CLKBUFX16驱动了8个CLKBUFX8。
Astro笔记Yuzh2009-11-13
修改网表
PostPlace>ChangeNetlist
menuReload"Astro"
astChangeNetlist
setFormField"ChangeNetlist""Operation""InsertBuffer"
setFormField"ChangeNetlist""InsertPortInstName""CLK12M"
setFormField"ChangeNetlist""InsertMasterName""CLKBUFX2"
formApply"ChangeNetlist"
setFormField"ChangeNetlist""InsertPortInstName"""
setFormField"ChangeNetlist""InsertPortInstName""CLK12MASTchgInst3/Y"
setFormField"ChangeNetlist""InsertMasterName""CLKBUFX4"
formOK"ChangeNetlist"
时钟树设置综合
Clock>ClockTreeSynthesis
astClockOptions
setFormField"ClockCommonOptions""ClockNets""CLK12M"
setFormField"ClockCommonOptions""Buffers/Inverters"
"CLKBUFX16,CLKBUFX8,CLKBUFX2,CLKBUFX1"
Astro笔记Yuzh2009-11-13
setFormField"ClockCommonOptions""MaximumFanout""20"
setFormField"ClockCommonOptions""TargetSkew""0.2"
setFormField"ClockCommonOptions""TargetInsertionDelay""0.5"
formButton"ClockCommonOptions""ConstraintSubForm"setFormField
"ClockCommonOptions""MaximumFanout""20"setFormField"Clock
CommonOptions""MaximumTransitionDelay""0.5"setFormField"Clock
CommonOptions""MaximumLoadCapacitance""0.6"setFormField"Clock
CommonOptions""MaximumBufferLevel""20"subFormHide"Clock
CommonOptions"3
formOK"ClockCommonOptions"
astCTS
formOK"ClockTreeSynthesis"
【6】时钟树优化【选用】Clock>ClockTreeOptimization如时钟在综合完成后未能很好的达到设计要求
可以使用优化功能对已做时钟树进行重新优化综合,主要是改变
GateBuffer位置或者大小以及相关布局层主要参数有:
BufferSizing搜索逻辑功能等同的但驱动能力不一样buffer替代以优化时序【默认】
BufferRelocation搜索新位置放置buffer以优化时序和clockinsertiondelay【默认】
GateSizing搜索逻辑功能等同的但驱动能力不一样的门电路替代以优化时序【默认】
GateRelocation搜索新位置放置门电路以优化时序和clockinsertiondelay【默认】
LevelAdjustment调整时钟综合时插入bufferinvert所在的层优化skew【默认】
Reconfiguration重组由同一个buffer或者invert驱动的各个FlipFlop上的时钟pin
DelayInsertion增加短周期路径上的延,在该路径上插入buffer或者invert【默认】
DummyLoad增加短周期路径上的延,在该路径上插入buffer或者invert
Astro笔记Yuzh2009-11-13
astCTO
setFormField"ClockTreeOptimization""BufferSizing""1"
setFormField"ClockTreeOptimization""GateSizing""1"
setFormField"ClockTreeOptimization""LevelAdjustment""1"
setFormField"ClockTreeOptimization""DelayInsertion""1"
setFormField"ClockTreeOptimization""BufferRelocation""1"
setFormField"ClockTreeOptimization""GateRelocation""1"
setFormField"ClockTreeOptimization""Reconfiguration""1"
setFormField"ClockTreeOptimization""DummyLoad""1"
formOK"ClockTreeOptimization"
【7】删除原有时序约束重新导入SDC文件【选用直接命令】
ataRemoveTC
ataLoadSDC
setFormField"LoadSDCFile""SDCFileName""./in/ADPCM_"
formOK"LoadSDCFile"
sdc"set_propagated_clock[all_clocks]"
因为此时CTS完毕可以根据实际连线估算latency所以加上语句sdc"set_propagated_clock[all_clocks]"
【8】设计布局优化环境设置【选用】
Timing>TimingSetup
一般在第一个脚本里面设置了timing优化环境,如果对于hold、setupviolation仍然存在于pt报告中就需要修复
这些violation,对于hold的violation一般比较容易修复,往往Astro会自动插入buffer来修复相关的violation,
一般在第二个脚本里面修复,而对于setup的violation一般只有在第一个脚本里面进行相关修复用PrePS命令,
如果不行则还需查看引起的原因不然只能降频使用或者修改代码逻辑,对于CTS后仍然不能修复相关
hold/transition/capviolation则需要重新设置时序优化环境中hold/transition等相关约束再次优化
atTimingSetup
atTimingSetupGoto"Optimization"
atCmdSetField"OptimizationTargetHoldSlack""0.2"
atCmdSetField"OptimizationMaxCapacitance""2"
atCmdSetField"OptimizationMaxTransition""3"
atCmdSetField"OptimizationHighFanout""20"
atCmdSetOptModel
atTimingSetupHide
Astro笔记Yuzh2009-11-13
【9】设计布局优化1【选用】
Optimizationphase1只可以优化一次,主要是针对高扇出的Nets以及一些时序优化如maxcapaticance和max
transition,如果在第一个脚本里面已经使用该优化命令则不需要再次使用
PostPlace>Post-PlaceOptimizationphase1
astPostPS1
setFormField"Post-PlacementOptimizationPhase1""Optimizationeffort""LOW"
Astro笔记Yuzh2009-11-13
setFormField"Post-PlacementOptimizationPhase1""HoldFixing""1"
setFormField"Post-PlacementOptimizationPhase1""PreventXtalk""1"
setFormField"Post-PlacementOptimizationPhase1""RedoHFN""1"
setFormField"Post-PlacementOptimizationPhase1""MaxFanouts""15"
setFormField"Post-PlacementOptimizationPhase1""UseGlobalRouting""1"
setFormField"Post-PlacementOptimizationPhase1""FixMaxLength""1"
setFormField"Post-PlacementOptimizationPhase1""MaxLength""300"
formOK"Post-PlacementOptimizationPhase1"
【10】设计布局优化【选用】
Post-PlaceOptimization可以操作多次,可以优化布局中的一些violation重新优化布局以满足时序。
PostPlace>Post-PlaceOptimization
astPostPS
setFormField"Post-PlacementOptimization""SetupFixing""1"
setFormField"Post-PlacementOptimization""HoldFixing""1"
setFormField"Post-PlacementOptimization""MaxTranFixing""1"
setFormField"Post-PlacementOptimization""MaxCapFixing""1"
setFormField"Post-PlacementOptimization""AreaRecovery""0"
setFormField"Post-PlacementOptimization""Logic-Remapping""0"
formOK"Post-PlacementOptimization"
【11】cell连接到电源环和条带【一般不做修改采用默认连接】设计布局优化完成后,需要将布局
好的cell连接到电源VDD和地VSS(就近的电源环或者电源条带上)
PreRoute>StandardCell
axgPrerouteStandardCells
formOK"PrerouteStandardCells"
Astro笔记Yuzh2009-11-13
【11】导出时钟树skew报告
Clock>SkewAnalysis
astSkewAnalysis
setFormField"SkewAnalysis""ClockNames""clk"
setFormField"SkewAnalysis""OutputTo""File"
setFormField"SkewAnalysis""FileName""rpt/"
formOK"SkewAnalysis"
导出时钟树报告一般在时钟树综合完成,如果有必要进行布局优化对于总体设计的hold、setup、max
transition等优化之后导出报告,在进行上述优化时可能会改动时钟树的cell类型或者位置以优化时序。
Astro笔记Yuzh2009-11-13
【12】保存时钟树综合后的cell
geSaveAs
setFormField"SaveAs""CellName""ADPCM_Encoder_cel_af_cts"
formOK"SaveAs"
*******************************************************************************************
设计布线导出GDS
*******************************************************************************************
【1】导入antenna_rules文件
load'cons/antenna_
【2】Antennaviolation修复【可选】
RouteSetup>HPOSignalRouteOptions
axgSetHPORouteOptions
setFormField"HPOSignalRouteOptions""Charge-CollectingAntenna""advanced"
formOK"HPOSignalRouteOptions
【3】导入RoutingGuide
有Macro单元的设计在该Macro边通常不希望布线所以设置RoutingGuide禁止布线区域需要导入,Routing
Guide可以在创建Hardblock时同时创建导出到不同的文件中取名route_guide
load'in/25/route_guide
Astro笔记Yuzh2009-11-13
【4】布线选项设置
RouteSetup>RouteCommonOptions
CrossTalkPrevention:避免出现CrossTalk违约,根据TimingSetupDiagBox中Xtalk面板中设置来作为串扰
noise的门槛避免布线时出现CrossTalk违约
GlobeRouting:全局布线设置选项
SkewControl:布线netskew最小化的力度,最大值可以输入10,并不是对所有的signalnet都需
要做skew最小设置,如net很少或者所有的PIN位于同一直线aspectratio情况,所以在进行全局布线前可以设
置net和设计core的aspectratio的门槛以便控制skew。对于时钟树布线skew控制则只在ClockRouting选择balanced
的情况下,skewcontrol只是影响布线的wire长度几乎微乎其微,并不对设计布线方案产生很大影响。一般不推
荐使用SkewControl当选择TimingDrivenGlobeRouting时,因为此时SkewControl会对Timing造成一定影响。
TimingDriven:实现TimingDrivenGlobeRouting,实现timing调整wirelength的力度选择值越大
工具越大程度的满足时序约束减小wire长度,最大值可以为7,选择该项时需要timinglibrary参考,选择该项功
能时,工具需要根据时序的盈余timingslack来对criticalnet的timingdrivenweight设置不同值,一般工具会选择
绕开noncriticalnet但这样会增加布线的congestion
CongestionWeight:布线时congestion考虑的力度,一般选择值越大,布线时越注重拥塞度,为
减小布线拥塞,工具会增加wire线长,便于减小拥塞,但这与TimingDriven正好反作用,实际情况会考虑两者
的权衡,最大值可以设置为12.
ClockRouting:时钟net布线,对于net布线大致可以分为两类一类是starsharp星型布局另一类
时signaltrunk类型的,对于这两类如何区别有专门的比例参数可以设置
axSetIntParam"groute""blncdToSkewCntrlRatio"N
当每一个net的width/length 2种布局其余的net则推荐使用starsharp布局即为balanced模式,normal则是在时钟端口连接到clocktrunk之前 直接将各个时钟端口连接起来,comb则是各个时钟端口直接连接到clocktrunk以减小skew,但这样可能会增加 布线的拥塞。因为并不是所有的clockpin放置在clocktrunk附近,选择该项时工具会根据各个clocknet的布局 自动选择是否采用starsharp(skewcontrol)型连线或者是signaltrunk(balance)型连线。 TrackAssign:实现timing调整wirelength的力度选择值越大工具越大程度的满足时序约束减小 wire长度,工具需要根据时序的盈余timingslack来对criticalnet的timingdrivenweight设置不同值,一般工具会 选择绕开noncriticalnet但这样会增加布线的congestion。 DetailRouting:局部细节布线 connecttieoff:连接信号端口到电源环或者条带,或者到时钟环或条带 connectopennets:连接那些未能完全连接的net rerouteuser'swire:重新连接增加的wire这些wire可以由以下命令生成 geAddWire和axgZeroSkewRoute timingdriven:全局布线或者是trackassignment时改进时序 CTSnets:处理时钟net连线,此时连线没有使用axgZeroSkewRoute命令,只是按照 一般的控制skew在设计要求范围,normal选项会改变timingpattern和 net的延时而minorchangeonly则最小化对skew控制的net的修改 Astro笔记Yuzh2009-11-13 Single-row/columnviaarraymultiplecutconnect连接排放位置,有center的型和optimize 的型 Stackvialessthanmin-areastackviacostmetalstub该值越大消耗的metalstub越小 LibraryCellsandDesignRules PolyPinAccess:是否连接设计中的PolyPin DRCDistance:DRC间距检测,diagonal任何角度检测manhattanXY方向检测 SameNetNotch:SameNetNotch修复ignore可以再以下命令修复geNewFillNG不然就直接 检查修复 FatWireChecking:Fatwire检查,是否按照简单的rules进行检查还是先合并些thinwire成为 fatwire后再进行该项检查 MergeFatWireOn:是否将wire线进行合并针对事preroutefixwire还是所有的signalwire Wire/ContactEnd-of-lineRule:检查修复End-of-lineRule Astro笔记Yuzh2009-11-13 axgSetRouteOptions formDefault"RouteCommonOptions" setFormField"RouteCommonOptions""CrossTalkPrevention""0"setFormField "RouteCommonOptions""TimingDriven""1" setFormField"RouteCommonOptions""TrackAssignTimingDriven""1" setFormField"RouteCommonOptions""DetailRouteTimingDriven""1" setFormField"RouteCommonOptions""SkewControl""1" setFormField"RouteCommonOptions""DRCDistance""manhattan" setFormField"RouteCommonOptions""SameNetNotch""checkandfix" formOK"RouteCommonOptions" 【5】全局时钟布线【可选】Route>RouteNetGroup对于时序要求比较严格的设计有时候可以现对设计 时钟进行优先布线以满足时序这是可以对netgroup进行优先 布线。 axgRouteGroup setFormField"RouteNetGroup""NetName(s)From""Allclocknets" setFormField"RouteNetGroup""Search&RepairLoop""25" formOK"RouteNetGroup" 【6】自动布线和细节布线 Route>AutoRoute axgAutoRoute setFormField"AutoRoute""Search&RepairLoop""30" formOK"AutoRoute" Astro笔记Yuzh2009-11-13 Route>DetailRoute axgDetailRoute setFormField"DetailRoute""Search&RepairLoop""35" formOK"DetailRoute" 【7】设计布线优化和时钟树布线优化【可选】 Route>Detail>DetailRouteWirelengthOptimization 优化布线减小wire长度和via数量,同时尽可能的移除不需要的jogs axgRoutOpt setFormField"RoutingOptimization""Search&RepairLoop""5" formOK"RoutingOptimization" Clock>PostRouteCTO 布线优化时钟skew astPostRouteCTO setFormField"PostRouteClockTreeOptimization""BufferSizing""1" setFormField"PostRouteClockTreeOptimization""GateSizing""1" Astro笔记Yuzh2009-11-13 setFormField"PostRouteClockTreeOptimization""DummyLoad""0" formOK"PostRouteClockTreeOptimization" 【8】修复net长度,每隔一定长度插入buffer以保证足够驱动【可选直接命令】 astLenBI setFormField"LengthBasedBufferInsertion""MaxLength""150" setFormField"LengthBasedBufferInsertion""BufferName""BUFX2" setFormField"LengthBasedBufferInsertion""NetSelectMethod""AllNets" setFormField"LengthBasedBufferInsertion""Optimizecouplednetwork""0" setFormField"LengthBasedBufferInsertion""FarthestLen""1" formOK"LengthBasedBufferInsertion" 【9】Via增加设置【可选直接命令】 保证DRC检查中没有出现violation前提下,将signalcutvia或者是ContactCode替换为multiplecutvia或者同 一metal层的ContactCode优化设计,增加VIA数目便于走线。 axDrouteOptimizeContact(geGetEditCell) '(("Via12""Via12" 2)("Via23""Via23" 2)("Via34""Via34" 2) ("Via45""Via45"2) ) Astro笔记Yuzh2009-11-13 【10】重新搜索布线【可选】 Route>DetailRoute>DetailRouteResearch&Repair axgSearchRepair setFormField"Search&Repair""Search&RepairLoop""100" formOK"Search&Repair" 【11】geNewFilliNG 在进行导出GDS文件之前,必须进行Notch和Gap的fill。否则在进行版图验证的时候会出现很多的错误。Astro中 进行这个步骤的时候,并没有在layout上面实际的加上金属,而只是生成一个新的cell——FILL,然后在StreamOut 的时候就可以选定这个FILLcell,GDS数据中就会存在这些信息。 RouteUtility>FillNotchGap geNewFillNG formOK"NewFillNotchandGap" 【12】加入FILLCell Fillercell是版图中很重要的一类cell,一般是在layout整个完成之后,最后进行addCorefiller和pad filler的作用不尽相同,但在layout的设计中是不可或缺的。所以在进行过所有的优化步骤后,一定要进行add filler。Corefiller的主要作用是将row中间的well区连接起来,在corefillercell中一半还有buttingvia, 将相应的well区连接到相应的电位上面。而padfiller的作用主要是将pad中的power和ground连接起来。在 Astro笔记Yuzh2009-11-13 进行add之前,可能需要对foundry的cell库进行检查,弄清楚fillercell的名称和大小,在填写的时候,一 般是按照尺寸从大到小填入,这样Astro会尽量使用size大一些的cell。 PostPlace>AddCoreFillers axgAddFillerCell setFormField"AddFillerCell""MasterCellName(s)" "SDN_FILL32,SDN_FILL16,SDN_FILL8,SDN_FILL4,SDN_FILL2,SDN_FILL1" setFormField"AddFillerCell""betweenstdcellsonly""1" formOK"AddFillerCell" 【13】重新连接电源【可选】 在加入FILLCELL后有时候Astro会报一些电源连接错误是由于未能将FILLCELL的电源和地连接到VSS,VDD 此时需要重新做一次cellport电源VSSVDD定义 aprPGConnect setFormField"Connect/DisconnectPG""is1'b1/1'b0""1" setFormField"Connect/DisconnectPG""NetName""VDD" setFormField"Connect/DisconnectPG""PortPattern""VDD" setFormField"Connect/DisconnectPG""NetType""Power" formApply"Connect/DisconnectPG" setFormField"Connect/DisconnectPG""NetName""VSS" setFormField"Connect/DisconnectPG""PortPattern""VSS" setFormField"Connect/DisconnectPG""NetType""Ground" formOK"Connect/DisconnectPG" Astro笔记Yuzh2009-11-13 【14】导出Verilog网表 导出新的门级网表,这样导出的网表不会再有层次的信息,实际上并不适用。Astro中若想导出带有层次的门级 网表,需要进行其他的设置。 DataPrep>Output>VerilogOut (dbSaveCell(geGetEditCell)) auVerilogOut setFormField"VerilogOut""LibraryName""ADPCM_Encoder" setFormField"VerilogOut""CellName""ADPCM_Encoder_cel" setFormField"VerilogOut""OutputBusAsIndividualBits""0" setFormField"VerilogOut""NoP/Gports""1" setFormField"VerilogOut""VerilogOutDataFile""out/ADPCM_Encoder_pnr.v" formOK"VerilogOut" 【15】导出GDS文件 将布局布线完成的layoutstream成GDS格式的版图文件。实际上在Astro中,我们使用的都只是cell的一个 extracted的版图,并未含有所有的版图信息,所以一般需要将这样的GDS导出后,再与标准的单元的GDS进行 Merge,之后再进行后端的layout验证工作。 DataPrep>Output>StreamOut auStreamOut setFormField"StreamOutDataFile""StreamFileName""out/ADPCM_Encoder_" setFormField"StreamOutDataFile""LibraryName""ADPCM_Encoder" setFormField"StreamOutDataFile""ChildExtractionDepth""20" setFormField"StreamOutDataFile""Convert""SpecifiedCell" setToggleField"StreamOutDataFile""Fill""FILL"1 setToggleField"StreamOutDataFile""Fill""ForceoutputoutdatedFillCell"1 setFormField"StreamOutDataFile""CellName""ADPCM_Encoder_cel" formButton"StreamOutDataFile""pinNetOptions" setToggleField"StreamOutDataFile""OutputPins""AsText"1setToggleField "StreamOutDataFile""OutputPins""AsGeometry"1setToggleField"Stream OutDataFile""RotatePinTextByAccessDirection"""1setFormField"Stream OutDataFile""PinNameMagnification""0.3" subFormHide"StreamOutDataFile"1 formOK"StreamOutDataFile" 【16】导出SPEF文件 Astro>Timing>SPEFOut astSPEFOut setFormField"SPEFOut""Outputfile""out/ADPCM_Encoder_" formOK"SPEFOut" 【17】LVSDRC检查 Verify>LVSDRC menuReload"Astro" geNewLVS Astro笔记Yuzh2009-11-13 setFormField"NEWLVS""MaxErrors""200" formOK"NEWLVS" geNewDRC formOK"DRC" 【18】保存布线后的Cell Cell>Save (dbSaveCell(geGetEditCell))