数字IC基本设计流程
数字IC设计的基本流程如下:
-
芯片设计分为前端设计和后端设计,前端设计(也称逻辑设计)和后端设计(也称物理设计)并没有统一严格的界限,一般以逻辑综合为分界点,涉及到与工艺有关的设计就是后端设计。
-
综合、DFT、UVM 等也可以为中端设计。
0. 需求分析
- 产品要解决什么问题,预测未来 3-5 年的走势和趋向,确保芯片是有卖点和前瞻性,面向未来。
- 客户向 fabless(芯片设计公司)提出设计要求,包括芯片需要达到的具体功能和性能方面的要求,让架构师可以进行细化。
- 可以是产品经理从市场获取的新需求,或者是对上一代产品的优化迭代。
1. 架构设计
数字信号处理类芯片偏向用matlab实现。
架构师将系统功能进行分解和细化,形成设计规范(Specificaiton),将设计参数化、具体化。
可以分为两部分:
一是确定芯片的具体指标,如物理实现(工艺节点、裸片面积等)、性能指标(速度、功耗等)、功能指标(功能描述、接口定义等)等。
更具体的如:
- 处理器架构的选择:ARM、RISC-V;
- 总线接口选择:AHB、AXI、APB;
- 软硬件功能的划分:硬件速度快,性能高,灵活性差。软件速度慢、性能差灵活性高开发周期短。
- 性能参数:引脚选择,电压频率、工艺选择、功耗和温度范围
二是系统级设计,用系统建模语言(高级语言 如matlab,c等)对各个模块描述,为了对方案的可行性进行验证。
2. RTL编写
RTL:Register Transfer Level
在写代码的过程中,需要具有极强的大局观,能够在书写Verilog HDL、描述逻辑功能的同时,还能够兼顾逻辑综合、STA、P&R、DFX、功耗分析等多方面因素,最终提供一份另其他环节的工程师都赏心悦目的代码。
这一步之后也会借助Syglass、LEDA、OinCDC等工具进行代码风格检查,帮助排除RTL代码中的CDC(Clock Domain Cross)等潜在问题。
3. 功能仿真验证(前仿真)
功能仿真是对 RTL 级的代码进行设计验证,检验设计功能的正确性,是否满足规格中的所有要求。是在无延迟的理想情况在,通过大量的仿真,发现电路设计过程中的人为或者非人为引起的bug。主要指标是功能覆盖率。
4. 逻辑综合
- 基于特定的工艺库,设定电路的面积、时序等目标参数的约束条件,将设计的 RTL 级代码映射为门级网表 netlist。逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。
- 逻辑综合之前的工作都可看作是虚拟行的,和实现无关的,之后的设计步骤就关系到具体的工艺,包括电特性、物理特性等。
- 逻辑综合工具的功能主要是将 VerilogHDL 格式的文本映射为网表格式的文本,因此,它的功能等同于文本编译器。那么转换的方式有很多种,工具如何选取呢?逻辑综合过程中,整个文本格式的编译过程是在给定的人为约束条件下进行的,通过这些约束和设定的目标来指导工具完成 Compiler 的工作。
5. 静态时序分析
- 基于特定的时序模型,采用数学的方法,计算所有路径的时序,分析其是否违反设计者给定的时序约束
- 主要是建立时间和保持时间的检查
- 从逻辑综合开始,基本上每做一步大的调整,都会完成一次 STA 分析,以保证每步都能实现时序收敛。
- 在前端对时序违例进行修复,虽然速度很快,但是代码的修改可能会带来新的问题,可能需要新的仿真来确认,而仿真会需要数月的时间,一般是不会在前端进行时序修复的。
在布图前,PrimeTime使用由库指定的线载模型估计线网延时。
在布图后,实际提取的延迟被反标注到PrimeTime以提供真实的延迟计算
6. 形式验证(Formality)
- 也可以称为一致性检查(或等价性检查),从功能上对综合后的网表进行验证,将综合后的网表与验证后的 HDL 设计对比,看他们是否在功能上存在等价性,保证逻辑综合过程中没有改变 HDL 描述的电路功能。
- 可以通过对综合后得到的网表进行逻辑仿真的方法验证功能的一致性,但是对于大规模设计而言,逻辑仿真的时间很长,所以现在一般采用的方法是形式验证。
- RTL代码和逻辑综合后的网表都可以抽象为两幅由节点和边构成的图,形式验证采用了类似于直接比较两幅图是否一致的方法,来确定逻辑综合生成的网表是否正确。
- match:两张图节点是否一致;verify:计算得出两张图功能是否一致
7. DFT
工具:Tessent、TetraMax、DFTCompiler
可测性设计,在设计中插入扫描链。SCAN、Mbist、ATPG 技术等。
为了保证芯片内部的制造缺陷尽量能够哦被检测到,通过在电路中插入扫描链(Scan Chain)的方式,测试IC在生产制造过程中是否出现问题。加入DFT会增加20%~30%的面积。但为了保证良率,为了给客户的片子是合格的需要将具有缺陷(工厂制造缺陷)的片子筛除。
DFT结构插入之后,也要进行形式验证和时序分析,保证设计的功能正确性。
数字后端设计
数字后端设计又称物理设计,将网标格式的文本转化成一个个有物理大小和位置的单元、连线,并且在实现过程中要满足面积、功耗、性能等要求。
- Desing Setup : 将 Design 导入后端工具后,检查输入文件是否缺少或者有错误,确保 Design 正常
- Floor Plan: 确定 design 的形状大小,给出 Pin 的位置,以及所有 macro 的摆放。
- Placement 将所有 标准单元 standard cell 放入 core area 中,并且满足 congestion(拥塞) 和 timing 的要求。
最简单的说可以分为两步: global 和 detail place。
global 不考虑 cell 放的位置是否 legal;detail place 的时候会将 cell 放到附近 legal 的位置。
在 place 过程中为了得到更好 timing 结果会对关键路径进行逻辑重组,删除 buffer trees。 随着工具的不断发展,目前 place 的引擎已经十分强大。例如 C 家的 giga place,它采用新的算法 slack-driven,通过计算真正 timing而不是预估的 timing 来进行 place, 在 place 的同时进行优化。 - Prects: 在 Place 之后 CTS 之前,我们会对进行一次 setup timing 优化。只优化 setup,原因是 clock tree 还没做,所有 clock 都是 ideal 的。
- CTS:芯片中的时钟网络要驱动电路中所有的时序单元,所以时钟源端门单元带载很多,其负载延时很大并且不平衡,需要插入缓冲器减小负载和平衡延时。时钟网络及其上的缓冲器构成了时钟树。
- Routing:CTS 之后整个芯片的大体结构已定。要将信号线通过金属连接起来。绕线过程主要完成一下几个目标。绕线过程中会考虑 DRC 和 LVS,绕完后不会有 DRC/LVS violations ,不会导致 timing 变差,也不会引入新的 SI 问题。考虑 DFM,例如 multi-cut via,线宽和线间距。
- 时序仿真:同功能仿真,只是将 RTL 代码替换为网表,然后需要加载 SDF 文件和工艺库模型。该步骤的目的在于,在延迟等近似实际工作的条件下,观察功能是否还能保持正确。
8. 布局(Place)
放置芯片的宏单元模块,在总体上确定各种功能电路的摆放位置,如IP模块,RAM,I/O引脚等等。布局规划能直接影响芯片最终的面积。
工具:Synopsys的IC Compiler (ICC)
9. 时钟树综合(CTS)
时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连到各个寄存器单元,从而使时钟从同一个时钟源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。
工具:Synopsys 的 Physical Compiler
10. 布线(Routing)
普通信号布线,包括各种标准单元(基本逻辑门电路)之间的走线。比如我们平常听到的0.13um工艺,或者说90nm工艺,实际上就是这里金属布线可以达到的最小宽度,从微观上看就是MOS管的沟道长度。
工具:Synopsys的IC Compiler (ICC)
11. 寄生参数提取(Extrat RC)
根据布局布线的结果,提取出最真实的延时信息,然后用于后仿。
此外,由于导线本身存在的电阻,相邻导线之间的互感、耦合电容在芯片内部会产生信号噪声、串扰和反射。提取寄生参数进行再次分析验证,分析信号完整性问题。
12. 后仿真
基于网表和SDF延时反标文件,进行逻辑仿真、时序分析等。
13. 功耗分析
14. 可制造性分析(DFM)
15. ECO
Engineering Change Order:后仿真中个别路径有时序或逻辑错误时,对设计进行小范围的修改。
在复杂的设计流程中,bug是难以避免的。对于芯片设计而言,bug自然是越早发现越好。但是仿真验证差不多,进入RTL freeze阶段后,一旦发现新的bug,就变得有些麻烦。因为RTL freeze前,你可以通过修改RTL来更正你发现的bug。然而 RTL freeze之后,后端人员做好了floorplan,或者已经开始布局布线,这个时候再去重新做一遍,既耗时耗力,又会惹怒后端。这显然不是好的选择。
如果这个时候即将tapeout,甚至已经tapeout,根本就没有机会修改RTL了,这个时候,我们就需要ECO,来修正我们的失误了。
ECO,即Engineering Change Order的缩写,指工程改变命令。简单来说就是手动修改集成电路的过程,换句话说,就是直接手动修改netlist。
一般应用于数字芯片版图设计。对于数字IC设计而言,ECO这一步实际上是正常设计流程的一个例外。它是对设计的 layout 进行局部的小范围的修改和重新布线,而不影响到设计的其它部分的布局布线,所以其它部分的时序信息没有改变。
根据功能的不同,ECO可以分为功能改变和非功能改变。功能改变是指由于来自客户对设计的追加需求(spec改变)或者设计的最后阶段发现芯片存在 bug 的情况下进行的 ECO;而非功能改变则是为了在不改变 RTL 网表的基础上修复部分时序以及串扰等问题而做的 ECO。
ECO也有更加详细的分类,具体可以参考:
芯片设计中的ECO是什么?
数字后端——ECO
16. 物理版图验证
保证Fab拿到版图之后,可以正常进行生产制造。
DRC(Design Rule Check):设计规则检查,检查连线间距,连线宽度等是否满足工艺要求
ERC(Eletronic Rule Check):电气规则检查,检查短路和开路等电气规则违例
LVS(Layout Versus Schematic):一致性验证,版图与逻辑综合后的门级网表的对比验证;
17. Tape Out
将版图数据以GDSII文件的形式交付芯片制造厂。
GDS,Germetry Data Standard,电路版图(layout)的一种描述方式,包含了晶体管大小、数量、物理位置和尺寸,连接线的物理尺寸和位置等信息。
该文件是二进制文件,无法用文本编辑器查看,可以用 calibre drv, virtuoso, laker 等工具以图形化的方法查看。
该文件包含了制造一个芯片所需要的全部信息,fab厂就是基于该文件进行生产制造。
(其实GSDII是经过加密的文件,隐藏了一些信息,只显示了连接关系,而 LEF/DEF 文件则对设计有更加详细的描述。)
数字电路的版图:
晶圆厂拿到GDSII格式的文件之后,就可以进行制造、测试、封装等。
参考资料: