您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 数字集成电路 后端设计 APR流程 之Astro
Astro布局布线流程随着深亚微米工艺的应用,逻辑门间的连线主导了电路的时序性能。在实际设计时,设计者不再只是完成简单的逻辑门摆放和连线工作,更重要的是要降低实际的连线延迟,使昀后的物理设计时序性能满足设计要求。Astro是由Synopsys公司开发的物理设计软件,适用于现在的主流设计。Astro提供了一套完整的物理设计流程,布局布线同时还具有时序优化功能,可以在一次流程中使设计电路达到预设指标。但Astro步骤繁多、设定复杂,本章将针对Astro的设计流程借助一个简单的设计实例,对Astro一次流程中的主要步骤进行简单说明,使读者短时间内可以了解Astro。一.数据准备本流程中需要的输入数据包括:网表文件(NetlistFile)、时序约束SDC文件(TimingConstraintFile)、参考库(ReferenceLibrary)、定义PAD顺序或位置信息的TDF文件(TopDesignFile)、工艺tf文件(TechnologyFile)。其中工艺文件和部分参考库文件由Foundry提供。1.网表:网表文件由前端工程师提供,格式一般采用verilog(.v)格式。布局布线用网表文件一般由DesignCompiler(DC)综合得到。从DC中输出网表时,需要在脚本中如下命令,以满足Astro的要求。2.时序约束文件:时序约束文件由前端工程师提供,格式一般采用SDC(.sdc)格式,SDC文件也由DC中输出。时序约束文件中所加的约束只能针对顶层端口,文件中时钟定义可能需要加以修改。因为从DC中输出的时钟定义一般不指定具体的单元及其端口,Astro通常很难根据这样的时钟定义找到真正的时钟源,因此需要先在网表中找到真正的时钟端口,并据此在SDC文件中加以修改。例如,原来的SDC文件中时钟的定义片段为:原来的时序约束文件是给予综合的DC用,而不是用来布局布线的。所以综合用的SDC文件中只给出了一个“产生时钟(createclock)”的命令,根据上面这段时序约束文件中的片段,Astro一般无法找到clk_div/clk,因此需要将“get_pin”的目标修改替换为在网表中的一个实际的时钟产生的单元:clk_div/CK01D1/Z.。修改SDC片段结果如下:3.参考库:参考库包括标准单元(STD)库、输入输出单元(I/O)库和IP库。前两种都由Foundary提供,IP库可以由Foundary提供,也可以用户自己建立。举一个简单的例子简要说明下IP库的建立。在某些项目中,比较典型的用户自定义RAMIP模块。使用MemoryCompiler可以产生GDSII文件,需要自己建立Milkyway格式IP库以作为参考库代入Astro设计流程。其具体步骤为:1.运行MemoryCompiler,产生需要的Memoryblock,具体参考memorycompiler的使用手册。2.运行Astro,把GDSII文件导入,Smash,进行BlockagePinViaExtraction后产生FRAMview。3.在Astro中把memorycompiler产生的lib文件转换成clf文件并读入,或者读入.db文件,生成TIM/LMview。关于导入GDSII文件具体参考《milkywaydatabasepreparation》,需要注意两点:1.层号(LayerNumber)问题,不同的工艺下的相同层的层号可能不同。如若不同,需要写一个映射文件在读入GDSII文件转换。2.特殊自定义模拟单元的IP库的,ib文件、clf文件等需要自己写,由Astro读入生成IP库的LMview,若仅由GDSII文件生成一个Framview,IP库的Milkyway格式的库中没有TIMview,在时序驱动(TimingDriven)流程中处理到和这些模块相关的Net/Port的时候会有许多相关的Warning或TimingError。为了消除这些Warning和TimingError,就需要把相应的.lib或者.db文件导入库中,以生成一个TIM/LMview。这时可以简单地手工写一个lib文件,导入库中即可。例如:4.TDF文件:这里用到的TDF文件定义了Pad的排列顺序。需要注意的是:综合产生的网表中没有定义某些没有逻辑意义的Pad,如cornercell,splitcell以及powercell的顺序,这些Pad和I/OPad的摆放边和顺序都在该TDF文件中定义。二.开始(Setup:DesignSetup+TimingSetup)在Terminal中,引导到运行目录下内输入命令:启动软件后,很多布局布线步骤都可以写成脚本,直接载入运行即可。这样既免去了一次次点鼠标提高工作效率,也减少手工操作可能会带来的失误。该命令“Astro”也包括“-logd、-cmdd”等参数来记录命令和软件运行历史。考虑到读者初次接触Astro,随后章节中多采用图形界面的操作方式。基本的步骤是:1.建立库(cmCreateLib)Library→Create在弹出“CreateLibrary”窗口中,填上“LibraryName、TechnologyFileName”相应的表格。“LibraryName”是设计库的名字,库是设计单元的集合。“TechnologyFileName”即为第一节数据准备中提及的工艺tf文件和文件引导路径。一般前端综合DC输出网表是对大小写敏感的,因此建立库的时候要注意把“SetCaseSensitive”选项选上(默认)。图2-1点击“OK”按钮,Library建立成功。Astro启动目录下会产生一个以“LibraryName”命名的文件夹,随后的单元的设计数据都将会保存在本目录下。图2-22.读入Verilog(auVerilogToCell)1.在Astro的主窗口内输入命令这条命令集合了旧版Astro设计流程中的加上参考库(cmRefLib)、读入网表(auVerilogIn)和打平网表(cmCmdExpand)等几个个步骤。图2-32.在弹出窗口中填入“LibraryName、CellName、VerilogFileName”。“LibraryName”是刚刚建立的设计库名。“CellName”单元名即随后具体的设计对象。“VerilogFileName”是第一节数据准备中提及的网表文件和文件引导路径。3.点击“ReferenceLibrary”按钮,顺序添加几个参考库后,点击“Hide”按钮隐藏窗口。“ReferenceLibrary”是第一节数据准备中提及的参考库文件。参考库可以是一个或者多个,如STD、IO、IP等。图2-44.点击“GlobalNetOptions”按钮,“NetName、PortPattern”分别都设置为“VDD、VSS”,并且“Apply”一下,点击“Hide”按钮隐藏窗口。5.点击“OK”按钮。网表将被参照参考库或Astro默认的库读入,在设计库文件夹下产生一个以“CellName”命名的文件夹,其中包含几种设计观点cellview。图2-53.打开库(geOpenLib)Library→Open在弹出窗口中填入“LibraryName”,点击“OK”按钮。图2-64.打开单元(geOpenCell)Cell→Open打开本节第2步中生成的单元,图2-7为弹出的窗口视图。图2-7为使图片清晰,截图中,笔者将结构视图内容部分进行了反色处理。可以发现,该部分由一些大小不一的方框“堆积”而成,这些方框就是STD、IO、IP单元的Framview。由于设计尚未进行布局规划(floorplan),它们都被“堆积”在视图的左下角(low-left)。若网表是层次化的,还需要使用(astMarkHierAsPreserved)命令来标记保留层次化,至此设计启动部分(DesignSetup)流程结束。5.装载SDC文件(ataLoadSDC)Timing→LoadSDC1.在Astro的主窗口内输入命令:推荐在装载SDC文件前移除设计中所有的时序相关的约束。2.在弹出窗口中“SDCFileName”表格中填入,SDC文件名极其引导路径。SDC文件是第一节数据准备中提及的时序约束文件。图2-83.点击“OK”按钮载入SDC文件。图2-96.时序设置(atTimingSetup)Timing→TimingSetup在弹出窗口中,根据需要选择相应的选项,设置相关环境参数、优化目标。注意!这些设置选项在流程的后面可能会有改变。另外本流程中部分选项设定使用系统默认,设定不作改变部分不在图2-10中作图示方式列出。图2-107.保存单元数据(geSaveAs)Cell→SaveAs填入自定义单元名称,阶段性保存设计数据。图2-11补充说明:综合产生的网表一般不包含电源、地的Pad、Corner、Split、Power等单元,可以利用(geAddCell)Create→Cell命令在设计单元中建立这些单元。笔者个人偏好在DC输出的Verilog网表中手动修改网表,以引用ReferenceLibrary中的单元的方式在网表中加入这些Cell。三.布局规划(Floorplan)Floorplan在整个流程中处于十分重要的地位,Floorplan不单指Astro中的axgPlanner命令,还包括macro的放置,电源布线设计(PowerPlan)。因为Floorplan一旦确定,则整个芯片的面积就已经确定了。Floorplan的质量也与整个设计的timing和布通率有着密切的关系。流程中的反复主要是发生在这一步中,如果这本步骤开始就规划得比较好,则随后的以便通过一步流程通过的几率就较高;反之,很可能出现完成了随后若干步骤后,发现设计无法通过修正继续布通的情况,那时只能返回到这一步,造成很大时间人力的浪费。1.载入TDF文件(axgLoadTDF)DesignSetup→LoadTDF将设计单元名称和TDF文件以极其路径填入弹出表格中的“CellName、TDFFileName”,此处TDF文件即为是第一节数据准备中提及的TDF文件。图3-12.全局的Floorplan(axgPlanner)DesignSetup→SetUpFloorpan图3-2如图3-2中的参数来完成设置,并且点击“OK”完成初步的布局规划。本设计流程中包含了一些的macro单元,不能简单地通过指定根据core的利用率(Aspectratio)来让Astro决定设计的尺寸,而只能通过指定宽/长(width/hight)来确定。同时考虑到标准单元支持背对背摆放(DoubleBack),把DoubleBack选中(默认)。另外如果设计允许的话,周边(CoreToLeft、Right、Botton、Top)可以留的宽一些,这样外圈的电源环(PowerRing)可以尽量设计得粗一些,保证芯片的电源供电安全。图3-3可以发现,图3-3中已经具有芯片的雏形:ChipArea中,Pad包围着CoreArea。有待布局的宏单元(Macro)水平放置在ChipArea上方,标准单元(STD)垂直堆积在ChipArea右方。3.添加PadFiller单元(axgAddPadFiller)PostPlace→FillerCell:AddPadFillers参考ReferenceLibrary中提供的Padfiller单元,填入弹出窗口中的“Filler”表格并且点击“OK”按钮。图3-44.连接电源和地(aprPGConnect)PreRoute→ConnectPortstoP/G“CellTypes、PortPattern”分别设置成VDD、VSS并点击“Apply”按钮,其余按图3-5中设置方式设置。图3-55.生成PadRing(axgCreatePadRings)PreRoute→PadRingsPadRing是给Pad供电的环状电源通路。图3-66.放置Macro单元。放置Macro没有特别的固定的规则,主要是根据设计要求以及设计本身来合理地摆放macro单元的位置。
本文标题:数字集成电路 后端设计 APR流程 之Astro
链接地址:https://www.777doc.com/doc-3375001 .html