ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从Floorplan到Powerplan:数字后端物理设计核心实战解析

从Floorplan到Powerplan:数字后端物理设计核心实战解析 先把结论放在前面数字后端里有一句话叫“Floorplan决定上限Routing只是兑现下限”。我在带新人跑Innovus LAB Day3的时候最直观的感受是——很多人花两小时点完菜单、敲完命令界面也确实画出了框和条带但你问他“为什么这么摆、为什么用这层金属、为什么条带间距取这个数”他答不上来。这不行。这篇文章就把LAB Day3里Floorplan和Powerplan这条线完整拆开讲一遍。不是给你报菜名式地列命令而是讲清楚每一步背后的物理原因、设计意图、以及我实际带跑过程中反复见到的翻车点。内容围绕一张实际练习用的门级网表展开工具用Innovus适合刚接触数字后端、准备做Floorplan/Powerplan练习的零基础读者也适合已经跑通过一遍流程但没想明白原理的初级工程师对照检查。1. Floorplan前先想清楚的事它到底在规划什么1.1 数字后端流程里Floorplan卡在哪一环数字后端的标准流程一般长这样综合Synthesis→ 形式验证Formality→ 布局规划Floorplan→ 电源规划Powerplan→ 标准单元放置Placement→ 时钟树综合CTS→ 布线Routing→ 时序签核Signoff→ 物理签核DRC/LVS。综合做完之后你手里拿到的是一个门级网表Gate-level Netlist里面是一堆标准单元、宏单元、IO Pad和它们之间的逻辑连接关系。注意这时候这些单元的物理位置完全是未知的就像你手上有一张零件清单但还没有车间布局图。Floorplan要做的就是先决定芯片的长宽、核心区域Core Area大小、IO Pin摆在哪、大的宏单元如SRAM/ROM/Analog IP放哪、标准单元的活动区域划到哪。这个过程做完你相当于给芯片内部画了一张“户型图”——哪里是卧室哪里是客厅哪里是走廊先定下来后面Placement和Routing才谈得上。说句不好听的很多零基础学员对Floorplan最大的误解是认为这一步只是“随便框一个区域把宏单元摆进去”。但实际上Floorplan是整个后端流程里决策密度最高、对最终芯片PPA性能、功耗、面积影响最大的一步。它做得好不好直接影响后面CTS阶段时序能不能收敛、电源网络IR Drop大不大、Routing阶段会不会出现congestion拥塞甚至影响最终芯片的良率。它不是一个“先应付过去再说”的步骤而是一个需要反复权衡的决策过程。1.2 一个合格的Floorplan必须回答的四个问题我在带新人时会强迫他们用四个问题来检验自己的Floorplan是否合格这比界面里画出来的图好不好看重要得多第一个问题芯片做多大这和两个参数直接相关——Die面积和Core利用率Utilization。Core利用率不是越高越好因为标准单元之间要留出走线空间时钟网络、电源网络也要占资源。一般主流设计会把Core Utilization控制在0.65~0.75之间密度太高后期Routing就没地方走线了。第二个问题模块之间怎么分区也就是宏单元和逻辑模块的位置关系。哪些宏单元和哪些标准单元逻辑关系最紧密那些相互之间数据交互频繁的模块必须放在相邻位置否则布线就会拉得很长时序直接崩。这就像工厂里流水线相邻工序要挨着不能在厂区两头各放一个。第三个问题数据流从哪进、从哪出IO Port的位置决定了信号在芯片内部的总体流向。如果IO和对应逻辑模块之间隔着大半个芯片那长连线就必不可少长连线意味着延迟延迟意味着时序不好收敛。所以IO规划本质上是在帮数据流规划路径。第四个问题电源从哪送进去这就是Powerplan要考虑的事。芯片外部供电从Pin/Pad进入经过封装、焊盘、电源网络一层层送到每一个标准单元的电源端。如果这个网络设计得不合理远端的单元可能拿到明显偏低的电压工作频率上不去。这四个问题前三个决定Floorplan的布局质量第四个就是接下来要讲的Powerplan。在LAB Day3里你会做的事情就是把这些问题全部落到具体命令和具体坐标上。1.3 输入文件清单动手前先检查这些东西很多人一到Lab就急着敲init_design结果报一堆错又傻眼。我建议你养成习惯动手之前先把输入文件清单理一遍。一个标准的Floorplan练习需要这些输入门级网表Netlist综合工具吐出来的通常是.v或.vg格式。标准单元库文件LEF/FRAM view描述标准单元的物理尺寸和引脚位置。Innovus里宏单元一般用FRAM view标准单元库则需要tf/lef文件。技术文件Tech File / .tf定义金属层、通孔、设计规则如线宽、间距等物理信息。时序库Liberty / .lib标准单元的时序和功耗信息后面Placement和CTS会用到。IO约束文件IO Constraint / .io定义每个IO Port的方向、位置以及供电Pad的位置。SDC约束综合阶段生成的时序约束Floorplan阶段主要用于接口对齐后续时钟树和布线也会持续用到。Power Intent文件UPF/CPF可选如果设计里有多个电压域需要提前定义。在实际公司的项目里这些文件散落在各个团队的交付目录里。在LAB练习里一般都在同一个目录下打包好。所以我强烈建议你init_design之前先花五分钟打开.tf文件看一眼金属层的命名规则打开.io文件看一眼Port的数量和方向。这个习惯能帮你省掉后面大量排查时间。2. 从空Die到有结构的芯片Innovus Floorplan实操拆解2.1 init_design之后的“空白画布”Innovus启动后第一步是init_design这个命令会把网表、库文件、约束都读进来。执行完之后你会看到一个空荡荡的Die里面没有任何东西。这一步本身不难但我在带教过程中发现有一堆人在这里犯傻——他们以为init_design之后就能看到标准单元了结果屏幕上什么都没有就慌了。这里要明确init_design只是把逻辑网表加载到内存中此时所有标准单元和宏单元的物理位置都还没有确定。Innovus需要你完成Floorplan定义后才进入真正的物理设计阶段。所以看到空白画布别慌这是正常状态。init_design之后还有几个关键的初始化步骤值得注意。比如设置电压域Power Domain信息如果你的设计里有多个电源域需要在init_design之后、floorPlan之前用createVoltageDomain之类的命令把域划分清楚。LAB Day3如果只做单一电源域可以跳过这一步但如果后面做低功耗实验这一步就必须回头补上。另外就是要确认设计里的Power Pin信息。标准单元的VDD/VSS引脚在LEF里有定义但宏单元和IO Pad的电源引脚需要你通过globalNetConnect提前声明。这一步很多人会放到Powerplan最后才做但我的建议是init_design之后就先做一次初始化连接后面再回头补完整。这样可以尽早发现电源引脚命名不匹配的问题。2.2 IO规划与宏单元摆放先占大坑再留通路画完Die和Core区域后下一步是把大模块放进去。先放IO还是先放宏单元不同公司习惯不一样我的建议是先放IO再放宏单元。IO Port的位置通常不是随便定的。如果项目有芯片级规划比如顶层拼图、封装设计那么IO的位置在项目早期就基本确定了一般会通过IO Constraint文件提供。在LAB练习里你可以先用addIoInst手动放置也可以读入现成的.io文件。IO摆放的核心原则是让信号沿着大致的自然流向走。数据从哪些Port进来经过哪些模块再从哪个Port出去这条物理路径越顺畅越好。你在培训机构或者学校里听到的“IO要均匀分布”“同一个总线的Pin要尽量靠近”本质上都是为了减少交叉走线和长距离绕线。IO大头定下来后接着是宏单元摆放。宏单元包括SRAM、ROM、模拟IP这类面积大、接口规律性强的模块。每个宏单元内部已经是一层层堆好的物理结构无法更改所以它在整个Die里的落点要格外谨慎。宏单元摆放时我会重点关注两件事第一和它交互最频繁的逻辑模块能否就近放置第二它有没有挡住标准单元的关键布线通道。怎么判断交互是否频繁两个方法。直观的方法是看网表里模块间的连接数量高连接的模块之间距离要近更精确的方法是用Innovus里的readNetlist阶段生成的飞线图或者叫连接云图连接线密集的区域会特别亮。如果你在界面上打开Connection图看到某两坨模块之间一堆线缠绕在一起那就是它们该贴在一起的有力证据。在实际操作中我见过很多新学员一上来就把所有宏单元沿着Die边缘排得整整齐齐结果边缘留出大量空白而Die中间挤成一团。或者反过来把所有宏单元摆在中间把标准单元赶到四周——这等于主动放弃了最佳的布线资源和电源网络放置空间。标准做法是把宏单元分散放置让标准单元能利用它们之间的间隙形成连续的区域同时留出水平、垂直两个方向均匀的布线通道。2.3 用floorPlan命令控制Die和核心面积Innovus里定义Floorplan最基础的命令是floorPlan。我第一次教新人时发现大家光看Help文档里那一长串参数就懵了其实核心参数就几个。我一般这样用floorPlan -r 1.0 0.7 5 5 5 5这条命令的意思解释一下-r 1.0表示Die的长宽比Aspect Ratio为1.00.7是Core Utilization核心区域利用率后面四个数字分别是Core区域到Die边缘的上、下、左、右间距单位取决于你的库LAB里通常是micron。如果你不想用长宽比定义也可以直接指定具体尺寸floorPlan -d 250 250 10 10 10 10意思是Die的宽度250、高度250各边留10作为Core到Die的边距。两种方式取决于项目需求。如果IO位置已经固定通常用-d模式更能精确匹配IO的坐标范围。这里有个特别容易被忽略的点Core Utilization并不是一个最终值它是一个初始值。Innovus在Placement时还会对标准单元做摆放优化随着布线需求增加工具可能会自动扩大Core面积。所以你在Floorplan阶段设定的Utilization只是给工具一个初始的“松紧度”参考别把它当成绝对不能改的硬约束。在LAB练习里你完全可以把Utilization从0.7调到0.8看它对后续时序和拥塞的影响——这本身就是很好的学习实验。floorPlan跑完之后界面里应该会出现一个有颜色的矩形框那就是Core区域。此时IO Pad应该自动吸附在Die周围宏单元则一个都没有。接下来你再手动放置宏单元或者从Constraint文件里导入摆放约束。有一点提醒有些培训班或者文档里会教你用GUI拖拽方式摆宏单元——鼠标一拖就完事。我建议你练习时尽量用命令行或者至少把GUI操作对应到命令行再琢磨一遍。因为真实项目的宏单元数量可能是几十上百个靠手拖完全不现实。你必须学会用坐标、用命令批量摆放和批量检查。2.4 报告与检查完成不是靠眼睛看很多新手做完Floorplan后只看界面里方块摆得顺不顺眼就宣布“完成了”。这是大忌。摆完宏单元之后必须做几件检查动作第一检查Core Utilization的实际数值。通过report_utilization之类的方式看看当前利用率是否和设计预期一致。比如你设定0.7实际宏单元已经占掉0.5留给标准单元只有0.2的密度空间这显然有问题相当于俩胖子挤一张单人床。第二检查宏单元之间的间距。宏单元之间、宏单元与Core边缘之间至少要留出足够的布线通道。怎么看一种粗糙但有效的方法是在Innovus的GUI里打开障碍物显示将宏单元的halo扩展边界显示出来再目测通道宽度是否均匀。第三检查IO vs Core区域。如果IO Pad位置和Core边缘过近后面打电源环Power Ring的时候很可能会碰到IO走线产生设计规则冲突。第四用verify_floorplan之类的命令跑一次基本检查看看有没有软/硬约束违背。这一步比眼睛扫描可靠得多。我在LAB Day3教学时会让学生把每一步操作之后的报告都保留下来比如每放完一个宏单元就记一次坐标跑完floorPlan就导出一次def。养好这个习惯后期如果出了时序或DRC问题你才能回头定位是哪一步出的问题。3. Powerplan给芯片画一张完整的供电管网图3.1 为什么Floorplan一结束就要立刻做Powerplan很多学员第一次听到“Powerplan要放在Placement之前做”时第一反应是标准单元都还没放干嘛急着画电源线这其实恰恰是Powerplan要先行的重要原因之一。标准单元摆在Row上每行标准单元上方都有固定的电源railVDD和地railVSS——这两根rail是标准单元库本身定义好的每个标准单元的电源引脚就是通过它取电的。但rail本身很薄电阻很大不能指望它把电流从Die边远距离传送进来。如果不在标准单元上方铺一层密密麻麻的电源条带Power Stripe一个离Die边缘很远的单元电流从IO Pad流过来要经过一大段细长的rail中间电压损耗会大到你不敢想——这就是IR Drop。所以Powerplan的核心逻辑是用高层金属电阻小、电流能力强铺一张“电源骨干网”覆盖全Die然后在每一行标准单元需要的地方用Via把骨干网和底层rail连起来。这张骨干网必须在标准单元前铺好否则你没法保证每个位置的单元都能就近取电。打个比方Floorplan是画好了城市街区Powerplan是趁房子还没建先把供水主管道铺满整个城市的地底。总不能等房子都盖好、住户入住后再挖开路面铺水管吧。3.2 Ring、Stripe、Rail、Mesh四种供电结构的分工Powerplan里至少有四个概念你不该搞混Ring电源环、Stripe电源条带、Rail电源轨、Mesh电源网状结构。Rail在标准单元Row内部横向贯通的细长金属线一般用M1宽度很小不同工艺下0.1~0.5微米左右是标准单元直接取电的“最后一米”。每个标准单元的VDD/VSS引脚都通过Via连接到Rail上。Ring环绕整个Core区域的闭合金属环分VDD环和VSS环。Ring的作用是汇聚外部传进来的电流为Stripe提供“源头”补给。Ring一般用中上层金属如M5/M6/M7宽度较大像绕着城市的一条环形高速公路。Stripe从Ring上引出、横跨整个Core区域的条带状金属线有横向有纵向间距一般取几十微米到几百微米。Stripe的作用是把电流从Ring输送到Die内部各处是整个电源网络的“主干道”。Mesh当你有横向Stripe和纵向Stripe交叉形成的网状结构时就形成了Mesh。Mesh的好处是供电路径四通八达电流可以绕开路障对IR Drop最有利但代价是金属资源占用多、布线拥塞加剧。这四者的关系用一句话总结Ring汇电流Stripe送电流Rail给单元供电Mesh保证任何位置都有多路径供电。在LAB Day3的标准流程里你至少要做一次Ring电源环 一组Stripe条带 后续的sroute连接Rail和Stripe的Via阵列整个供电网络才算真正打通。3.3 addRing与addStripe参数逐项解读Innovus里创建电源环和条带最常用的两条命令是addRing和addStripe。我见过太多人在这一步直接把文档里的例子复制过来参数改都不改就敲进去这种操作方式参加Lab勉强能过但换个项目一定会翻车。下面逐个参数讲清楚它们到底什么意思。创建Power Ring参考命令addRing -nets {VDD VSS} -type ring_global -width 2.0 -spacing 0.5 \ -layer {top bottom M6 left right M7} -offset 1.0 \ -core_offset 1.0逐项拆开看-nets {VDD VSS}创建哪几条电源网络的Ring。多电压域项目里这里会列出一堆网络名。-type ring_global环的类型。Global意思是围绕整个Core区域打一圈还有ring_block等类型是围绕特定Block打的。-width 2.0 -spacing 0.5Ring金属线的宽度和同层间距。宽度越大通流能力越强但占用布线资源越多。-layer {top bottom M6 left right M7}四个方向用的金属层组合。这里的意思是上下两边用M6左右两边用M7。为什么要分两个方向用不同层因为环要转弯如果转弯处用同一层就有一个方向必须打Via才能换向。实际项目中你通常会让横向的环和纵向的环用相邻两层金属同一层的话在拐角处会短路或需要额外处理。-offset 1.0 -core_offset 1.0环离Core边缘的偏移以及环内部相对Core的偏移。这里有一个非常常见的新手错误所有层的Ring都打成同一层金属或者干脆直接复制示例里的层名不核对工艺文件。不同工艺下M1-M3通常是细线距金属适合走信号或局部供电M5-M7或更高才是供电骨干层。如果你用M2打Ring宽度设成2微米可能直接违反金属最小宽度/间距规则工具会在你面前报一堆DRC错误。创建Stripe参考命令addStripe -nets {VDD VSS} -layer M7 -direction vertical \ -width 2.0 -spacing 1.0 -set_to_set_distance 60 \ -starting_pin_x 5.0 -max_same_layer_jog_length 2参数含义-layer M7 -direction vertical条带用M7金属层方向是纵向Vertical。这里有个隐藏原则纵向Stripe用某一层横向Stripe最好用另一层这样才能形成Mesh网络同时避免同层交叉短路。-width 2.0 -spacing 1.0条带宽2微米同层间距1微米。-set_to_set_distance 60两根同网络条带的中心间距为60微米。这个数字怎么来的需要结合你预估的电流密度和IR Drop目标来决定。通常的做法是在早期粗略估算一下平均电流然后根据金属层的方阻和电迁移EM限制反推需要多大的条带密度。LAB阶段你可以先按60微米试跑后面看IR Drop报告再调。-starting_pin_x 5.0第一条Stripe从X5的位置开始起画。-max_same_layer_jog_length 2允许同层绕线的最大长度这是为了避开障碍物时用。这些参数不是背下来的而是要在工程需求里推出来的。LAB里你完全可以做个小实验分别用set_to_set_distance为30、60、120跑一遍然后看后续Placement的拥塞情况和IR Drop报告。这样你就能直观感受到Stripe密度和时序、物理可布线性的trade-off。3.4 PG连接与sroute让电源网络真正生效铺好Ring和Stripe之后还有一个关键动作把电源网络和标准单元的引脚、宏单元的电源引脚真正连起来。这一步做不好前面画的网再漂亮也没用。首先要做的是声明全局连接Global Net Connection。Innovus需要知道VDD/VSS网络应该连接到哪些引脚上。我习惯用类似这样的命令globalNetConnect VDD -type pgpin -pin VDD -inst * -override globalNetConnect VSS -type pgpin -pin VSS -inst * -override globalNetConnect VDD -type tiehi -inst * -override globalNetConnect VSS -type tielo -inst * -override第一条意思是把标准单元库中所有名为VDD的PG Pin连接到VDD这个电源网络。后面两条是把标准单元里需要接高、接低的特殊引脚如某些输入端的Tie Cell也绑定到对应电源网络上。接下来是addStripe之后再跑sroute也就是细路由。这条命令会将标准单元Row里的VDD/VSS Rail和你在上面铺好的Stripe之间用Via连接起来。以我常用的写法sroute -nets {VDD VSS} -powerFlush true-powerFlush true表示在遇到障碍物时尽量绕行或优化连接确保整个电源网络真正打通。这一步做完后你一定要做一件事检查Powerplan的连通性。最简单的方式是用Innovus菜单里的“Verify Power”或者verify_pg_connectivity不同版本名称略有差异。如果报错说有部分PG Pin没连上多半是前面globalNetConnect的pin名写错了——比如标准单元的电源引脚不叫VDD而叫VDDPST你对不上号后面全部白搭。这种问题在带真实项目时特别常见因为不同IP厂商的电源引脚命名习惯完全不同一定不要想当然。4. Day3最容易翻车的几个现场附自查方法4.1 条带方向跟着Pin方向走不然IR Drop教做人我在Lab里见过最高频的翻车场景就是有人随手把横向Stripe和纵向Stripe都用了同一层金属或者Stripe方向完全无视标准单元Row的方向。要理解这个问题先记住两条基本事实第一标准单元的Row是横向排列的Row内的Rail是横向的M1。第二你想把横向的Rail和纵向的Stripe连接必然要经过Via。但如果纵向Stripe和Rail不在可连通的相邻层这个Via就打不出来或者打得非常别扭。所以工程上的通常做法是让纵向StripeVertical用奇数层或偶数层里合适的那一层横向StripeHorizontal用另一层且横向Stripe尽量和Row的Rail方向匹配。具体用哪层看工艺的LEF里金属层的Preferred Direction。先进工艺里一般M5取横、M6取竖、M7取横、M8取竖以此类推。如果你方向选反了最直接的结果是Innovus在sroute阶段会花费大量时间绕线甚至产生大量打孔导致局部拥塞最终IR Drop超标。所以做Powerplan之前先到LEF或Layer Window里看一眼金属层方向再动手。这是零基础学员特别容易忽略、但实际项目中绝不允许犯的错。4.2 宏单元摆放堵死标准单元的通路第二个翻车点是宏单元摆放时没给标准单元留出足够的“横穿通道”。芯片里的走线主要分横向和纵向两个方向。标准单元Row之间的横向通道是信号线横着走的空间而纵向通道通常由高层金属承担。如果你在Die中央放了一排宏单元把上下区域完全隔开那麻烦就大了——标准单元需要从上方绕到下方信号线绕一大圈时序直接烂掉。我检查宏单元摆放时有个习惯打开试图显示所有宏单元的Fence/Region然后沿着它们画一条水平线看看这条线上“空白”占比是否合理。如果某个X坐标附近的宏单元密集得像一堵墙那就是挡路了。解决方式有很多调整宏单元位置、旋转方向、给宏单元加Halo/Keepout Margin。LAB阶段通用做法是选中宏单元右键设置Halo比如四周各留5微米。这样Placement和Routing阶段标准单元和走线就自动绕开它了。Halo的大小不是拍脑袋定的要在“保护宏单元免受干扰”和“别浪费太多面积”之间平衡你可以试试不同数值对结果的影响。4.3 省了Endcap和Tapcell后面DRC全是泪Day3的Lab里很多学员跑到Floorplan/Powerplan结束就开始急着做Placement。但我提醒一句如果前面没加Endcap和Tapcell后面会有大量的DRC等着你。Endcap末端单元放在Row的两端用来掩盖标准单元边界处因光刻工艺造成的边缘效应比如多晶硅端头不完整。没有EndcapDRC会报出边缘漏电或图形异常的问题。Tapcell阱接触单元标准单元内部需要在N阱/P阱上打接触孔也就是接Bulk端。常规标准单元里不会自带足够的阱接触需要用Tapcell按固定间距插入否则会出现闩锁效应Latch-up风险。在Innovus里这一步需要在Placement之后做但规划要在Floorplan阶段就留好位置。我的建议是跑完标准单元摆放后立刻加addEndCap -prefix ENDCAP -library your_std_lib -cell your_endcap_cell # 以及按库要求插入Tapcell注意不同工艺库的Endcap/Tapcell名字完全不同——有叫ENDCAP_TIE的有叫TAPCELLBWP的甚至同一种库不同版本的名称都可能不同。所以做Day3之前建议打开库文档搜一下Endcap和Tapcell的推荐插入方式。如果有任何疑问参考库自带的Innovus脚本模板比瞎猜名字安全得多。4.4 电源网络连不上忘连PG的经典报错最后一个经典翻车场景是verify_pg_connectivity报错或者Placement阶段报“Cannot find PG Pin”之类的问题。查来查去最后发现是globalNetConnect漏了一句。这个错误在真实项目里也超级常见而且往往不是“全没接”而是“接了一部分”。比如你在init_design之后只给标准单元做了PG连接但宏单元或者特殊Pin如tiehi/tielo没处理于是工具就找不到连接关系。我的排查习惯是三步走用report_global_nets查看当前已经声明的全局网络确认VDD/VSS有没有被正确声明。用dbGet一类命令查标准单元库里的PG Pin名确认和你的globalNetConnect写的是不是同一个名字。检查完再跑一次verify_pg_connectivity看看是否还有遗漏。写这个并不是让你背排查步骤而是希望你养成“工具报错先查基本假设”的习惯。很多报错根本不是工具bug是你前面某个名字写错了。5. 我自己的实操经验和后续可以继续挖的方向5.1 适合新手的检查清单把Day3完整重做三遍之后我把自己的检查习惯整理成了一张清单分享给正在入门数字后端的你。每次做完Floorplan和Powerplan按这个顺序自查一遍基本能避开90%的低级问题Utilization是否符合预期报出来的值和当初设定的是否一致是否因为宏单元面积过大挤占了标准单元空间。IO位置是否有冲突IO Pad是否和Core边缘、Ring位置冲突。宏单元Halo是否设置所有宏单元周围是否留出了足够的keepout区域。电源环是否闭合Ring四个方向是否都生成网络名是否正确。Stripe的方向和层号是否正确纵向、横向是否用了合适金属层和库的Preferred Direction是否一致。PG连接是否完整globalNetConnect覆盖标准单元、宏单元和特殊Pin。是否完成sroute底层Rail和上层Stripe是否确实连通。加Endcap/Tapcell是否按库要求完成名字是否正确。是否保存了DEF和脚本每次进展都存档方便回溯。这张清单我前前后后调整过很多次最终沉淀下来的就是这9条。它不是教条是每次踩坑后积累出来的肌肉记忆。你可以按项目实际情况增删但核心思路是一样的——在动手做下一步之前先把当前这一步的物理完整性和逻辑一致性确认掉。5.2 从Day3往后看Floorplan质量如何影响后端全局很多学员在Day3结束时觉得“Flooplan做完就完事了”其实恰恰相反。Floorplan阶段做的决定会在你之后几天的LAB里不断“回来找你”。比如你在Floorplan阶段没有认真规划Macro的位置导致某些模块被隔开太远。到了CTS阶段你要在时钟网络上加Buffer来平衡延迟结果发现信号线本身就长延迟大得根本压不住。又比如你在Powerplan阶段Stripe密度不够到了IR Drop分析阶段报告上会画出一片鲜红的压降区域这时候你再想加Stripe却发现Routing都已经做完了改起来伤筋动骨。这也是为什么我一直强调零基础阶段不要只追求“跑通命令”而要多想一步“这个参数变动对后面阶段会产生什么影响”。我强烈建议你把Day3当作一个实验场故意做几个“坏决定”比如把Utilization设成0.85或者故意把宏单元堆在一个角落然后继续做Placement和CTS观察后果。这样挨打一次比看十篇文档都管用。我在实际带教中还会特别推荐学生把Innovus每次生成的报告都存下来命名好像floorplan_summary.rpt、power_connectivity.log、after_sroute.vdd.summary这些不要全部堆在默认路径里。因为等你回头排查问题时时间戳和命名就是救命稻草。这个习惯在我自己工作的前几年帮了我大忙哪怕现在换了工具和流程这个底层逻辑也一直没变。
返回列表