芯片后端设计,看似只是将网表中的晶体管摆放好。但并不是如同砖头砌墙那样简单粗暴。它是一门兼具形式美和工程实践需求的技术。形式美,直接来源于功能内容和需求,在后端设计的环节中,数以万计的标准单元如散乱的点点繁星,却在功能、时序等满足的前提下,寻求各个Block之间的依赖关系,进而使芯片内部之间呈现出和谐与稳定。
数字芯片后端工程师主要工作就是接收数字前端提交的代码,最终交付一个完整的芯片布局布线结果。
数字芯片后端设计环节一般都是芯片项目驱动。芯片也分很多种,大小不同,难度不同。简单按功能划分,主要类型有 WIFI芯片、BLE芯片、RFID芯片、音频芯片、传感器芯片、汽车电子、手机芯片等等。
这里就拿一个比较小的芯片举个例子,让大家大概了解设计一个芯片的前前后后的工作,整个项目大概三个月时间。
项目一般分三个阶段,因为每个阶段的数据质量不一样,所以每个阶段的目的也不一样。
1.0阶段:
前端数据:
给一个初始的网表,这个网表要求包含了所有的IP,包含了所有的PAD,有基本的CLOCK结构。
后端工作:
根据PAD和IP调整出大概的布局情况,对于IP的形状和出pin的位置给出具体的建议和IP团队协商。
对于布局做POWER和GROUND的规划,PG的宽度,间距,全局PG怎么走,PG的设计是否满足对于最大电压降的要求?
PAD的摆放是否满足ESD的要求,PAD RING的走线怎么设计?
尝试不同的布局,得到最小的可以绕线绕通的布局,追求极限。
检查后端时序工具和前端时序工具的一致性(有的时候库有问题,有的时候sdc有问题)。
2.0阶段:
前端数据:
这个网表所有要用的IP和PAD数量都已经freeze,时钟结构(包括DFT)都已经完成,前端工具在合理的uncertain下面,时序干净。
后端工作:
根据这版网表确定最终的布局,PAD摆放和IP的custom routing需要开会进行初步review。
开始做时序收敛,仔细分析时钟结构(不断的和前端进行沟通),分析绕线结果,做到时序收敛(包括setup和hold),进入signoff工具查看时序一致性。
开始看physical verification的结果,确保base layer(即metal层以下的,例如poly AA等)没有问题,所有的问题都可以在最终版修复。
布局布线前的网表和布局布线后的网表进行一致性检查。
3.0阶段:
前端数据:
网表数据基本freeze,时钟结构不会再进行变化,可以有微小的调整,但仅限于ECO实现。ECO一般分为两大类。
Function ECO:
局部的改动逻辑功能,例如将cell的连接关系改掉,或者增加删除inverter等。
Timing ECO:PT/Tempus优化分析后吐出的timing优化脚本。
后端工作:
做时序收敛,并且保证在时序signoff工具中时序收敛,然后开始清所有的错误(DRC/LVS/TIMING/IR/ERC …),没日没夜的进行迭代,直到最终的流片。