芯片制造这么难?为何领先世界的是没有生产线的硅谷——详解芯片设计流程
一个比指甲盖还小的封装起来的黑色小硅片,却是一切电子设备的核心,包括高铁、飞机、电视机、手机的核心。
今天的硅谷占领了芯片设计金字塔的顶尖
上世纪八十年代的硅谷,拥有很多半导体生产线。硅谷也以此从一个葡萄园为主的干旱山谷转变为以“硅”工业为核心的高科技基地。到了九十年代,这些生产线逐渐移到了美国偏远地区、亚太地区,台湾、韩国、新加坡就是在这个时期建立了很多生产线,集成电路开始发展起来。
但是今天的硅谷,已经基本上没有生产线,而是以设计公司和软件公司为主流。例如,全球GPU领军企业(英伟达)、全球最大的可编程器件公司XILINX(赛灵思)、通信芯片公司Broadcom(博通),都是没有生产线、纯粹靠智慧设计在领导全球某个产业方向。
芯片设计难在哪里
有专家打过一个比喻:把芯片拿到一般的显微镜下看,就像是一张上海市地图;拿到更高级的电子显微镜下看,就能看到每家每户的窗户、阳台,一扇扇门,一条条马路;大家平常说的28纳米、15纳米,就是这个城市建筑的最小尺寸。集成电路设计,就好像设计一座“新上海城”,马路是7层甚至8、9层立交的;建筑物有几百万座;拥有几千万人口,几亿扇门窗不断开关;所有建筑物的门窗一秒钟要开关上亿次,而且不能够有一扇门窗的开关不准确。
“在这张超级地图上,每个房间都要供电、供水,一两个房间水压不够就可能造成电路计算不准确,你的飞机就可能掉下来,这就是失败的芯片。”集成电路芯片在设计环节出现任何一个小缺陷,就必须重来。重新设计又需要至少1年时间,几千万元的投入。“所以集成电路设计需要从软件到硬件的高超的设计、指挥、风险控制能力。”
目前,国内的集成电路产业设计、制造、封装三业并举,制造可以去代工,封装测试与美国的差距也不是很大。差距最大的地方在于设计,现在国内芯片设计主要还是依赖国外。
芯片设计主要方法
芯片设计方法从大的方面可以分为两大类:正向设计和逆向设计(逆向工程)。
正向设计
正向设计即根据产品确定的指标和要求,从电路原理或系统原理出发,通过查阅相关规定和标准,利用已有知识和能力来设计模块和电路,最后得到集成电路物理实现所需要的几何图形。一般认为正向设计具体包含了以下三种基本的设计方法:自下而上(bottom up)即结构设计方法,自上而下(top-down)设计方法和并行设计方法。
自下而上设计方法
自下而上的设计方法是集成电路系统的基本设计方法,其基本思想是将复杂的系统逐层进行功能块划分和描述功能块的拓扑连接,直到用底层模块或部件来描述,当完成底层模块或部件的描述后,自下而上进行层次扩展和层次功能的仿真验证,从而完成整个系统的功能设计和验证。最后根据底层模块或部件的几何图形和拓扑关系完成布图设计和验证。
虽然采用自下而上设计的系统结构清晰明了,但作为传统的系统硬件设计方法,在系统设计的早期就将系统人为地分为硬件和软件两部分,软件的开发受到硬件的严格限制,软件的设计和调试常常要在硬件设计完成之后。这种设计方法的一些缺点也是很明显,如要求设计者具有丰富的设计经验,设计过程反复较多,开发效率低,可移植性差,可继承性差,开发时间长,不易修改等等。
自上而下设计方法
自上而下设计方法的思想是按从抽象到具体,从概念到实现的思路和次序进行设计的,从系统总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。具体实施时,首先从系统设计入手,在顶层进行功能方框图划分和结构设计,在方框图一级进行仿真和纠错,用硬件设计语言对高层次的系统行为级进行描述并在系统级进行验证,这时的设计与工艺无关。然后用逻辑综合化工具生成具体的门级逻辑电路的网表,具体过程如图所示。然后再通过布局、布线、版图设计等,得到最终生产所用的描述文件。
采用自上而下的设计方法时,主要的仿真和调试过程是在高层次完成的,这有利于早期发现在结构设计上的错误,避免设计反复,同时也减少了逻辑仿真的工作量。
并行设计方法
随着工艺技术的发展,深亚微米(DSM)已经投入使用,系统级芯片的规模更大、更复杂,物理连线延迟、信号串扰和噪音等互连效应及功耗都成为影响超大规模集成电路(VLSI)产品性能的重要因素。在这种情况下,由于采用自上而下的设计方法与工艺无关的高层次行为功能设计时并不考虑物理上的互连效应和功耗等的影响,与实际情况差异较大,因而常常产生设计错误,并行设计方法正是面对这一挑战而提出来的。并行设计方法一开始就考虑产品在整个生命周期中从概念形成到产品报废处理的所有因素。并行设计方法要求在进行层次功能设计的同时,进行层次物理设计规划或虚拟物理设计,充分利用各层次设计中的信息反馈,形成合理的约束集,并依此优化设计。
逆向设计(逆向工程)
芯片反向设计(工程)是一种从人们设计的优秀芯片中提取技巧和知识的过程,是获取芯片工艺、版图、电路、设计思想等信息的一种手段。
简单而言,芯片反向设计就是通过对芯片内部电路的提取与分析、整理,实现对芯片技术原理、设计思路、工艺制造、结构机制等方面的深入洞悉,可用来验证设计框架或者分析信息流在技术题,也可以助力新的芯片设计或者产品设计方案。
通过这种逆向分析手段,我们可以帮助客户了解其他产品的设计,用于项目可行性研究、打开思路、寻找问题、成本核算等,比如:在进入新领域之前,评估、验证自己技术方案和设计思路的可行性;通过对市场上成熟产品的研究,协助解决关键性的技术问题;利用已有产品的市场资源等。
芯谷芯片反向设计服务包括网表/电路图反向提取、电路层次化整理、逻辑功能分析、版图提取与设计、设计规则检查调整、逻辑版图验证、单元库替换以及工艺尺寸的缩放等方面。网表/电路图反向提取。
在芯片反向设计中,网表/电路图的提取是个很大的课题,网表提取的质量和速度直接影响后续整理、仿真、LVS等方方面面的工作。我们在总结众多成功案例的基础上,依托自主研发的软件应用,可准确、快速、高质量地进行网表/电路图的提取。
芯片设计主要内容
一颗芯片的诞生,可以分为设计与制造两个环节。芯片制造的过程就如同用乐高盖房子一样,先有晶圆作为地基,再层层往上叠的芯片制造流程后,就可产出想要的芯片,然而,没有设计图,拥有再强大的制造能力也无济于事。
在芯片生产流程中,芯片多由专业芯片设计公司进行规划、设计,像是联发科、高通、Intel 等知名大厂,都自行设计各自的芯片,提供不同规格、效能的芯片给下游厂商选择。所以,芯片设计是整个芯片成型最重要的一环。
芯片制造的过程就如同用乐高盖房子一样,先有晶圆作为地基,再层层往上叠的芯片制造流程后,就可产出必要的芯片(这些会在后面介绍)。然而,没有设计图,拥有再强制造能力都没有用,因此,建筑师的角色相当重要。
研发方案和硬件语言
与任何一个靠生产产品谋求发展的企业一样,设计推出一款新的芯片的第一步理所当然的是市场的调研和产品的开发规划。在这段时间内,未来产品的相关定位,主要占领的市场范围等话题都被提到桌面上讨论,这些问题讨论的结果最终将决定产品最终的研发方案的大体内容:研发成本,研发周期以及开发过程中需要的资源等等。
接下来就要在研发方案确定的大方向的技术上研究从生产工艺,芯片代工等具体的细节问题进行商议。在成本的限制范围内决定诸如集成晶体管数量等物理参数;紧接着就要在符合生产工艺的芯片代工厂中做出选择了,决定这个的因素很多,当然第一点是能提供生产芯片要求的工艺水平,其次是代工厂的产品质量和价格因素。当然很多时候芯片在设计的时候就计划使用比较超前的工艺,保证选择的代工厂在芯片设计完成开始投片的时候完成相关工艺改造是十分重要的,如果你在这一点上面做出错误的判断,那对公司造成的损失是巨大的,因为芯片行业是一个最求速度的产业,在生产工艺已经决定的情况下,如果要在回过头来修订工艺指标,那进行的工作又会持续几个月,其中的工作量不比重新一块芯片要少多少!
当这一切前期环节确定以后,就开始芯片构架的设计。现在,芯片构架的设计一般是通过专门的硬件设计语言Hardware Description Languages (HDL)来完成,所谓硬件设计语言( HDL)顾名思义,是一种用来描述硬件工作过程的语言。这些语言写成的代码能够用专门的合成器生成逻辑门电路的连线表和布局图,这些都是将来发给芯片代工厂的主要生产依据。
在芯片的设计阶段基本上都是通过工程师们通过Verilog语言编制HDL代码来设计芯片中的所有工作单元,也决定该芯片所能支持的所有技术特征。这个阶段一般要持续3到4个月(这取决于芯片工程的规模),是整个设计过程的基础。
在上述的工作完成后,就进入了产品设计的验证阶段,一般也有一两个月的时间。这个阶段的任务就是保证在芯片最后交付代工厂的设计方案没有缺陷的,就是我们平时所说的产品的“bug”。这一个阶段对于任何芯片设计公司来说都是举足轻重的一步,因为如果芯片设计在投片生产出来以后验证出并不能像设计的那样正常工作,那就不仅意味着继续投入更多的金钱修改设计,重新投片。整个验证工作分为好几个过程,基本功能测试验证芯片内的所有的门电路能正常工作,工作量模拟测试用来证实门电路组合能达到的性能。当然,这时候还没有真正物理意义上真正的芯片存在,这些所有的测试依旧是通过HDL 编成的程序模拟出来的。
接下来的验证工作开始进行分支的并行运作,一个团队负责芯片电路的静态时序分析,保证成品芯片能够达到设计的主频;另外一个主要由模拟电路工程师组成的团队进行关于储存电路,供电电路的分析修改。和数字电路的修正工作相比,模拟工程师们的工作要辛苦的多,他们要进行大量的复数,微分方程计算和信号分析,即便是借助计算机和专门的软件也是一件很头疼的事情。同样,这时候的多有测试和验证工作都是在模拟的状态下进行的,最终,当上述所有的工作完成后,一份由综合软件生成的用来投片生产门电路级别的连线表和电路图就完成了。
但是,芯片设计者不会立即把这个方案交付厂家,因为它还要接受最后一个考验,那就是我们通常所说的FPGA (Field Programmable Gate Array)现场可编程门阵列来对设计进行的最终功能进行验证。 对于一个集成一亿多个晶体管超级复杂芯片,在整个使用硬件设计语言( HDL)设计和模拟测试的过程中,要反复运行描述整个芯片的数十亿条的指令和进行真正“海量”的数据储存,因此对执行相关任务的的硬件有着近乎变态的考验。
可编程门阵列FPGA模拟验证
现场可编程门阵列FPGA可以能完成任何数字器件的功能,上至高性能CPU下至简单的74电路,都可以用它来实现。FPGA其实是一个包含有大量门电路的逻辑元件,但是它的每一个门的定义可以有使用者来定义,如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。通过软件仿真,我们可以事先验证设计的正确性。在PCB完成以后,还可以利用FPGA的在线修改能力,随时修改设计而不必改动硬件电路。所以说使用FPGA来开发数字电路,可以大大缩短设计时间,更为重要的是大大减少了再出现成品芯片以后反复修改,投片资金和时间的消耗,一块几千美元的FPGA(这里指目前最大容量的FPGA)和花费数百万美元得到一块成品芯片相比,消耗是微不足道的.
投片生产样片和修正
经过前面一系列的验证工作,这道工序就可以告一段落了,几经修订的设计方案被送到了芯片代工厂开始投片生产.代工厂从拿到设计方案到第一批产品下线一般需要四周的时间,不过在这段时间里,设计人员仍旧马不停蹄,继续进行芯片的模拟测试和上市产品PCB(Printed Circuit Boards印刷电路板) 的设计,这就产生了一般官方钦定的“公板”.四周以后,第一批产品下线了,这就是我们一般称为的”A0”版本。(就是常说的“工程样片”)
一般情况下, A0版本的产量不会很多,它们的主要用途还是用来进行测试和修改,一些被送到开发小组继续测试和查错,另一部分被送到相关的卡板厂商处进行相关的测试和设计。由于现在是有了真正的芯片到手了,查错的手段当然也要和前面的模拟手段不同。
当“所有”的缺陷都得到了修正之后,最终的设计被交付到代工厂进行投片生产,这时的产量就不会像A0版本那么少了,但也不是最终的量产版本,在前面验证基本功无误的情况下,这次生产的芯片要进行各种各样的和正式上市产品相关的测试:产品兼容性,工作温度,外围供电电路的稳定性,信号完整性等等,直到产品能达到作为产品上市的程度,这时芯片生产方就可以投入量产了。
芯片设计主要流程
芯片的设计过程可分为两个部分,分别为:前端设计(也称逻辑设计)和后端设计(也称物理设计),这两个部分并没有统一严格的界限,凡涉及到与工艺有关的设计可称为后端设计。
前端设计的主要流程
1、规格制定
芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。
2、详细设计
Fabless根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。
3、HDL编码
使用硬件描述语言(VHDL,Verilog HDL,业界公司一般都是使用后者)将模块功能以代码来描述实现,也就是将实际的硬件电路功能通过HDL语言描述出来,形成RTL(寄存器传输级)代码。
4、仿真验证
仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。看设计是否精确地满足了规格中的所有要求。规格是设计正确与否的黄金标准,一切违反,不符合规格要求的,就需要重新修改设计和编码。设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。仿真验证工具Mentor公司的Modelsim, Synopsys的VCS,还有Cadence的NC-Verilog均可以对RTL级的代码进行设计验证,该部分个人一般使用第一个-Modelsim。该部分称为前仿真,接下来逻辑部分综合之后再一次进行的仿真可称为后仿真。
5、逻辑综合――Design Compiler
仿真验证通过,进行逻辑综合。逻辑综合的结果就是把设计实现的HDL代码翻译成门级网表netlist。综合需要设定约束条件,就是你希望综合出来的电路在面积,时序等目标参数上达到的标准。逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。
6、STA
Static Timing Analysis(STA),静态时序分析,这也属于验证范畴,它主要是在时序上对电路进行验证,检查电路是否存在建立时间(setup time)和保持时间(hold time)的违例(violation)。这个是数字电路基础知识,一个寄存器出现这两个时序违例时,是没有办法正确采样数据和输出数据的,所以以寄存器为基础的数字芯片功能肯定会出现问题。STA工具有Synopsys的Prime Time。
7、形式验证
这也是验证范畴,它是从功能上(STA是时序上)对综合后的网表进行验证。常用的就是等价性检查方法,以功能验证后的HDL设计为参考,对比综合后的网表功能,他们是否在功能上存在等价性。这样做是为了保证在逻辑综合过程中没有改变原先HDL描述的电路功能。形式验证工具有Synopsys的Formality。前端设计的流程暂时写到这里。从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路。
后端设计流程
1、DFT
Design ForTest,可测性设计。芯片内部往往都自带测试电路,DFT的目的就是在设计的时候就考虑将来的测试。DFT的常见方法就是,在设计中插入扫描链,将非扫描单元(如寄存器)变为扫描单元。关于DFT,有些书上有详细介绍,对照图片就好理解一点。
2、布局规划(FloorPlan)
布局规划就是放置芯片的宏单元模块,在总体上确定各种功能电路的摆放位置,如IP模块,RAM,I/O引脚等等。布局规划能直接影响芯片最终的面积。
3、CTS
Clock Tree Synthesis,时钟树综合,简单点说就是时钟的布线。由于时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连到各个寄存器单元,从而使时钟从同一个时钟源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。
4、布线(Place & Route)
这里的布线就是普通信号布线了,包括各种标准单元(基本逻辑门电路)之间的走线。比如我们平常听到的0.13um工艺,或者说90nm工艺,实际上就是这里金属布线可以达到的最小宽度,从微观上看就是MOS管的沟道长度。
5、寄生参数提取
由于导线本身存在的电阻,相邻导线之间的互感,耦合电容在芯片内部会产生信号噪声,串扰和反射。这些效应会产生信号完整性问题,导致信号电压波动和变化,如果严重就会导致信号失真错误。提取寄生参数进行再次的分析验证,分析信号完整性问题是非常重要的。
6、版图物理验证
对完成布线的物理版图进行功能和时序上的验证,验证项目很多,如LVS(Layout Vs Schematic)验证,简单说,就是版图与逻辑综合后的门级电路图的对比验证;DRC(Design Rule Checking):设计规则检查,检查连线间距,连线宽度等是否满足工艺要求,ERC(Electrical Rule Checking):电气规则检查,检查短路和开路等电气 规则违例;等等。
实际的后端流程还包括电路功耗分析,以及随着制造工艺不断进步产生的DFM(可制造性设计)问题,在此不说了。物理版图验证完成也就是整个芯片设计阶段完成,下面的就是芯片制造了。物理版图以GDSII的文件格式交给芯片代工厂(称为Foundry)在晶圆硅片上做出实际的电路,再进行封装和测试,就得到了我们实际看见的芯片。