你和数字后端设计大师的差距原来在这里

经常听到很多人在讨论某某技术大牛大咖,技术上多牛逼等。当你们听到这些时,除了羡慕外,各位是否知道大家口中所说的大牛,到底技术上要有多牛,才能称得上“大牛”或者“大神”呢?我相信很多工作两三年的数字后端工程师也不是很清楚,更不用说那些正准备或刚踏入数字后端这个family中的新成员。之所以想跟大家分享下这个topic,原因有两点。第一,了解大牛所谓的定义(小编自己花了半个小时总结列出了几点)。第二,让大家明确自己的努力方向,使自己也变成传说中的牛人,哥就是要变成传说。只要够努力,不断往本篇所讲的方向努力,终有一天你们一定可以的。
1.懂前端
这里所指的懂前端是指熟悉verilog硬件描述语言(不需要自己去写coding),当然如果写过rtl代码的更好,实际工作中很多大牛都是以前做过前端设计的。当你拿到一个设计的rtl,你需要看懂设计中包含那些功能子模块,看懂设计中的时钟电路结构,便于后面写constraint约束。对的,你绝对没有看错,就是需要自己会写约束文件。
2.熟悉综合
当rtl ready后,可以拿来自己做逻辑综合。这里所讲的综合并不是简单的run flow。
第一,需要与前端工程师沟通,了解设计架构,时钟电路结构,各个时钟间的同步异步关系,芯片的应用场景等方面。
第二,根据设计需求开始编写设计约束文件sdc并请前端设计工程师review(这个过程需要不断与前端设计工程师不断沟通,特别是第一次做某个新的design)。
第三,制定扫描链插入方法,分配scan chain条数,确保测试覆盖率,产生scan test pattern。
第四,在dc/dct做ppa优化(performance, power, area)。
3.精通数字后端布局布线
这里是数字后端实现的大本营,内容很丰富。下面让小编带领大家一起过一遍,哪里不会学哪里。
第一,floorplan和powerplan规划。虽然就短短的几个字,可是涵盖的内容比较多。而且这步也是后端实现过程中非常重要的一步。主要工作如下:
chip或者block 形状选取(矩形或者方形抑或多边形,与design相关,关乎routing 资源)
io pad摆放,power pad对数计算和摆放,sso计算,clamp cell布局
memory,ip摆放(间距留多少?多少最优?)
based on routing and timing memory,数字ip和模拟ip的摆放
power strap width和pitch估算(memory,core区域,ip的powerstrap)和power network设计和redhawk压降分析(静态和动态)
power switch cell 数量计算
chip area 估算
第二,placement阶段。这个过程主要是写一些脚本guide工具去实现我们最想要的placement,达到预期的性能,功耗和面积(ppa)。主要工作如下:
使用multi-vt 作为target_library优化
timing debug and optimization
create_voltage_domain, create_bounds,keepout setting,group_path等
优化congestion
第三,时钟树综合阶段。这个阶段需要后端工程师能够自己来分析时钟树结构,并根据design的spec来编写一个约束文件,引导 工具 如何长时钟树。很多soc中,时钟都有几百个。由于pll的个数有限,因此很多设计都有时钟选择和切换电路。因此,针对复杂的时钟结构,工具可能很难做到符合我们预期的时钟树(clock skew 和clock latency)。这步非常关键且非常重要,也是衡量一个数字后端工程师能力的重要指标。主要工作如下:
clock tree building constraint的编写
长时钟树需要设置的timing drc等
时钟树用于长tree的buffer或者inverter种类选择
设定clock net 的non-default rule
如何做shielding
第四,route阶段。这个过程主要解决route问题。碰到route有short以及其他类型的drc能够得心应手处理好。资深的数字后端工程师能够在route前就把很多不应该存在的drc 规避掉。
4.精通时序分析和signoff
时序分析和timing sigoff这步,很多数字后端工程师也都做了。但是你是否是拿着现有的flow跑下primetime,然后就开始你的leakage optimization,hold violation fixing 和timing drc的fixing?这个能力是每个数字后端工程师都必须具备的,但是仍然远远不够。你需要搞清楚以下几点:
signoff的标准,如何定?(特别是一个新的工艺)
如何优化leakage优化的flow,使得leakage最小化?
如何少插hold buffer?
遇到hold buffer修不进去,如何解决?
5.精通物理验证
这步属于physical signoff阶段。主要为drc,lvs,erc,esd,latch up 等方面的检查和修正。
如何快速进行物理验证?
6.熟悉各种封装(flip chip ,wire bond常见封装形式)
flipchip封装种类
7.脚本能力强,至少掌握一种及以上脚本语言(tcl,perl,python等)
8.面广,且有专攻方向,在某一个方面能力特别强。面广就比如本篇所列到甚至更多方面你都比较熟练。专攻方向是指你至少要在某个领域有深入的研究而且做的要比别人好,比如擅长做高频率的模块实现,或者擅长physical方面(powerplan,drc ,lvs等),抑或擅长写脚本,能够写一个timing engine出来。
9.流程自动化
将整个实现flow(从综合到物理验证)调好后,一旦rtl ready后可以自动一键实现从rtl到物理验证(较少的drc)。
大致就罗列这些,如果你以上几点,你都做到了。那么,恭喜你,你就是大神。如果还有某些方面还没做到做好,请继续努力。如果你是刚步入数字后端这个行列中,那么也可以将以上小编所列的清单作为自己的努力方向(往往新手小白都不知道自己要掌握哪些知识)。