电子说
芯片设计流程(一)——序章
目前,国外集成电路设计已经非常成熟,国外最新工艺已经达到7nm,而国内才正处于发展期。有关于集成电路的发展就不说了,网络上有的是资料。对于IC设计师而言,理清楚IC设计的整个流程对于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(intel) 、Xilinx、Keil Software这三家公司的软件开发环境等,都是对于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个月之间,这视芯片的大小而定。
二、工艺选择
这个要依据拍片回来的芯片版图来决定,通过对芯片版图的识别,判断待反向的芯片版图使用的工艺是什么,再根据公司自己拥有的工艺文件(这些工艺文件都由国内或者国外的芯片制造厂提供,前提是公司得与它们合作才能得到工艺文件),两者进行比对,选择一个适合的工艺进行后续的仿真、版图绘制和流片。工艺选择的问题,需要对公司所拥有的工艺非常熟悉,并且对版图也要熟悉的工程师来解决,他要能够通过版图明确的识别所用的工艺。当然,工艺有时候会在设计过程中反复的更换,因为会有许多参数、流片成功率等各种复杂因素的考量。这一步其实也就叫工艺可行性分析,其实也应该归于项目可行性分析的一部分,但是由于必须要拍片才能进行,所以只能单独说明。
三、版图提取
在上一步工艺可行性分析完之后,确认有工艺可以和该版图匹配,那么就可以进行版图提取工作。这部分的工作其实主要是识别版图中的管子并用符号表示出来。所用到工具有
A、NetEditorLite或者ChipAnalyzer,这是版图提取工具,在不同的公司进行芯片拍片,会用到不同的版图提取工具。该类软件的作用就是一个图片查看器,拍摄的版图就是数据就是照片。
B、cadence IC5141 里的virtuoso schematic软件,这是电路图绘制软件。整个工作的流程是用NetEditorLite或者ChipAnalyzer打开拍片的芯片版图数据,人工肉眼识别里面的管子(二极管、三极管、MOS管之类),再使用virtuoso schematic将管子用符号表示出来,并把管子之间的连接关系连接上。
版图提取所要注意的问题:
1,初次进行版图提图,可能会不认识管子,需要有经验的人来帮助识别,熟悉之后就容易了;
2,不同工艺的版图管子的形状是不一样的,所以碰到不认识的管子,要么靠别人帮忙,要么就只能自己去推理;
3,要有良好的管子命名习惯,这个每个公司都应该有规定的,这对于后续的工作会有很大帮助;
4,尽量按照版图的布局来放置管子的布局(在virtuoso schematic上的电路图布局),这样可以加快以后对比电路图和版图时找管子的速度;
5,在整理提取出的电路时一定要新建一个电路图来放置整理的电路,不要在刚提取的电路图上整理,方便整理时和版图数据对比。ps:有些芯片拍片公司也有提供版图提取与整理的服务。
四、电路整理
在版图提取完毕之后,下一个步骤就是电路整理。提取完的电路图是混乱的,没有层次关系。那么如何将其整理成具有层次关系,让人一看就懂呢?
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仿真之前可以自己选定所要查看的节点,这样做就可以减少仿真时间和减小数据文件的大小。有关于spectre和hspice的详细仿真过程就不细说了,或许还没有别人讲得好,附百度文库链接:http://wenku.baidu.com/view/1be650669b6648d7c1c7463d.html。
http://wenku.baidu.com/link?url=tel2SndqC_mtKmZp_SXLDWLfQOE8Zm8Ci4UGhTs8numC3xoKM5frNMV7T2n9Z0k3_l_mHdt5T4zCSFls2bUt9K1xHjiMIek7VK7oV0mIt_q
数字电路仿真工作流程:在virtuoso schematic中将整理好的电路路中数字电路部分导出成网表文件,再拷贝到windows系统上进行仿真。windows系统上数字电路网表的仿真采用Modelsim。(这么做的原因是linux系统不太方便)使用Modelsim仿真,最重要的是写好testbench(貌似这句是废话)。详细仿真过程就不举例说明了,附上百度文库链接:
http://wenku.baidu.com/link?url=Un2xqDYXRGy0126I5czuolgcLCYHMFgZndGB***HMG-NMfyMW-TNTtBMmv8BPJ84v5REo81rgf0ymJ82l3QnfyJopHsjn1TnpfmvxLgEslm3
关于电路的修改,这部分其实不好总结,因为每一款芯片都有不同的参数,所要修改的地方都不太一样,我所知道的是,必定要考虑修改的地方往往都是有关模拟电路的,例如,时钟振荡、复位电路、开漏输出管、带隙等,修改的目的是为了与当前所选用的工艺适配,以满足芯片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类芯片,配置的可不是简单的使用方案,而是一整套使用它的系统。电源管理芯片,需要配置一个电源管理芯片的一套应用方案,并且需要具有一定的竞争力,这才能够将芯片卖出去。所以成品开发是芯片能否卖出去的关键。我所接触到的成品开发,基本是以单片机为主控芯片的开发方案。具体开发过程将在后续有更为详细的说明。
芯片设计流程(四)——正向设计
正向设计其实和反向设计差别在于设计部分,其余部分的流程基本相同。正向设计的设计部分由于是原创,所以会使用很多的工具。反向设计,很多东西不必去验证,所以工具软件也就不会用到那么多。
一、总体规划
随着集成电路设计规模的不断扩大,出现了很多成熟的常用设计模块,也被成为IP核,现在芯片正向设计,不再是完全从0开始,都是基于某些成熟的IP核,并在此基础之上进行芯片功能的添加。真正从0开始设计的芯片,不是没有,而是成本太高,企业无法承担,而且也并没有必要从0开始设计。例如现在的ARM芯片开发,那些大公司基本上是获取ARM公司的授权,得到ARM芯片的IP核,并根据细分市场的需求进行有针对性的开发。这是数字芯片的情况,模拟芯片的情况也是类似的,当然我们并不能小看别人的原创能力,以为就是随随便便在别人的基础上小修小补就可以设计出令人满意的芯片,还有很多东西依然是需要丰富的经验和知识的。芯片正向设计依然是从市场未来需求着手,从开发成本和预期收益来衡量是否进行芯片的开发的。明确市场未来需求之后,就将这些需求转化为芯片的各项重要参数指标,然后进行任务划分,模拟设计师负责模拟,数字设计师负责数字。个人对于模拟部分不太熟,所以就略过。重点总结数字设计部分,当然这部分也不是很熟,因为没有真正做过。
二、架构/算法
现在数字电路在芯片中占有极大的比重,数字逻辑也变得越来越复杂,所以必须从架构和算法上进行考虑。个人所略知的关于芯片架构的是,架构可以分为三种大的方向:
1,数据流;
2,控制流,
3,总线流。数据流:数据从输入到输出是一条直线,并没有折回的数据,这是纯数据处理的一种架构,这种芯片功能应该是比较单一。
2,控制流,这是基于状态机或者CPU形式的一种架构设计。简单点的芯片就采用状态机就够了,复杂的就必须采用CPU作为控制内核了,比如单片机就是以CPU为控制内核,外加RAM,ROM所形成的一类控制类芯片。
3,总线流,这是基于总线的芯片设计架构,最熟悉的就是SOC类芯片,总线上连接着一个或多个CPU,RAM,ROM,I2C,UART等等之类的各种组件。由这些组件的不同排列组合,形成满足各种不同需求的芯片,例如不同的ARM类芯片。
算法,我所略知的是通信类的,例如,FIR,FFT,小波变换,三角函数变换等等,当然还有视频音频类的算法,对与这方面的内容就没有接触过了。总的来说,这类算法都是以数据处理为主要目的的,所以这些算法都要求有较强的数学功底。做算法开发,主要工具为MATLAB,都是先在MATLAB上做原型开发验证,再转化为RTL级的代码。
结合架构和算法,将芯片的总体结构搭建出来,为后续的工作做好了准备。
三、RTL代码
当算法工程师把芯片架构设计好,各种算法在MATLAB上通过了验证,以及其他必要条件的考量之后,便将工作交接给ASIC工程师去做RTL代码的翻译工作,就是将MATLAB上的算法翻译成RTL。这一步单纯从翻译的角度只需要一个文本编辑器就可以了。然而,还有后续的仿真验证工作,这部分的内容并不轻松。有时候根据公司的不同,根据项目的工作量大小,算法工程师与ASIC工程师在工作内容上是有交叉的,他们也承担将MATLAB转换为RTL的工作。RTL设计的时候也会考虑DFT(Design For Test 可测性设计)的问题,会在RTL代码中加入测试链,这个我就不太熟了。
四、仿真验证
这一步的工作比较关键,可以说是设计部分的第一个分水岭。仿真验证,视不同的公司,不同的项目,复杂度有非常大的不同。简单的,只要写一个较为完善的testbench验证完RTL代码的功能就行了;复杂的,将会在RTL验证环境下进行详细的验证,甚至可能用得到各种验证方法学UVM,VMM,OVM等等,这种复杂验证所用的语言一般采用SystemVerilog。验证软件可以采用cadence公司的NC_VERILOG,或者synopsys公司的VCS。此外,某些芯片还会采用FPGA,进行硬件在线仿真。这样能够获取关于芯片的更为详细的信息。但不管如何,无论是个人还是公司,都应该有对于仿真验证工作的一套完整和完善的流程方案。
五、工艺选择
正向设计在一开始的整体规划中就要考虑工艺的问题,这涉及到有关工艺的相关知识,有些工艺就是特别为某种类型的芯片而开发的。所以一旦是要开发某种有对应工艺的芯片,则直接采用即可,但往往工艺的选择会特别耗时间,会有各种参数的考量,例如工艺生产周期,工艺的成品率,工艺生产时间的安排等等各方面的考究。这部分,需要花费特别多的时间。工艺由芯片制造厂提供,前提是必须和芯片制造厂有合作关系。
六、综合、时序&功耗分析
这一步是在RTL仿真验证完之后进行,当然还有一个前提,制造工艺必须选定,否则,如果中途换了工艺,这部分的工作还得重新来做,这样将会消耗特别多的时间。这部分的工作主要用到synopsys公司的工具Design Complier(综合)、Prime Time(时序和功耗)。这两个工具的使用比较复杂,使用说明参考百度文库相关资料。总体来说,这两个工具都是约束驱动型软件,软件在使用时都是靠约束文件来进行驱动的。所以工作的主要内容除了软件的使用外最重要的就在于如何编写约束文件。一般而言,约束主要有面积约束,扇入扇出约束,时序约束等约束条件。如果RTL代码不满足约束,则必须根据具体情况修改约束条件或者是修改RTL代码。约束条件是用TCL脚本语言来写。综合和时序分析会生成基于所采用的工艺的电路网表,这个网表将是下一步自动布局布线所用到的主文件。
主要工作内容:
1、准备好选定的工艺库文件(综合网表文件、时序文件库);
2、根据设计要求编写TCL约束脚本;
3,操作软件,生成约束报告;
4,分析约束报告,修改或调整不合理的约束或者修改RTL代码(RTL代码不会轻易修改,这要求在RTL设计时就要考虑这些约束要求,以便于能够通过约束分析)。
七、 形式验证
综合出来的网表正确与否如何判定呢?这需要用到形式验证技术,该技术与RTL的仿真不同,它是从数理逻辑出发,来对比两个网表在逻辑上的等效性。如果等效,则综合的网表就是符合要求的。用到的工具为synopsys 公司的Formality 形式验证工具。其实,形式验证是在每一次芯片的逻辑电路转换为另一种表达形式的时候都需要做的工作。具体来说,在综合生成网表后做一次,主要对比的文件为RTL仿真之后的文件和综合之后的网表,在布局布线之后还需要做一次,主要对比文件为综合之后的网表与布局布线之后的网表。主要工作内容:
1、准备好待比较的两份文件及各种工艺技术库文件;
2、用TCL脚本编写脚本程序,设置其中一份文件为比较标准,其中一份为待比较文件;
3、运行Formality,分析生成的比较报告;
八、自动布局布线
这个步骤严重依赖于软件和经验,目前常用的软件为Cadence Encounter不同版本的自动布局布线软件名字可能不一样。Synopsys公司也有对应的自动布局布线的软件ASTRO,最新版本为ICC套件。软件的使用同样可以在网上找到相关资料,这里就不细说了。主要工作内容:
1、准备好工艺文件(时序文件库 数字版图库);
2,准备好综合之后的电路网表文件及约束文件;
3,根据设计要求,设置好版图面积等相关参数,
4,进行自动布局布线,检查时序和功耗,如果不满足要求,则再次修改相关参数,直到符合设计要求为止。
自动布局布线需要注意的是:数字信号一定要关注好关键路径的延时问题,这一点曾经是数字设计的关键问题。现在,据说,时序已经不再是芯片设计的主要难题了,主要难题已经转移到了功耗上,在设计的每一个阶段都要考虑功耗的问题。
模拟部分似乎是没有数字部分那么多的工具需要使用,但模拟部分的电路设计最考究的还是工程师们的设计经验,而这些经验都是要靠时间才能堆出来的。模拟电路的每一个模块都需要很多的时间去验证,比说一个高性能的放大器,一个与工艺和电压无关的带隙基准等等。模拟的版图只能是一个一个管子的画,没有自动布局布线的必要,因为模拟电路的管子也不会很多。
剩下的工作就是合并整体的版图,并进行DRC、LVS的各种验证,通过之后就可以tapeout。之后再制定测试规范,这与反向设计的剩余步骤是一样的。另外,有时候版图还需要做ECO(Engineering Change Order)工程修改命令,是指在原有的设计 的基础上如果要作一些改动,可不必从头再来,可以在原来的布局上通过 eco 步骤快捷地 完成设计。
芯片设计流程(五)——工艺文件说明
在芯片的设计重要设计环节,像综合与时序分析,版图绘制等都需要用到工艺库文件,而大家往往又对工艺文件缺乏认识,所以导致想自学一些芯片设计的东西就显得很困难。例如,没有工艺版图库文件,学习版图设计就是纸上谈兵。这篇文章主要介绍一下工艺库相关的知识。
工艺文件由芯片制造厂提供,所以概括性的了解国内和国际上有哪些芯片制造厂是很有必要的。国际上,主要有台积电,英特尔,三星等主要半导体制造商。国内,主要有中芯国际,华润上华,深圳方正等公司。这些公司都提供相关的工艺库文件,但前提是要与这些公司进行合作才能获取,这些工艺文件都属于机密性文件。
完整工艺库文件主要组成为:
1,模拟仿真工艺库,主要以支持spectre和hspice这两个软件为主,后缀名为scs——spectre使用,lib——hspice使用。
2,模拟版图库文件,主要是给cadence版图绘制软件用,后缀名为tf,drf。
3,数字综合库,主要包含时序库,基础网表组件等相关综合及时序分析所需要用到的库文件。主要是用于DC软件综合,PT软件时序分析用。
4,数字版图库,主要是给cadence encounter软件用于自动布局布线,当然自动布局布线工具也会用到时序库,综合约束文件等。
5,版图验证库,主要有DRC,LVS检查。有的是专门支持calibre,有的专门支持dracula,diva等版图检查工具用。每一种库文件都有相应的pdf说明文档。
反向设计会用到1,2,5等工艺库文件,3和4是不会用到了。正向设计(从代码开始设计的正向设计)则所有的文件都需要用到。由于工艺文件在芯片设计中占有极重要的位置,在每一个关键设计环节都要用到,再加上它的机密属性,所以网络上很难找到完整的工艺文件对于个人学习用,EETOP上有一份cadence公开的用于个人学习的工艺库文件可以方便大家学习,但似乎也是不完整的。
芯片设计流程 (六)——综合
本文是根据《综合与Design Compiler》文章,写就的一篇关于综合的简要总结,供自己整理思路之用。算是对前文《芯片设计流程(八)——正向设计2》中的综合分析做一个进一步的展开说明。
什么是综合?综合就是将RTL级verilog代码用Design Compiler 工具 转换/映射成用基础门级单元表示的电路的过程。基础门级单元也就是平时我们学的与非门,或非门,寄存器之类的,只不过,这些门级单元已经做成了标准的单元库,我们可以直接使用软件来调用,而不需要自己调用门级单元来搭建电路。简单的来说,Design Compiler软件就是做翻译的工作——将代码翻译成实际电路,但又不仅仅是翻译这么简单,它涉及到电路的优化与时序约束,使之符合我们做制定的性能要求。 前文提到该软件是约束驱动型软件,那么约束从何而来?答案是,设计规格书。每一个芯片设计项目都会有一个项目规格说明书,这是在芯片设计之初,整体规划(见前文)的步骤中要制定好的。具体详细的约束要求需要在综合过程中仔细的斟酌决定。 综合的一般流程:
1,预综合过程;
2,施加设计约束过程;
3,设计综合过程;
4,后综合过程。
PS,使用Design Compiler软件一个必备的条件是要学会使用DC TCL脚本。
预综合过程。这部分主要是准备好综合过程所使用的库文件(包括工艺库、链接库、符号库、综合库)、设计输入文件,设置好环境参数。
施加设计约束过程。这部分主要是用DC TCL脚本编写约束文件。具体的约束项目可以分为三大类:
a,面积约束,定义时钟,约束输入/输出路径;
b(环境属性),约束输入驱动,约束输出负载,设置工作条件(最好、典型、最差情况),设置连线负载模型;
c(高级时钟约束),对时钟的抖动、偏移、时钟源延迟,同步多时钟,异步时钟,多周期路径,这几类进行细致的约束。
约束的内容具体就是这么多。一个详细的TCL脚本约束文件基本包含上述所有的约束。后面有一个约束范文。
设计综合过程。主要是介绍电路模块设计规划(以利于更好的进行约束),Design Compiler综合优化的过程(三大优化阶段,结构级,逻辑级,门级),时序分析的具体过程等综合过程中的一些详细信息。
后综合过程。综合完毕该怎么看结果,时序违反该如何解决?这就是后综合过程所要解决的问题。在综合之后,通过分析综合报告,可以得知此次的电路综合结果如何,根据不符合的要求,进行重新约束,甚至重新设计电路。在这个阶段特别值得一提的是综合预估,因为在写综合约束脚本的时候,需要确定约束条件,规格书一般不能够涉及到如此细节的部分,所以需要根据实际电路进行综合预估,这个步骤是在代码编写完之后,与验证同时进行的,目的在于大致估计电路是否符合要求,此时的预综合过程与正式的综合过成是一样的,但,要求会宽松许多,时序违反的要求大概为 10%-15%,也就是说电路即使有10%-15%的电路不满足时序也没有关系。
综合约束过程是一个反复迭代的过程,需要多次设计预估,这样才能不断修正时序违反。范文:
# Set the current_design #
read_verilog {counter_pad.v counter.v} //读取设计文件
current_design Cnt10_PAD
link
set_operating_conditions -max slow -max_library slow -min fast -min_library fast //设置工作条件
set_wire_load_mode enclosed //设置连线负载模型
set_wire_load_model -name tsmc18_wl10 -library slow //设置连线负载模型
set_local_link_library {slow.db fast.db} //设置链接库
set_max_area 0 //设置面积
set_max_fanout 5 [get_ports reset_n] //设置最大扇出
set_max_fanout 4 [get_ports clk] //设置最大扇出
set_max_fanout 4 [get_ports in_ena] //设置最大扇出
set_max_transition 0.3 [get_ports reset_n] //设置信号翻转时间
set_max_transition 0.3 [get_ports clk]//设置信号翻转时间
set_max_transition 0.5 [get_ports in_ena]//设置信号翻转时间
create_clock [get_ports clk] -period 10 -waveform. {0 5}//创建时钟
set_clock_latency 1 [get_clocks clk]//设置时钟源延时
set_clock_latency -source 1 [get_clocks clk]
set_clock_uncertainty -setup 0.5 [get_clocks clk]//设置时钟不确定度
set_clock_uncertainty -hold 0.4 [get_clocks clk]
set_dont_touch_network [get_clocks clk]//设置伪路径,不要约束
set_clock_transition -fall 0.3 [get_clocks clk]////设置下降沿信号翻转时间
set_clock_transition -rise 0.3 [get_clocks clk]///设置上升沿沿信号翻转时间
set_input_delay -clock clk -max 3 [get_ports in_ena]//设置输入延时
set_output_delay -clock clk -max 4 [get_ports cnt]//设置输出延时
set_output_delay -clock clk -min 0.5 [get_ports cnt]
set_output_delay -clock clk -max 4 [get_ports carry_ena]
set_output_delay -clock clk -min 0.5 [get_ports carry_ena]
compile//编译
report_timing -delay max > ./reports/pad_setup_rt.rpt//报告最大时序延时
report_timing -delay min > ./reports/pad_hold_rt.rpt//报告最小时序延时
report_constraint -verbose > ./reports/pad_rc.rpt
report_qor > ./reports/pad_rq.rpt
remove_unconnected_ports -blast_buses [get_cells -hierarchical *]
set bus_inference_style. {%s[%d]}
set bus_naming_style. {%s[%d]}
set hdlout_internal_busses true
change_names -hierarchy -rule verilog
define_name_rules name_rule -allowed {a-z A-Z 0-9 _} -max_length 255 -type cell
define_name_rules name_rule -allowed {a-z A-Z 0-9 _[]} -max_length 255 -type net
define_name_rules name_rule -map {{"\\*cell\\*" "cell"}}
define_name_rules name_rule -case_insensitive
change_names -hierarchy -rules name_rule
write -format verilog -hier -o ./outputs/pad_counter.sv
write -format ddc -hier -o ./outputs/pad_counter.ddc
write_sdc ./outputs/pad_counter.sdc
write_sdf ./outputs/pad_counter.sdf
全部0条评论
快来发表一下你的评论吧 !