芯片反向工程的意义:现代IC产业的市场竞争十分激烈,所有产品都是日新月异,使得各IC设计公司必须不断研发新产品,维持自身企业的竞争力。IC设计公司常常要根据市场需求进入一个全然陌生的应用和技术领域,这是一件高风险的投资行为。并且及时了解同类竞争对手芯片的成本和技术优势成为必然的工作。如果让工程师在最短的时间以最有效率的方式设计电路才是最难解决的问题,逆向工程看来是其中一个解决方案。逆向工程能将整颗IC从封装,制成到线路布局,使用将内部结构,尺寸,材料,制成与步骤一一还原,并能通过电路提取将电路布局还原成电路设计。
目前,国外集成电路设计已经非常成熟,国外最新工艺已经达到10nm,而国内才正处于发展期,最新工艺达到了28nm。有关于集成电路的发展就不说了,网络上有的是资料。对于IC设计师而言,理清楚IC设计的整个流程对于IC设计是非常有帮助的。然而,网络上似乎并没有有关于IC设计整个流程的稍微详细一点的介绍,仅仅只是概略性的说分为设计、制造、测试、封装等四大主要板块,有的资料介绍又显得比较分散,只是单独讲某个细节,有的只是讲某个工具软件的使用却又并不知道该软件用于哪个流程之中,而且每个流程可能使用到的工具软件也不是太清楚(此观点仅为个人经历所得出的结论,并不一定真是这样)。
芯片正向设计与反向设计。目前国际上的几个大的设计公司都是以正向设计为主,反向设计只是用于检查别家公司是否抄袭。当然,芯片反向工程原本的目的也是为了防止芯片被抄袭的,但后来演变为小公司为了更快更省成本的设计出芯片而采取的一种方案。目前国内逐渐往正向设计转变的公司也越来越多,正逐渐摆脱对反向设计的依赖。当然,正处于发展初期的公司也不少,自然反向设计也是不少的。本文章从芯片反向设计开始进行总结。
“工欲善其事,必先利其器”。随着集成电路的不断发展,不管是芯片正向设计还是反向设计,它们对于工具的依赖性越来越强,因此,在要开始讲设计流程之前,先来看一看,我们到底会用到哪些主要的工具和辅助性的软件。
一、主要工具软件
说到设计工具,就不能不提到三大EDA厂商——cadence,synopsys,mentor。这三家公司的软件涵盖了芯片设计流程的几乎所有所能用到的工具。首先是cadence公司,这家公司最重要的IC设计工具主要有candence IC系列,包含了IC 5141(目前最新版本是IC617),NC_VERILOG(verilog仿真),SPECTRE(模拟仿真),ENCOUNTER(自动布局布线)等等synopsys公司,最出名的是它的综合工具design complier,时序分析工具prime time,模拟仿真工具hspice等;mentor公司最出名的工具是calibre(版图DRC LVS检查),modelsim(verilog仿真)
这些都是IC设计最常用的工具,无论是正向设计还是反向设计。当然,随着软件版本的更新迭代,软件的名字可能有所变更,并不是上述的那些名称。另外,这些工具主要集中在以linux为内核的操作系统上,主要代表有Red Hat。所以有关unix\linux类操作系统的知识还是有必要学的,该类系统与windows系统有很大的不同,要想学会使用这些软件,首先要学习这些操作系统的相关知识,具体资料网上有很多。部分工具有windows版本,例如hspice,Modelsim。
二、 辅助类工具软件。
当然,除了这三大EDA厂商的IC设计工具外,Altera 、Xilinx、Keil Software这三家公司的软件quartus ii、ISE、KEIL开发环境等,都是对于IC设计流程中比不可少的工具。它们分别是用于FPGA、单片机ARM芯片的开发。这类软件在芯片的CP测试和芯片应用方案开发上会有用到。
版图提取工具,NetEditorLite、ChipAnalyzer,这两个工具主要是针对芯片反向设计而言的。
算法设计工具,MATLAB,此工具应用范围很广,但对于芯片设计来说,它较为适用于算法原型开发,例如,通信算法。
PCB版图工具,altium Designer,orcad,allegro。其中,目前Orcad,Allegro是属于cadence电路系统设计套件内的主要软件,而Altium Designer是最常用的软件,它的前身是protel。
Labview与数字源表,这一对软硬件主要用于芯片电气参数的半自动化测试,特别是模拟芯片。其目的是芯片设计公司用于分析芯片样品参数用。)
对于这些工具的该如何使用,我会在下面的文章中进行说明。ps:没有具体说明软件使用环境的,一般是在windows环境下使用。
先从反向设计说起。下面是我整理的芯片反向设计的流程图。
一、反向设计总体规划
在进行一块新品芯片的开发前期必须要有一个设计总体规划,其中最主要的问题就是,这颗芯片是否能带来收益,毕竟公司要靠产品吃饭。如何评估芯片能否带来收益?这需要多年的经验才能进行准确的评估。一般是看市场上哪几款芯片销量好,并且未来几年的销量看涨,并且评估本公司是否有能力设计并且有渠道销售出去。要考虑的芯片成本有以下几项:
1,芯片拍片成本;
2,芯片从立项到交货的时间成本,时间过程导致芯片即使设计出来了,市场已经不需要了;
3,流片成本;
4,工具软件的授权使用成本;
5,测试成本,包括CP测试和成品测试以及搭建测试平台所需要的其它成本;
6,封装成本。
将这些成本进行适当预估之后,再来看收益。对于收益这块,这是和市场的需求和销量走向有关,需要涉及到许多其他方面的考虑。在收益问题解决了之后,明确此项目可以获得收益,那么就可以正式开工,前面说的一堆东西其实就是项目可行性分析的一部分。但其实有些公司并不会考虑那么多,因为这些可行性分析本身非常困难。反向哪一家的芯片?选择大公司的芯片进行反向一般来说成功率会更高。选定芯片后就进行拍片了,芯片进行解剖拍片一般周期在1周到1个月之间,这视芯片的大小而定。
二、工艺选择
这个要依据拍片回来的芯片版图来决定,通过对芯片版图的识别,判断待反向的芯片版图使用的工艺是什么,再根据公司自己拥有的工艺文件(这些工艺文件都由国内或者国外的芯片制造厂提供,前提是公司得与它们合作才能得到工艺文件),两者进行比对,选择一个适合的工艺进行后续的仿真、版图绘制和流片。工艺选择的问题,需要对公司所拥有的工艺非常熟悉,并且对版图也要熟悉的工程师来解决,他要能够通过版图明确的识别所用的工艺。当然,工艺有时候会在设计过程中反复的更换,因为会有许多参数、流片成功率等各种复杂因素的考量。这一步其实也就叫工艺可行性分析,其实也应该归于项目可行性分析的一部分,但是由于必须要拍片才能进行,所以只能单独说明。
三、版图提取
在上一步工艺可行性分析完之后,确认有工艺可以和该版图匹配,那么就可以进行版图提取工作。这部分的工作其实主要是识别版图中的管子并用符号表示出来。所用到工具有
NetEditorLite或者ChipAnalyzer,这是版图提取工具,在不同的公司进行芯片拍片,会用到不同的版图提取工具。该类软件的作用就是一个图片查看器,拍摄的版图就是数据就是照片。
cadence IC5141 里的virtuoso schematic软件,这是电路图绘制软件。
整个工作的流程是用NetEditorLite或者ChipAnalyzer打开拍片的芯片版图数据,人工肉眼识别里面的管子(二极管、三极管、MOS管之类),再使用virtuoso schematic将管子用符号表示出来,并把管子之间的连接关系连接上。
版图提取所要注意的问题:
初次进行版图提图,可能会不认识管子,需要有经验的人来帮助识别,熟悉之后就容易了;
不同工艺的版图管子的形状是不一样的,所以碰到不认识的管子,要么靠别人帮忙,要么就只能自己去推理;
要有良好的管子命名习惯,这个每个公司都应该有规定的,这对于后续的工作会有很大帮助;
尽量按照版图的布局来放置管子的布局(在virtuoso schematic上的电路图布局),这样可以加快以后对比电路图和版图时找管子的速度;
在整理提取出的电路时一定要新建一个电路图来放置整理的电路,不要在刚提取的电路图上整理,方便整理时和版图数据对比。
四、电路整理
在版图提取完毕之后,下一个步骤就是电路整理。提取完的电路图是混乱的,没有层次关系。那么如何将其整理成具有层次关系,让人一看就懂呢?
1、这就涉及到有关芯片的一些常识了。芯片分为数字芯片和模拟芯片,但是数字芯片必定会包含模拟电路,而模拟芯片却可以不包含数字电路。它们有如下一般特征:
A、数字芯片,必有时钟振荡电路、复位电路这些模拟电路。必有寄存器,而且整个数字部分最耗面积的部分往往都是寄存器。寄存器的使用量是很大的,因此,在版图上呈现的就是有大数量的图像一模一样的电路,这种电路往往都是寄存器。
B、模拟芯片,有带隙基准电路。
2、说完了芯片版图常识,另外一个重要的有助于理解所提取的电路的工具就是待反向的芯片的数据手册!这是最重要的,我们所有有关于芯片的信息都是从数据手册上得来的。所以一定要善用DATASHEET!在芯片数据手册上,一般会对芯片的功能进行说明,对芯片如何运行进行说明,这些说明将有助于我们对于电路的整理
比如说,芯片手册上说道用了I2C,那么电路中肯定有一大块电路是属于I2C的。一般来说,版图的布局都是将同属于一种功能的管子会集中放置在一起。I2C电路的特征,从I2C协议的原理上可以知道,它就两根信号线,一根时钟,另一根数据线。数据在芯片内部一般是并行传输比较方便,所以,I2C电路一定会有串并转换电路,而串并转换电路一般是寄存器,而且一般是8位。根据这个推断结果,就在提取的电路中去寻找8个在一起的寄存器,它们其中一组就是I2C电路的一部分,再根据芯片版图的I2C PAD位去寻找,看连接到了那一组寄存器上,那么整个I2C的电路就被识别出来了。因此,
a、靠着芯片手册对芯片功能的说明,
b、加上芯片的一些常识性知识,
c、加个人的这种对电路原理的推理,就可以相对较快的将电路分层次的整理出来。逐步的理解整个芯片的原理。当然,由于芯片电路的庞大的关系,有时候电路并不是需要完全理清楚,对于不那么重要的电路可以不理会。只要保证连接关系没连接错就行。这阶段,只会用到cadence ic5141的virtuoso schematic软件
五、 电路仿真及修改
电路整理好了,下一步就是进行电路的仿真及修改了,根据工艺选择步骤选择的工艺来进行。先说明一下这阶段所使用的工具
1、cadence spectre,一般集成在cadence ic5141里面,是模拟电路仿真工具(ps:最原始的版本是集成在IC5141内部,但功能不全,所以需要单独安装新版本,软件名为MMSIM61,随着版本的升级,它的名字也在修改),当然,数字电路也可以进行仿真,数字电路的本质还是模拟电路
2、synopsys公司的 Hspice,与spectre一样的仿真工具,另有些差别。
3、Mentor公司的 Modelsim,主要在windows上使用,用于verilog网表的仿真
模拟电路仿真工作流程:在cadence中搭建好仿真环境,设置好仿真参数,选用spectre或者hspice,然后就可以进行仿真的。另外,也可以将电路导出成CDL网表,拷贝到Windows上,用Windows版本的Hspice进行仿真,这样做的优点是Windows易于操作。另外说明一下spectre和hspice的一项区别。spectre仿真的时候会保存所有电路节点的数据,这样做优点是方便查看各个节点的数据,缺点是仿真消耗的时间太长,保存的数据文件太大,这一点在遇到大型电路的时候会很耗时(不知道最新版本改进这一点没有,鄙人没有用过最新版的spectre)。hspice仿真之前可以自己选定所要查看的节点,这样做就可以减少仿真时间和减小数据文件的大小。
数字电路仿真工作流程:在virtuoso schematic中将整理好的电路路中数字电路部分导出成网表文件,再拷贝到windows系统上进行仿真。windows系统上数字电路网表的仿真采用Modelsim。(这么做的原因是linux系统不太方便)使用Modelsim仿真,最重要的是写好testbench(貌似这句是废话)。
关于电路的修改,这部分其实不好总结,因为每一款芯片都有不同的参数,所要修改的地方都不太一样,我所知道的是,必定要考虑修改的地方往往都是有关模拟电路的,例如,时钟振荡、复位电路、开漏输出管、带隙等,修改的目的是为了与当前所选用的工艺适配,以满足芯片datasheet的参数要求。另外,数字部分的电路其实一般来说是不需要修改的,但有时为了节省版图面积,会缩小寄存器管子的尺寸,毕竟缩小一个,就等于缩小了几十个。这一阶段其实是一个不断的迭代过程,它要和版图绘制结合起来,这样才能够保证芯片功能和性能的完整。
六、版图绘制
这部分在电路整理完之后就可以开始进行了,并配合电路仿真与修改,逐步晚上版图的绘制。该阶段所使用的主要工具有
1、cadence ic5141的版图绘制软件;
2、cadence Dracula Diva或者Calibre,这两个用于版图DRC(设计规则检查)、LVS(版图一致性检查);一般而言,calibre会更加常用一些,毕竟这可是Mentor公司的招牌软件之一。在版图绘制好并进行各种检查无误之后,就可以tapeout,准备流片了
七、测试规范.
IC设计师在芯片tapeout之后就要准备制定CP测试规范了,这是接下来CP测试流程的总纲,非常重要。测试规范的测试项主要来源于芯片datasheet,将重要的参数设置为测试项,并规定参数的合理分布范围以及每一个测试项的测试方法(流程)。这些测试参数以及测试方法将决定CP测试开发时所用到的测试环境ATE(auto test environment
八、CP测试开发
根据测试规范,可以选定所需要的测试工具以进行整个测试环境的搭建工作。我所知道到用于芯片测试的测试仪有JUNO DTS-1000,ASL1000,V777,STS8200等。每一种测试仪适用于不同种类的芯片测试,测试仪主要分为数字测试,模拟测试,数模混合测试这三大类。
CP测试开发所需要做的工作有:
1,测试仪的选择(ps:这个阶段还要考虑一个重要的因素就是一次测试多少颗裸芯,也就是CP测试常说的多少个site,这关系到后续测试程序的编写,以及DUT板的制作,非常重要);
2,根据测试仪开发测试程序;
3,制作测试裸芯片用DUT板,扎PAD位的针由测试厂制作并焊接在DUT上(ps:DUT板有时候也叫针卡);
4,自制测试仪(可选),当测试仪并不能完成某些特殊测试项的要求时,还得自己制作测试仪。例如,红外接收芯片测试所需要用到的扫频仪,若采用非自制扫频仪,测试时间将非常长,必须自己制作。
5,测试数据的分析。对测试数据的分析有助于对测试方法的改进和对芯片设计的改进。CP测试在整个芯片反向设计中占据着重要位置,所花费的人力、物力是非常多的,还需要频繁和测试厂交流,所以CP测试显得非常复杂。在CP测试开发完之后,会进行COB测试,之后才进行CP测试的调试阶段,以及正式批量测试阶段。
九、COB测试
所谓COB测试,其实就是Chip On Board(将裸芯打线在PCB板上或者将封装好的芯片焊接在PCB上,并将引脚引出),它是在CP测试进行之前进行的一项测试(也在成品测试之后进行),用于初步判断芯片的功能和性能,如果这批次随机采样的几颗芯片功能和性能都很烂就暂时不必进行CP测试了。另外,COB测试相比于CP测试具有更多的灵活性,可以测试更多的测试项,获取有关芯片更为全面的信息。当然,COB测试也是需要开发一套相应的测试环境的。开发的工作根据芯片的不同,工作量会有很大的不同,例如,如果有I2C通信引脚的芯片,需要用到USB转I2C芯片,例如FT232。通过在电脑上编程,通过控制USB转I2C芯片来控制待测芯片。这样的话,搭建整个测试环境就会比较复杂。如果是模拟芯片,例如电源管理类芯片,需要使用LabView编程来控制数字源表进行自动化参数测量。总之,COB测试也是芯片设计中一个比较重要的流程,这部分的工作内容,比较难以叙述,简单的,就用数字源表测试几项参数就行了,复杂的都会基于软件控制的形式进行半自动的测试。具体说来,1、开发在PC端开发测试的程序,例如LabView;2、设计测试芯片的电路板,并留下与PC通信的接口,通常采用单片机做主控芯片;3、搭建测试所需要的环境,比如说遮光要求。过程叙述得很简单,但实际开发并不容易,难度视待测芯片而异。
十、成测开发
在CP测试完了之后,裸芯就可以送到成测厂进行划片和封装了,在这期间,IC设计师所要做的工作就是依据制定成品测试的规范并进行成品测试的开发。这部分的工作其实和CP测试的工作是类似的,只不过,相对于CP测试而言,成品测试的测试项会少很多。许多CP测试用到的测试项,比如,烧调之类的,成品测试就不会进行了,其余步骤均与CP测试一致。
十一、可靠性测试
当芯片封装好,并通过了成品测试之后,并不意味着芯片的测试就结束了,还有芯片可靠性测试。在成测结束,并把样品返回设计师手中之后,设计师还需进行COB测试,并在这时预留几颗芯片不参与接下来的可靠性测试,这几颗芯片将在可靠性测试之后作为对比之用。
芯片可靠性测试,是衡量芯片的质量和寿命的一项测试。它具体包括环境测试、EMC测试、其它测试等三大项。细分项有高温低温测试、高温高湿测试,抗静电测试等等,全部的测试项可参考IC可靠性测试项目。每一款芯片都有与其对应的可靠性测试项,并不是所有测试项目都要测。我们只要关注与该芯片适配的测试项就行。具体如何决定测试项,这需要与芯片的用途有关,每一种用途,它的测试要求都是不一样的。可靠性测试实验比较简单,但是,芯片的可靠性却是由此来衡量的。可靠性测试需要的测试工具都比较昂贵,当然工具的重复使用性也是比较好的。每一个测试项都对应这一套测试设备。
十二、成品开发
设计出的芯片必须配置相应的使用方案,才能将芯片推广出去,客户才能够更好的使用芯片。不同用途的芯片,它的使用方案不一样,差别也是非常巨大的。像单片机、ARM、FPGA类芯片,配置的可不是简单的使用方案,而是一整套使用它的系统。电源管理芯片,需要配置一个电源管理芯片的一套应用方案,并且需要具有一定的竞争力,这才能够将芯片卖出去。所以成品开发是芯片能否卖出去的关键。我所接触到的成品开发,基本是以单片机为主控芯片的开发方案。