集成电路设计可以大致分为数字集成电路设计和模拟集成电路设计两大类。不过,实际的集成电路还有可能是混合信号集成电路,因此不少电路的设计同时用到这两种流程。
模拟集成电路
集成电路设计的另一个大分支是模拟集成电路设计,这一分支通常关注电源集成电路、射频集成电路等。由于现实世界的信号是模拟的,所以,在电子产品中,模-数、数-模相互转换的集成电路也有着广泛的应用。模拟集成电路包括运算放大器、线性整流器、锁相环、振荡电路、有源滤波器等。相较数字集成电路设计,模拟集成电路设计与半导体器件的物理性质有着更大的关联,例如其增益、电路匹配、功率耗散以及阻抗等等。模拟信号的放大和滤波要求电路对信号具备一定的保真度,因此模拟集成电路比数字集成电路使用了更多的大面积器件,集成度亦相对较低。
在微处理器和计算机辅助设计方法出现前,模拟集成电路完全采用人工设计的方法。由于人处理复杂问题的能力有限,因此当时的模拟集成电路通常是较为基本的电路,运算放大器集成电路就是一个典型的例子。在当时的情况下,这样的集成电路可能会涉及十几个晶体管以及它们之间的互连线。为了使模拟集成电路的设计能达到工业生产的级别,工程师需要采取多次迭代的方法以测试、排除故障。重复利用已经设计、验证的设计,可以进一步构成更加复杂的集成电路。1970年代之后,计算机的价格逐渐下降,越来越多的工程师可以利用这种现代的工具来辅助设计,例如,他们使用编好的计算机程序进行仿真,便可获得比之前人工计算、设计更高的精确度。SPICE是第一款针对模拟集成电路仿真的软件(事实上,数字集成电路中标准单元本身的设计,也需要用到SPICE来进行参数测试),其字面意思是“以集成电路为重点的仿真程序(英语:Simulation Program with Integrated Circuit Emphasis)” 基于计算机辅助设计的电路仿真工具能够适应更加复杂的现代集成电路,特别是专用集成电路。使用计算机进行仿真,还可以使项目设计中的一些错误在硬件制造之前就被发现,从而减少因为反复测试、排除故障造成的大量成本。此外,计算机往往能够完成一些极端复杂、繁琐,人类无法胜任的任务,使得诸如蒙地卡罗方法等成为可能。实际硬件电路会遇到的与理想情况不一致的偏差,例如温度偏差、器件中半导体掺杂浓度偏差,计算机仿真工具同样可以进行模拟和处理。总之,计算机化的电路设计、仿真能够使电路设计性能更佳,而且其可制造性可以得到更大的保障。尽管如此,相对数字集成电路,模拟集成电路的设计对工程师的经验、权衡矛盾等方面的能力要求更严格。
数字电路
粗略地说,数字集成电路可以分为以下基本步骤:系统定义、寄存器传输级设计、物理设计。而根据逻辑的抽象级别,设计又分为系统行为级、寄存器传输级、逻辑门级。设计人员需要合理地书写功能代码、设置综合工具、验证逻辑时序性能、规划物理设计策略等等。在设计过程中的特定时间点,还需要多次进行逻辑功能、时序约束、设计规则方面的检查、调试,以确保设计的最终成果合乎最初的设计收敛目标。
系统定义
系统定义是进行集成电路设计的最初规划,在此阶段设计人员需要考虑系统的宏观功能。设计人员可能会使用一些高抽象级建模语言和工具来完成硬件的描述,例如C语言、C 、SystemC、SystemVerilog等事务级建模语言,以及Simulink和MATLAB等工具对信号进行建模。尽管主流是以寄存器传输级设计为中心,但已有一些直接从系统级描述向低抽象级描述(如逻辑门级结构描述)转化的高级综合(或称行为级综合)、高级验证工具正处于发展阶段。系统定义阶段,设计人员还对芯片预期的工艺、功耗、时钟频率频率、工作温度等性能指标进行规划 。
寄存器传输级设计
集成电路设计常常在寄存器传输级上进行,利用硬件描述语言来描述数字集成电路的信号储存以及信号在寄存器、存储器、组合逻辑装置和总线等逻辑单元之间传输的情况。在设计寄存器传输级代码时,设计人员会将系统定义转换为寄存器传输级的描述。设计人员在这一抽象层次最常使用的两种硬件描述语言是Verilog、VHDL,二者分别于1995年和1987年由电气电子工程师学会(IEEE)标准化。正由于有着硬件描述语言,设计人员可以把更多的精力放在功能的实现上,这比以往直接设计逻辑门级连线的方法学(使用硬件描述语言仍然可以直接设计门级网表,但是少有人如此工作)具有更高的效率。
设计验证
设计人员完成寄存器传输级设计之后,会利用测试平台、断言等方式来进行功能验证,检验项目设计是否与之前的功能定义相符,如果有误,则需要检测之前设计文件中存在的漏洞。现代超大规模集成电路的整个设计过程中,验证所需的时间和精力越来越多,甚至都超过了寄存器传输级设计本身,人们设置些专门针对验证开发了新的工具和语言。
例如,要实现简单的加法器或者更加复杂的算术逻辑单元,或利用触发器实现有限状态机,设计人员可能会编写不同规模的硬件描述语言代码。功能验证是项复杂的任务,验证人员需要为待测设计创建一个虚拟的外部环境,为待测设计提供输入信号(这种人为添加的信号常用“激励”这个术语来表示),然后观察待测设计输出端口的功能是否合乎设计规范。
当所设计的电路并非简单的几个输入端口、输出端口时,由于验证需要尽可能地考虑到所有的输入情况,因此对于激励信号的定义会变得更加复杂。有时工程师会使用某些脚本语言(如Perl、Tcl)来编写验证程序,借助计算机程序的高速处理来实现更大的测试覆盖率。现代的硬件验证语言可以提供一些专门针对验证的特性,例如带有约束的随机化变量、覆盖等等。作为硬件设计、验证统一语言,SystemVerilog是以Verilog为基础发展而来的,因此它同时具备了设计的特性和测试平台的特性,并引入了面向对象程序设计的思想,因此测试平台的编写更加接近软件测试。诸如通用验证方法学的标准化验证平台开发框架也得到了主流电子设计自动化软件厂商的支持。针对高级综合,关于高级验证的电子设计自动化工具也处于研究中。
逻辑综合
工程师设计的硬件描述语言代码一般是寄存器传输级的,在进行物理设计之前,需要使用逻辑综合工具将寄存器传输级代码转换到针对特定工艺的逻辑门级网表,并完成逻辑化简。
和人工进行逻辑优化需要借助卡诺图等类似,电子设计自动化工具来完成逻辑综合也需要特定的算法(如奎因-麦克拉斯基算法等)来化简设计人员定义的逻辑函数。输入到自动综合工具中的文件包括寄存器传输级硬件描述语言代码、工艺库(可以由第三方晶圆代工服务机构提供)、设计约束文件三大类,这些文件在不同的电子设计自动化工具包系统中的格式可能不尽相同。逻辑综合工具会产生一个优化后的门级网表,但是这个网表仍然是基于硬件描述语言的,这个网表在半导体芯片中的走线将在物理设计中来完成。
选择不同器件(如专用集成电路或者现场可编程门阵列等)对应的工艺库来进行逻辑综合,或者在综合时设置了不同的约束策略,将产生不同的综合结果。寄存器传输级代码对于设计项目的逻计划分、语言结构风格等因素会影响综合后网表的效率。大多数成熟的综合工具大多数是基于寄存器传输级描述的,而基于系统级描述的高级综合工具还处在发展阶段。
形式等效性检查
为了比较门级网表和寄存器传输级的等效性,可以通过生成诸如不二可满足性、二元决策图等途径来完成形式等效性检查(形式验证)。实际上,等效性检查还可以检查两个寄存器传输级设计之间,或者两个门级网表之间的逻辑等效性。
时序分析
现代集成电路的时钟频率已经到达了兆赫兹级别,而大量模块内、模块之间的时序关系极其复杂,因此,除了需要验证电路的逻辑功能,还需要进行时序分析,即对信号在传输路径上的延迟进行检查,判断其是否匹配时序收敛要求。时序分析所需的逻辑门标准延迟格式信息可以由标准单元库(或从用户自己设计的单元从提取的时序信息)提供。随着电路特征尺寸不断减小,互连线延迟在实际的总延时中所占的比例愈加显著,因此在物理设计完成之后,把互连线的延迟纳入考虑,才能够精准地进行时序分析。
物理设计
逻辑综合完成之后,通过引入器件制造公司提供的工艺信息,前面完成的设计将进入布图规划、布局、布线阶段,工程人员需要根据延迟、功耗、面积等方面的约束信息,合理设置物理设计工具的参数,不断调试,以获取最佳的配置,从而决定组件在晶圆上的物理位置。如果是全定制设计,工程师还需要精心绘制单元的集成电路版图,调整晶体管尺寸,从而降低功耗、延时。
随着现代集成电路的特征尺寸不断下降,超大规模集成电路已经进入深亚微米级阶段,互连线延迟对电路性能的影响已经达到甚至超过逻辑门延迟的影响。这时,需要考虑的因素包括线网的电容效应和线网电感效应,芯片内部电源线上大电流在线网电阻上造成的电压降也会影响集成电路的稳定性。为了解决这些问题,同时缓解时钟偏移、时钟树寄生参数的负面影响,合理的布局布线和逻辑设计、功能验证等过程同等重要。随着移动设备的发展,低功耗设计在集成电路设计中的地位愈加显著。在物理设计阶段,设计可以转化成几何图形的表示方法,工业界有若干标准化的文件格式(如GDSII)予以规范。
值得注意的是,电路实现的功能在之前的寄存器传输级设计中就已经确定。在物理设计阶段,工程师不仅不能够让之前设计好的逻辑、时序功能在该阶段的设计中被损坏,还要进一步优化芯片按照正确运行时的延迟时间、功耗、面积等方面的性能。在物理设计产生了初步版图文件之后,工程师需要再次对集成电路进行功能、时序、设计规则、信号完整性等方面的验证,以确保物理设计产生正确的硬件版图文件。