清华大学微电子所集成电路后端流程经典教程.docx

上传人:b****2 文档编号:2577092 上传时间:2023-05-04 格式:DOCX 页数:25 大小:310.26KB
下载 相关 举报
清华大学微电子所集成电路后端流程经典教程.docx_第1页
第1页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第2页
第2页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第3页
第3页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第4页
第4页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第5页
第5页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第6页
第6页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第7页
第7页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第8页
第8页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第9页
第9页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第10页
第10页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第11页
第11页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第12页
第12页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第13页
第13页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第14页
第14页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第15页
第15页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第16页
第16页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第17页
第17页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第18页
第18页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第19页
第19页 / 共25页
清华大学微电子所集成电路后端流程经典教程.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

清华大学微电子所集成电路后端流程经典教程.docx

《清华大学微电子所集成电路后端流程经典教程.docx》由会员分享,可在线阅读,更多相关《清华大学微电子所集成电路后端流程经典教程.docx(25页珍藏版)》请在冰点文库上搜索。

清华大学微电子所集成电路后端流程经典教程.docx

清华大学微电子所集成电路后端流程经典教程

清华大学微电子所集成电路后端教程

DC、Astro设计流程初级手册

实验数据在219.223.169.103上:

for_all_课件/design_flow_ralative/df_tut4sz.tar.gz

Linux解压:

%tarzxvfdf_tut4sz.tar.gz

(%符号表示在Linux界面下直接输入命令)

直接可用

注意:

不要在widows下解压,否则库文件格式会出问题。

第一部分逻辑综合

这一部分主要在目录syn下进行。

第一节数据准备(此部分已完成,下面的文字仅作说明,无需操作)

首先把standcell、pad和ram的db库拷贝到syn/library下,把源代码(.v)拷贝到了syn/source下,把dc的setup文件(.synopsys_dc.setup)拷贝到syn下,把综合的脚本(包括约束脚本)拷贝到syn/scripts下,并且创建了syn/output和syn/reports准备接收综合结果。

第二节运行DesignCompiler进行逻辑综合

进入syn目录,在tcl模式下启动综合器:

%dc_shell-t

调用tcl脚本进行综合:

dc_shell-t>sourcescripts/run.tcl

这一步可以自动完成整个综合过程。

具体细节可参见syn/scripts下的run.tcl和cons.tcl文件。

完成以后,可以看到syn/output和syn/reports目录下有相应的文件输出。

退出dc_shell-t。

第三节数据分析

综合过程中在syn/output下产生了4个文件,其中sdf是标准延时文件,用于仿真时的时序反标,sdc是标准的约束文件,用于约束后面的布局布线。

在syn/reports目录下产生了时序和面积的报告。

从报告文件中可以看出,时间上,最大的slack为-0.51ns,相对于时钟周期8ns较小,基本上可以进行布局布线。

总面积约为0.228um2,且大部分为pad所占。

这是我们进行下一步布局布线的依据。

说明:

1、因为setuptiming往往是比较关键的,我们综合时使用了slow库作为目标库。

2、综合时,把standcell(sc)的库设为target_library,把sc、io、ram以及sythetic_library通通设为link_library。

3、输入驱动和输出负载使用pad模型模拟实际的驱动和负载。

4、input_delay通常设为时钟周期的60%左右,output_delay大约设为时钟周期的30%。

5、把设计中pad和ram相应的cell设为don’t_touch。

6、主要是考虑到我们加的约束比较严,因此可以接受-0.51ns的slack作为布局布线的起点。

第二部分布局布线

这一部分主要在目录P-R下进行。

第一节数据准备(黑体字部分需要操作完成)

首先,把standcell、pad和ram的milkyway库拷贝到P-R/ref_lib下,把布局布线的脚本拷贝到P-R/script下,把和工艺相关的文件拷贝到P-R/star_rcxt和P-R/tech下,把层次定义文件拷贝到P-R/map下,并且创建了P-R/design_data和P-R/report两个空目录。

另外,我们还需要将综合得到的syn/output目录下的fifo_mapped.v和fifo_mapped.sdc文件拷贝到P-R/design_data目录下。

第二节布局布线

1、创建milkyway设计库(参见Astro培训教材lab5a的task1和task2)

1)在P-R目录下启动Astro。

2)在Astro界面中选择菜单Tools->DataPrep,此时可以看到Astro菜单栏的条目发生了变化。

3)选择菜单Library->Create…,弹出对话窗口。

在LibraryName中填入fifo,在TechnologyFileName中填入tech/umc18_6lm.tf,打开"SetCaseSensitive"选项,点击”OK”。

(忽略warning,下同)之后可以发现多了P-R/fifo目录,这就是当前设计库所在目录。

4)Library->AddRef…

LibraryName填入fifo,RefLibraryName填入ref_lib/sc,点击Apply。

RefLibraryName填入ref_lib/io,点击Apply。

RefLibraryName填入ref_lib/ram,点击OK。

5)Library->ShowRefs…

LibraryName填入fifo,点击OK。

可以看到sc、io和ram的库已经绑定到设计库了。

6)NetlistIn->VerilogIn…

VerilogFileName填入design_data/fifo_mapped.v

LibraryName填入fifo

NetNamefor1'b0填入GND

NetNamefor1'b1填入VDD

点击OK

这一步将fifo综合得到的门级网单绑定到设计库中。

7)NetlistIn->Expand…

LibraryName填入fifo

UnexpandedCellName填入fifo_with_pads.NETL

ExpandedCellName填入fifo_with_pads.EXP

点击GlobalNetOptions按钮,弹开新的对话窗口

NetName和PortName都填入GND,点击Apply,可以看到NumberDefined由0变为1

NetName和PortName都填入VDD,点击Apply,可以看到NumberDefined由1变为2

点击Hide关闭子窗口,回到原来的对话窗口,点击OK

等效地,也可以在Astro命令输入栏中直接输入命令

load“script/1_data_prep.cmd”

完成整个操作过程

至此,整个设计库创建完毕。

可以进入P-R/fifo中观察所得结果。

2、创建设计单元(参见Astro培训教材lab5a的task3、task4和task5)

1)Tools->Astro,回到普通工作模式下。

2)Library->Open…

LibraryName填入fifo,点击OK

3)Cell->Create…

CellName填入fifo_with_pads,点击OK

4)DesignSetup->Netlist:

BindNetlist…

NetCell填入"fifo_with_pads.EXP",点击OK

5)Cell->HierarchyPreservation:

InitializeHierarchyInformation…

FlattenedCellName填入fifo_with_pads.CEL

HierarchicalNetCellName填入fifo_with_pads.NETL

点击OK

6)Cell->HierarchyPreservation:

MarkModuleInstancesPreserve…

FlattenedCellName填入fifo_with_pads.CEL,点击OK

7)Cell->SaveAs…

CellName填入2_design_setup,点击OK

等效地,也可以在Astro命令输入栏中直接输入命令

load“script/2_design_setup.cmd”

完成整个操作过程

至此,整个设计单元创建完毕。

进入P-R/fifo/CEL目录中可以看到里面有design_setup单元。

3、初始化布局(参见Astro培训教材lab6a的task1、2、3、4)

从综合的结果看,本设计属于pad-limited类型,即芯片面积主要由pad决定。

我们做布局规划的时候主要考虑pad的摆放。

源设计中总共有14个pad,分4边摆放,每边最多4个。

此外,每边还要另加两个电源pad(分别给pad和core供电,即后边即将提到的PVDDR和PVDDC)和两个地pad(PVSSR和PVSSC)。

因此,每边最多8个pad,外加2个cornerpad。

每个pad的尺寸是194.90um×60.12um,每个cornerpad的尺寸是194.90um×194.90um,摆放时给pad和pad之间留大约20um的间距,则由此可得每边的长度大约为60×8+20×9+200×2=1060um。

Pad环往内每边再留100um布电源环,则最终可得core的尺寸为460um×460um。

1)导入pad信息

DesignSetup->TDF:

LoadTDF…

TDFFileName填入script/io.tdf,点击OK

2)初始化布局

DesignSetup->Floorplan:

SetUpFloorplan…

打开width&height选项

Row/CoreRatio填入"0.7"(标准单元所占面积不大,可以适当降低core的利用率)

CoreWidth填入460

CoreHeight填入460

打开DoubleBack和Flipfirstrow选项

CoreToLeft填入100

CoreToBottom填入100

CoreToRight填入100

CoreToTop填入100

点击OK

此时刷新cell窗口,可以得到下图所示的布局:

3)填充padfiller

PostPlace->FillerCell:

AddPadFillers…,弹出对话框

在Astro命令栏里输入

load"script/set_pad_fillers.cmd"

回到对话框,点击OK

4)把ram摆放到core的左下角

在Astro命令栏里输入

load"script/place_macros.cmd"

刷新窗口,得到下图。

5)保存设计为3_initialized_floorplan

上述过程可直接利用Astro命令

load“script/3_floorplan_initial.cmd”

一步完成。

4、电源规划(参见Astro培训教材lab6a的task5、6、7)

1)创建电源环(先电源环后地环,注意有别于Astro实验)

PreRoute->RectangularRings…

点击Default

打开Around右边的Core选项

NetName(s)填入"VDD"

L-Width、R-Width、B-Width、T-Width均填入"20"

L-Layer、R-Layer设为48(met2)

B-Layer、T-Layer设为46(met1)

Left、Right、Bottom、Top均填入20

全部设置如下图所示

点击Apply

NetName(s)改为GND

Left、Right、Bottom、Top均改为10

点击OK

至此电源和地的金属环创建完毕,形如下图:

2)创建电源带(strap)

PreRoute->Straps…

点击Default

选择Vertical,StartX填入520

NetName(s)填入VDD,GND(以逗号隔开)

Width填入10

Layer设为48

打开Step&Stop选项

Step填入120

Stop填入640

PitchwithinGroup填入15

点击Apply

选择Horizontal,StartY填入410

Step改为110

Stop改为630

Layer改为46

点击Apply

选择Vertical,StartX填入410

Step改为0

Stop改为410

Layer改为48

点击OK

上述过程中版图的变化如下:

3)在所有standcell、ram和pad之间建立电源、地的逻辑连接

PreRoute->ConnectPortstoP/G…

点击Default

NetName、PortPattern均填入VDD

打开CellTypes中Pad选项

打开UpdateTieUp/Down选项

点击Apply,弹出一个小窗口,点击OK

可以看到Astro提示:

Connected81portstonet(VDD)throughpatternVDD

点击Apply,弹出一个小窗口,点击OK

NetName、PortPattern均改为GND

NetType选择Ground

点击Apply,弹出一个小窗口,点击OK

可以看到Astro提示:

Connected81portstonet(GND)throughpatternGND.

点击Cancel退出对话窗口

4)在pad、ram的电源地引脚(pin)和电源网络(ring和strap)之间建立物理连接

PreRoute->Macros/Pads…

点击Default,点击OK

这个过程可能会花2、3分钟,中间的warning可以忽略。

从版图上可以看到,所有的核电源pad(PVDDC、PVSSC)和ram都已经连接到电源网络上了。

5)检查电源连接

PreRoute->VerifyP/GConnectivity…

点击Default

StdCellPinConnect选择Ignore

点击OK

随后可以看到Asrto的检查报告。

没有任何错误,可以继续下一步。

6)定义软阻碍(softblockage),为标准单元的自动摆放做准备

在Astro命令栏里输入

load"script/define_soft_blockages.cmd"

至此,可得如下版图:

7)保存设计为4_power_planed

上述过程可以通过执行Astro脚本4_powerplan.cmd一步完成。

5、时序约束设置(参见Astro培训教材lab2)

1)加载tlu+延时模型

Tools->DataPrep,进入数据准备界面

TechFile->ITFtoTLU+,进行如下配置:

点击SanityCheck,提示warning,没有error,跳过。

点击OK。

2)加载设计约束

Tools->Asrto,重新回到普通界面

在Astro命令栏中输入:

ataRemoveTC

清除已有的全部时序约束。

Timing->Constrains:

LoadSDC…

SDCFileName填入design_data/fifo_mapped.sdc

点击OK,提示SDC加载成功。

3)配置延时估算选项

Timing->AstroTime:

TimingSetup…

选择Model卡片

OperatingCond选择Nom

DelayModel选择elmore

点击Apply

选择Parasitics卡片

OperatingCond选择Nom

CapacitanceModel选择TLU+

点击Apply

选择Environment卡片

打开EnableMulti-ClocksPerReg、IgnorePropagatedClock、EnableIdealNetworkDelay和IncludeNonPropagatedNets项

关闭IgnoreClockUncertainty项

点击Apply

点击Hide

4)产生时序报告

在Astro命令栏里输入:

ataReportSummary或者astCheckDesign

前者会把时序信息报告在Astro的信息栏里,后者可以产生更详细的时序报告,但需要在弹出的对话输入文件名,把报告重定位到指定的文件里。

从时序报告中可以看到,setupslack只有-0.001,并且只有一个;holdslack为正。

注意:

目前umc只提供Nominal的TLU+模型,没有Max和Min模型,所以这里的时序估算和我们综合时有较大的出入,推荐使用PrimeTime进行时序估算。

5)保存设计为5_floorplanned_tluplus

上述过程可以通过Astro脚本5_timing_setup.cmd一步完成。

6、标准单元自动摆放(参见Astro培训教材lab3)

1)使用congestion+timing-driven自动摆放模式

InPlace->PlacementCommonOptions…

点击Default

打开OptimizationMode下面的Timing选项

点击OK

2)设置预摆放选项

Preplace->Pre-PlacementOptimization…

点击Default

打开RemoveBuffers选项

点击OK

这时如果再用ataReportSummary命令报告延时的话,可以发现负的slack已经没有了。

3)自动摆放标准单元

InPlace->AstroPlace:

DesignPlacement…

点击Default

打开In-PlacementOptimization选项

点击OK

标准单元摆放完毕以后的版图如下所示:

图中左侧和下侧的线条表示标准单元的密集程度,越粗的地方越密集。

这时可以再做一下时序报告,看看满不满足要求。

4)在标准单元的电源地引脚(pin)和电源网络(ring和strap)之间建立物理连接

PreRoute->StandardCells…

点击Default,点击OK

从下面的版图上可以看到,所有标准单元的电源都已经连接到电源网络上了。

5)保存设计为6_placed

此部分的脚本为6_Place.cmd。

7、摆放后优化(参见Astro培训教材lab3)

这一步主要是针对摆放后timing和congestion仍然不满足要求的设计进行的,对本设计来说其实并没有必要。

但为了使流程更加完整,我们仍然做进一步的优化。

1)搜索并改进

InPlace->AstroPlace:

SearchandRefine…

点击Default

点击OK

这时可以查看一下timing和congestion,基本上没有改进。

把设计单元保存为7_1_PPSR。

2)后布局第1阶段优化

PostPlace->Optimization:

Post-PlaceOptimizationPhase1…

点击Default

打开UseGlobalRouting选项

点击OK

这时的timing和congestion依然没有任何改进。

把设计单元保存为7_2_PPO1。

这一部分的等效脚本为7_SR_PPO1.cmd。

8、时钟树综合(参见Astro培训教材lab4)

1)使用默认综合选项

Clock->ClockCommonOptions…

点击Default,点击OK

2)时钟树综合

Clock->ClockTreeSynthesis:

ClockTreeSynthesis…

点击Default,点击OK

3)分析时钟偏差

Clock->Reports:

SkewAnalysis…

点击Default

ClockNames填入clk

OutputTo选择File,并在FileName填入report/CTS_skew.rpt

点击OK

打开report/CTS_skew.rpt文件,可以发现无论是时钟树的最长路径延时还是延时偏差都很小。

4)查看整体延时信息

时钟树已经综合出来了,所以必须改变延时检查选项以采用真实的时钟树延时模型。

Timing->AstroTime:

TimingSetup…

选择Environment卡片

打开EnableMulti-ClocksPerReg、IgnoreClockUncertainty、EnableRecovery/RemovalArcs和EnableGatedClockChecks项

关闭IgnorePropagatedClock和EnableIdealNetworkDelay项

点击Apply

点击Hide

在Astro命令栏里输入ataReportSummary产生延时报告。

从报告中可以看出,建立和保持的slack都比前面有了较大的改善,这主要是因为实际的时钟树延时和延时偏差数值比我们在约束文件中定义的数值小了很多。

保存设计单元为8_1_CTS。

5)后布局第2阶段优化

PostPlace->Optimization:

PostPlaceOptimization…

点击Default

打开RemoveBuffers选项

点击OK

可以看到congestion和timing其实都没什么改进。

保存设计单元为8_2_PPO2。

这一部分的等效脚本为8_CTS.cmd。

9、布线

1)设置自动布线选项

RouteSetup->RouteCommonOptions…

点击Default

GlobalRouting和TrackAssign下均选择TimingDriven

点击OK

2)布时钟线

Route->RouteNetGroup…

点击Default

NetName(s)From下选择Allclocknets

点击OK

完成以后,对版图的某些局部放大,可以看到时钟线已经连好了。

注意:

这一步最好能够使最后报告的Violation为0。

3)全局布线

Route->GlobalRoute:

GlobalRoute…

点击Default,点击OK

4)全局布线优化

在Astro命令栏里输入

astPostRouteOpt

在弹出的对话窗口中选择Default

在RoutingPhase下选择GlobalRoute

关闭FlowControl下面的PurgeFiller选项

点击OK

4)分配连线轨道

Route->TrackAssign!

5)轨道优化

在Astro命令栏里输入

astPostRouteOpt

在弹出的对话窗口中选择Default

在RoutingPhase下选择TrackAssign

关闭FlowControl下面的PurgeFiller选项

点击OK

6)详细布线

Route->DetailRoute:

InitialDetailRoute…

点击Default

TrackAssignment下选择Skip

点击OK

把版图局部放大,可以看到所有的单元都已经布线完毕,同时Astro报告violation为0。

7)搜索并修补

Route->DetailRoute:

Search&Repair…

点击Default

SearchRepairLoop设为5

点击OK

这一步主要是修复布线中产生的violation,对本设计来说并不需要,当然也没有坏处。

保存设计单元为9_routed。

8)设计规则检查

Verify->DRC…

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2