从零开始的⼩⽩pr学习之旅--day2数字后端流程(⼀)
个⼈认为,在开始后端⼯作的时候,抛开别的,⾸先要思考的就是我有什么,我要做什么,我要怎么做,我要做到什么程度。有了这个思路,下⾯将描述下我对数字后端⼯作每个阶段的简单理解。
1.Data Prepare
这⼀阶主要是对⼿头所拥有的⽂件,资料做⼀个整理。个⼈觉得这是后端⼯作重中之重的⼀个环节。⼤概要整理的内容如下图
⾸先是库⽂件,项⽬所⽤到的某⼀⼚家的某⼀制成,会有相应⼀套完整的库⽂件。需要在其中选择项⽬要⽤到的,并把它们按照固定的分类规整的放置好。⽐如要⽤到的lef,包括tlef,stdcell的lef,mem的lef,ip的lef。根据要跑的corner,选择合适的lib,ss的lib,ff的lib 等等。stdcell的gds以及其它ip的gds,⽇后要做的drc lvs的rule等等等等。
其次是前端交付的数据,例如⽹表,sdc。我个⼈觉得需要将每⼀版前端交付的数据按照⽇期放好,既是做个备份,同时也是留个⼼眼。当第⼆版数据来的时候也好有个对⽐。就⽐如前端告诉我新版本的⽹表优化了,⾯积⼩了。这时候我只需要打开⽹表看⼀眼⾏数,和之前的版本的⽹表⾏数做个对⽐。如果⽹表⾏数上新版都⽐旧版多很多,那我直接就可以反馈给前端⽹表可能有误,都不需要读⼊⼯具跑⼀下了。
最后就是积累的各种辅助性的脚本,参考⽂件之类的。
上述过程就是对“我有什么”做⼀个整理。正所谓磨⼑不误砍柴⼯,当把⼿头的数据规规整整的放置好之后,⽇后需要什么就在专门的地⽅去取,会省特别多特别多的时间。可能⼤公司在这⽅⾯做得很完善,根本不需要我们去考虑,但是我还是觉得我这种⼩⽩应该“未⾬绸缪”⼀下,万⼀哪天这些没准备好,我起码有个思路。我去整理的时候可能⼀次整理的不全⾯,⽇后还要返⼯临时去⼀些⽂件,但经历这样⼀个过程,经验不就积累下来了么。
2.Initial Design
Initial design就是把输⼊⽂件读⼊到⼯具当中。最核⼼的两个输⼊件就是⽹表和物理库lef。只要有这两个输⼊件,那么就可以开启⼯具进⾏fp了。lib库和sdc即是时序⽅⾯的输⼊件,有了它们,时序分析相当于有了依据。基本上这⼏项内容齐全了,就可以继续后续的所有流程了。
我有什么?我有这些输⼊件,我要做什么?我要将这些输⼊件读⼊⼯具。我要怎么做?上⼀阶段已经把这些数据准备好了,我只需要把具体路径给⼯具就好了。我要做到什么程度?我需要保证输⼊件完完整整的读⼊⼯具,这时候就要去看log⽂件了。看看⼯具报了什么error,什么warning,是不是跟输⼊⽂件相关的,是不是报了某些⽂件缺失的,通过读log的⽅式可以保证输⼊件的齐全完整。
所以你看!当data prepare做的很完善的时候,这⼀步是不是简单的不能再简单了。⽹表,sdc,lib,lef都已经分门别类的规整好了,只需要写个路径就OK了。
3.Preplace
Preplace这⼀阶段我个⼈理解是后端⼯作最难做的两个环节之⼀。另⼀个是cts。
Preplace要做的第⼀件重要的事就是规划整个设计的布局,也就是floorplan。fp主要是合理规划mem,ip这些macro的位置。fp的好坏影响着后续环节的进⾏。好的fp会使得后续环节的⾛线清晰,逻
辑分布均匀,时序通畅。糟糕的fp会让每⼀步⼨步难⾏。
那么如何做出⼀个好的fp呢。以我⽬前的认知来看fp的⼀个重要依据是数据流。数据流怎么理解呢,其实就是数据从哪⾥来,到哪⾥去的⼀个过程。真正的项⽬数据不会是简单的从A到B的,⽽我们后端⼯程师也不太需要专门去搞清楚整个项⽬的原理,怎么搞明⽩数据流这就要和前端交流了。⽐较难搞的是,有的时候可能没有⼈给你理清数据流,这时候需要参考⼀些说明书之类的⾃⼰去搞清楚。为什么⼀定要按数据流摆fp呢?其实就是减少数据来回打折的现象。让路径尽可能短。数据本⾝由A到B再到C,fp按照moduleA moduleB moduleC的顺序摆,数据是⼀路通畅的。但是如果按moduleA moduleC moduleB的顺序摆,那么数据从A到B天然就会多⾛⼀段路,既造成了绕线资源上的浪费,也造成了时序问题。
有了数据流就能将整个设计细化。我的⼀个思路是,先固定那些和端⼝有交互的module,这些和端⼝交互的module往往都是数据输⼊或者输出的地⽅。把这些moudule的macro放置在相应的端⼝附近,其实就相当于确定了头和尾。当这些module的位置确定后,再去摆放和这些module有交互的其它module。如果有某个module和其它多个module都有交互,那么肯定倾向于将该module摆在⼀个到其
它module距离均衡的地⽅去。这样⼀步⼀步的每个module都会有个⼤致的位置了,fp基本也就完成了。网络前端需要学什么
好的fp不是⼀步到位的,需要根据后续place的结果,来判断fp的合理性。根据place结果可以发现fp中的不⾜,再返回到fp,调整module的相对位置。来来回回多次,最终会得到⼀版完善的fp。fp是个经验性的⼯作,如果有⽆限的时间,甚⾄可以不需要数据流,单纯的⼀版⼀版对⽐place结果就可以选出最好的fp。innovus⼯具也可以在图形界⾯,通过看各module间的⾛线数量确定各模块的位置。但是往往项⽬时间都很紧,因此需要数据流作为fp的指引,减少迭代的次数。
我有什么?我有数据流,我迭代的不同版本的数据,innovus⼯具的飞线信息。我要做什么?我要摆出⼀版⾛线短,拥塞低,时序好的fp。我要怎么做?我需要根据数据流确定⼤致的fp,根据每版结果细调fp,这样⼀版⼀版的迭代以达到⼀个时序,拥塞都相对较好的fp。
以上只是笼统的说了下fp的过程,具体的细节以后的帖⼦中会详细的总结的。
Preplace要做的第⼆件重要的事就是电源的规划。电源可太重要了,这⽅⾯要学习的内容也特别多,这⽅⾯的知识我也很是⽋缺。我就以我⽬前所接触到的⼤致说说电源规划的流程。我会把⼀个项⽬的电源分为三个部分,stdcell电源,core区域电源,以及mem,ip的电源。
⾸先要明⽩⼀点,⼀个项⽬的绕线资源⽤于两个部分,电源的绕线资源,和数据信号的绕线资源。如果电源占⽤太多绕线资源,那么数据信号将⽆充⾜的绕线资源,就会有⼤量的short问题。如果数据信号占⽤太多的绕线资源,那么电源可能会不够充⾜,这将影响到芯⽚的整体性能。所以电源和数据信号的绕线资源要合理分配。假如说项⽬总共可使⽤12层metal,那么⼀般来说最⾼层的
metal12,metal11,metal10,将会被完完全全⽤于电源,因为⾼层⾦属厚度⼤电阻⼩,最适合做电源。最底层的metal1会被⽤于stdcell电源。stdcell的pin也是metal1,⽽stdcell pin是通过metal2连接出去的,stdcell⼜是遍布在整个芯⽚中的。这样看来⽤于数据信号绕线资源的只有metal2的⼀部分以及metal3到metal9。电源都是通过最顶层⼀层⼀层传到最底层的,为了保证电源的可靠性,metal3到metal9的⼀部分也会被⽤于做power,所以实际上绕线资源会更少。所以规划电源既要保证电源的充⾜,也要给数据信号留裕量。⼀般都是开始的时候电源会打的相对密,到后⾯阶段如果绕线资源⾜够,那么⾃然很好,如果绕线资源不够,可以适当删除⼀些电源线,让给数据信号。
其次,电源如何去打呢。stdcell的电源不必多说。core区域电源最常见的结构就是ring+stripe。ring如下图,就是连成⼀个环的电源。⼀般芯⽚的电源IO会分布在芯⽚的每条边上。通过ring环将电由外部输⼊到芯⽚内。ring环起到了均衡各点输⼊,避免某些区域输⼊点密集某些输⼊点稀疏造成的IR DROP。ring环⼀般是由最⾼层⾦属构成,我这⾥⽤红⾊和绿⾊代表最⾼的两层⾦属。当然ring环也可以由多层⾦属构成,这样更强劲。具体的画法⽇后我也会详细总结。(最近没法在家⾥打开⼯作⽤的
服务器,只能⽤画图来画个简图)
stripe如下图,就是⼀根根电源线,画出来就和条纹⼀般,接在ring环上,然后遍布整个core区域。我这⾥特意⽤不同颜⾊代表不同层的⾦属,每层都如此⼀层⼀层由⾼层到底层。形成了密布的电源⽹络。所以电源⽹络就是由不同层⾦属线⼀层层交织⽽成的⽹络结构。
mem和ip的电源其实和core区域电源打法相似。只不过由于mem⼀直处于存储读写的状态,对电源需求⾼,所以mem上的电源⼀般会画的特别密。 mem上的电源层次会根据mem的pin的⾦属层决定,⼀般会使⽤⽐pin层次⾼⼀些的⾦属。mem的摆放⼀般都会采⽤堆叠的形式,所以电源还要考虑mem pin的连线问题,得保证电源线不会阻碍mem pin的连接。⼀些ip会对电源有特殊要求,⽐如需要在ip周围也做⼀个类似ring环的结构。这在ip的使⽤⼿册上都有描述,根据⼿册上的要求指导照着打就好了。
Preplace的要做的第三件重要的事(其实是杂七杂⼋好⼏件事)插⼊物理cell,包括welltap,boundrycell,gfiller,decap等等。添加blockage,某些区域不能摆放cell要加hard blockage;mem沟道不希望摆除了buffer,inv外的cell需要加soft blockage;根据上⼀版place结果得知某个区域cell density太⾼,需要在preplace阶段在这个区域加partial blockgage。某些区域需要预留⼀部分⾛线资源添加route blockage。检查fp的摆放是否合理有⽆摆出core外的macro,有⽆重叠的macro,等等。检查输⼊件是否齐全,检查有⽆drc,有⽆power的short。
以上内容做完Preplace就算完成了,所以Preplace⼈⼯介⼊的地⽅特别多,需要注意的细节也特别多,这是需要⼀次⼜⼀次的尝试去积累经验的。
不知不觉已经码了4000多字了,这次的总结就先到这了,下次再简单说说后续的环节。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论