集成电路 设计(Integrated circuit design , IC design),亦可称之为 超大规模集成电路 设计(VLSI design),是指以集成电路、超大规模集成电路为目标的设计流程。集成电路设计涉及对 电子器件 (例如 晶体管 、 电阻 、 电容器 等)、器件间互连线模型的建立。所有的器件和互连线都需安置在一块半导体衬底材料之上,这些组件通过 半导体器件 制造工艺(例如 光刻 等)安置在单一的硅衬底上,从而形成电路。
简单介绍
集成电路设计最常使用的衬底材料是硅。设计人员会使用技术手段将硅衬底上各个器件之间相互电隔离,以控制整个芯片上各个器件之间的导电性能。PN结、金属 氧化物 半导体 场效应管 等组成了 集成电路 器件的基础结构,而由后者构成的互补式金属氧化物半导体则凭借其低静态功耗、高集成度的优点成为数字集成电路中逻辑门的基础构造。设计人员需要考虑 晶体管 、互连线的能量耗散,这一点与以往由分立 电子器件 开始构建电路不同,这是因为集成电路的所有器件都集成在一块 晶圆 上。金属互连线的 电迁移 以及 静电放电 对于 微芯片 上的器件通常有害,因此也是集成电路设计需要关注的课题。
随着集成电路的规模不断增大,其集成度已经达到深亚微米级(特征尺寸在130纳米以下),单个芯片集成的晶体管已经接近十亿个。由于其极为复杂,集成电路设计相较简单电路设计常常需要 计算机 辅助的设计方法学和技术手段。 集成电路 设计的研究范围涵盖了数字集成电路中数字逻辑的优化、网表实现, 寄存器 传输级硬件描述语言代码的书写,逻辑功能的验证、 仿真 和时序分析,电路在硬件中连线的分布, 模拟集成电路 中 运算放大器 、电子 滤波器 等器件在芯片中的安置和混合信号的处理。相关的研究还包括硬件设计的 电子设计自动化 ( saber仿真软件 )、 计算机辅助设计 (CAD) 方法学 等,是 电机工程学 和计算机工程的一个 子集 。
对于数字 集成电路 来说,设计人员更多的是站在高级抽象层面,即寄存器传输级甚至更高的系统级(有人也称之为行为级),使用硬件描述语言或高级建模语言来描述电路的逻辑、时序功能,而逻辑综合可以自动将寄存器传输级的硬件描述语言转换为逻辑门级的网表。对于简单的电路,设计人员也可以用硬件描述语言直接描述逻辑门和 触发器 之间的连接情况。网表经过进一步的 功能验证 、布局、布线,可以产生用于工业制造的GDSII文件,工厂根据该文件就可以在 晶圆 上制造电路。模拟 集成电路 设计涉及了更加复杂的信号环境,对工程师的经验有更高的要求,并且其设计的自动化程度远不及数字集成电路。
逐步完成功能设计之后,设计规则会指明哪些设计匹配制造要求,而哪些设计不匹配,而这个规则本身也十分复杂。集成电路设计流程需要匹配数百条这样的规则。在一定的设计约束下,集成电路物理版图的布局、布线对于获得理想速度、 信号完整性 、减少芯片面积来说至关重要。 半导体器件 制造的不可预测性使得集成电路设计的难度进一步提高。在集成电路设计领域,由于市场竞争的压力, 电子设计自动化 等相关 计算机辅助设计 工具得到了广泛的应用,工程师可以在计算机软件的辅助下进行 寄存器 传输级设计、 功能验证 、静态时序分析、 物理设计 等流程。
抽象级别
集成电路设计通常是以“模块”作为设计的单位的。例如,对于多位 全加器 来说,其次级模块是一位的 加法器 ,而加法器又是由下一级的 与门 、非门模块构成,与、非门最终可以分解为更低抽象级的CMOS器件。
从抽象级别来说,数字集成电路设计可以是自顶向下的,即先定义了系统最高逻辑层次的功能模块,根据顶层模块的需求来定义子模块,然后逐层继续分解;设计也可以是自底向上的,即先分别设计最具体的各个模块,然后如同搭积木一般用这些最底层模块来实现上层模块,最终达到最高层次。在许多设计中,自顶向下、自底向上的设计方法学是混合使用的,系统级设计人员对整体体系结构进行规划,并进行子模块的划分,而底层的电路设计人员逐层向上设计、优化单独的模块。最后,两个方向的设计人员在中间某一抽象层次会合,完成整个设计。
硬件实现
对于不同的设计要求,工程师可以选择使用半定制设计途径,例如采用 PLD (现场可编程逻辑门阵列等)或基于标准单元库的专用 集成电路 来实现硬件电路;也可以使用 全定制 设计,控制 晶体管 版图到系统结构的全部细节。
全定制设计
这种设计方式要求设计人员利用版图编辑器来完成版图设计、参数提取、单元 表征 ,然后利用这些自己设计的单元来完成电路的构建。通常,全定制设计是为了最大化优化电路性能。如果标准单元库中缺少某种所需的单元,也需要采取全定制设计的方法完成所需的单元设计。不过,这种设计方式通常需要较长的时间。
半定制设计
与全定制设计相对的设计方式为半定制设计。简而言之,半定制集成电路设计是基于预先设计好的某些逻辑单元。例如,设计人员可以在标准组件库(通常可以从第三方购买)的基础上设计专用 集成电路 ,从中选取所需的逻辑单元(例如各种基本逻辑门、 触发器 等)来搭建所需的电路。他们也可以使用 PLD 来完成设计,这类器件的几乎所有物理结构都已经固定在芯片之中,仅剩下某些连线可以由用户编程决定其连接方式。与这些预先设计好的逻辑单元有关的性能参数通常也由其供应商提供,以方便设计人员进行时序、功耗分析。在半定制的现场可编程逻辑门阵列( FPGA )上实现设计的优点是开发周期短、成本低。
可编程逻辑件
可编程逻辑器件通常由半导体厂家提供商品芯片,这些芯片可以通过JTAG等方式和 计算机 连接,因此设计人员可以用 电子设计自动化 工具来完成设计,然后将利用设计代码来对逻辑芯片编程。可编程逻辑阵列芯片在出厂前就提前定义了逻辑门构成的阵列,而逻辑门之间的连接线路则可以通过编程来控制连接与断开。随着技术的发展,对 连接线 的编程可以通过EPROM(利用较 高压电 编程、 紫外线 照射擦除)、EEPROM(利用电信号来多次编程和擦除)、 SRAM 、闪存等方式实现。现场可编程逻辑门阵列是一种特殊的 PLD ,它的物理基础是可配置逻辑单元,由查找表、可编程多路选择器、 寄存器 等结构组成。查找表可以用来实现 逻辑函数 ,如三个输入端的查找表可以实现所有三变量的逻辑函数。
专用集成电路
针对特殊应用设计的专用集成电路(ASIC)的优点是面积、功耗、时序可以得到最大程度地优化。专用集成电路只能在整个集成电路设计完成之后才能开始制造,而且需要专业的半导体工厂的参与。专用集成电路可以是基于标准单元库,也可以是 全定制 设计。在后一种途径中,设计人员对于 晶圆 上组件的位置和连接有更多的控制权,而不像 PLD 途径,只能选择使用其中部分硬件资源,从而造成部分资源被浪费。专用集成电路的面积、功耗、时序特性通常可以得到更好的优化。然而,专用 集成电路 的设计会更加复杂,并且需要专门的工艺制造部门(或者外包给晶圆代工厂)才能将GDSII文件制造成电路。一旦专用集成电路芯片制造完成,就不能像可编程逻辑器件那样对电路的逻辑功能进行重新配置。对于单个产品,在专用集成电路上实现集成电路的经济、时间成本都比可编程逻辑器件高,因此在早期的设计与调试过程中,常用可编程逻辑器件,尤其是现场可编程逻辑门阵列;如果所设计的集成电路将要在后期大量投产,那么批量生产专用集成电路将会更经济。
设计流程
集成电路设计可以大致分为数字集成电路设计和模拟集成电路设计两大类。不过,实际的 集成电路 还有可能是混合信号集成电路,因此不少电路的设计同时用到这两种流程。
模拟集成电路
集成电路设计的另一个大分支是模拟集成电路设计,这一分支通常关注电源集成电路、 射频 集成电路等。由于现实世界的信号是模拟的,所以,在电子产品中,模-数、数-模相互转换的集成电路也有着广泛的应用。模拟集成电路包括 运算放大器 、线性 整流器 、 锁相环 、振荡电路、 有源滤波器 等。相较数字集成电路设计,模拟集成电路设计与 半导体器件 的 物理性质 有着更大的关联,例如其增益、电路匹配、功率耗散以及 阻抗 等等。 模拟信号 的放大和滤波要求电路对信号具备一定的保真度,因此 模拟集成电路 比数字集成电路使用了更多的大面积器件,集成度亦相对较低。
在微处理器和 计算机辅助设计 方法出现前,模拟集成电路完全采用人工设计的方法。由于人处理复杂问题的能力有限,因此当时的模拟 集成电路 通常是较为基本的电路, 运算放大器 集成电路就是一个典型的例子。在当时的情况下,这样的 集成电路 可能会涉及十几个 晶体管 以及它们之间的互连线。为了使模拟集成电路的设计能达到工业生产的级别,工程师需要采取多次迭代的方法以测试、排除故障。重复利用已经设计、验证的设计,可以进一步构成更加复杂的集成电路。1970年代之后, 计算机 的价格逐渐下降,越来越多的工程师可以利用这种现代的工具来辅助设计,例如,他们使用编好的 计算机程序 进行 仿真 ,便可获得比之前人工计算、设计更高的精确度。 集成电路通用模拟程序 是第一款针对模拟 集成电路 仿真的软件(事实上,数字集成电路中标准单元本身的设计,也需要用到SPICE来进行参数测试),其字面意思是“以集成电路为重点的仿真程序( 英语 :Simulation Program with Integrated Circuit Emphasis)”基于 计算机辅助设计 的电路仿真工具能够适应更加复杂的现代 集成电路 ,特别是专用集成电路。使用 计算机 进行 仿真 ,还可以使项目设计中的一些错误在硬件制造之前就被发现,从而减少因为反复测试、排除故障造成的大量成本。此外,计算机往往能够完成一些极端复杂、繁琐,人类无法胜任的任务,使得诸如蒙地卡罗方法等成为可能。实际硬件电路会遇到的与理想情况不一致的偏差,例如温度偏差、器件中半导体掺杂浓度偏差,计算机仿真工具同样可以进行模拟和处理。总之, 计算机 化的电路设计、仿真能够使电路设计性能更佳,而且其可制造性可以得到更大的保障。尽管如此,相对数字集成电路, 模拟集成电路 的设计对工程师的经验、权衡矛盾等方面的能力要求更严格。
数字电路
粗略地说,数字 集成电路 可以分为以下基本步骤:系统定义、 寄存器 传输级设计、 物理设计 。而根据逻辑的抽象级别,设计又分为系统行为级、寄存器传输级、逻辑门级。设计人员需要合理地书写功能代码、设置综合工具、验证逻辑时序性能、规划物理设计策略等等。在设计过程中的特定时间点,还需要多次进行逻辑功能、时序约束、设计规则方面的检查、调试,以确保设计的最终成果合乎最初的设计收敛目标。
系统定义
系统定义是进行集成电路设计的最初规划,在此阶段设计人员需要考虑系统的宏观功能。设计人员可能会使用一些高抽象级建模语言和工具来完成硬件的描述,例如 c语言 、 C++ 、 systemC 、 SystemVerilog 等事务级建模语言,以及 SIMULINK 和 MATLAB 等工具对信号进行建模。尽管主流是以 寄存器 传输级设计为中心,但已有一些直接从系统级描述向低抽象级描述(如逻辑门级结构描述)转化的高级综合(或称行为级综合)、高级验证工具正处于发展阶段。系统定义阶段,设计人员还对芯片预期的工艺、功耗、时钟频率频率、工作温度等性能指标进行规划。
寄存器传输级
集成电路 设计常常在寄存器传输级上进行,利用硬件描述语言来描述数字集成电路的信号储存以及信号在寄存器、存储器、组合逻辑装置和 总线 等逻辑单元之间传输的情况。在设计 寄存器 传输级代码时,设计人员会将系统定义转换为寄存器传输级的描述。设计人员在这一抽象层次最常使用的两种硬件描述语言是 Verilog 、 vhdl ,二者分别于1995年和1987年由电气电子工程师学会(IEEE)标准化。正由于有着硬件描述语言,设计人员可以把更多的精力放在功能的实现上,这比以往直接设计逻辑门级连线的 方法学 (使用硬件描述语言仍然可以直接设计门级网表,但是少有人如此工作)具有更高的效率。
设计验证
设计人员完成 寄存器 传输级设计之后,会利用测试平台、断言等方式来进行 功能验证 ,检验项目设计是否与之前的功能定义相符,如果有误,则需要检测之前设计文件中存在的漏洞。现代 超大规模集成电路 的整个设计过程中,验证所需的时间和精力越来越多,甚至都超过了寄存器传输级设计本身,人们设置些专门针对验证开发了新的工具和语言。
例如,要实现简单的 加法器 或者更加复杂的算术逻辑单元,或利用 触发器 实现有限 状态机 ,设计人员可能会编写不同规模的硬件描述语言代码。功能验证是项复杂的任务,验证人员需要为待测设计创建一个虚拟的外部环境,为待测设计提供输入信号(这种人为添加的信号常用“激励”这个术语来表示),然后观察待测设计输出端口的功能是否合乎设计规范。
当所设计的电路并非简单的几个输入端口、输出端口时,由于验证需要尽可能地考虑到所有的输入情况,因此对于激励信号的定义会变得更加复杂。有时工程师会使用某些脚本语言(如 Perl 、 TCL科技 )来编写验证程序,借助 计算机程序 的高速处理来实现更大的测试覆盖率。现代的硬件验证语言可以提供一些专门针对验证的特性,例如带有约束的随机化变量、覆盖等等。作为硬件设计、验证统一语言,System Verilog 是以Verilog为基础发展而来的,因此它同时具备了设计的特性和测试平台的特性,并引入了面向对象程序设计的思想,因此测试平台的编写更加接近 软件测试 。诸如通用验证 方法学 的标准化验证平台开发框架也得到了主流 电子设计自动化 软件厂商的支持。针对高级综合,关于高级验证的电子设计自动化工具也处于研究中。
逻辑综合
工程师设计的硬件描述语言代码一般是 寄存器 传输级的,在进行 物理设计 之前,需要使用逻辑综合工具将寄存器传输级代码转换到针对特定工艺的逻辑门级网表,并完成逻辑化简。
和人工进行逻辑优化需要借助 卡诺图 等类似,电子设计自动化工具来完成逻辑综合也需要特定的算法(如奎因-麦克拉斯基算法等)来化简设计人员定义的逻辑函数。输入到自动综合工具中的文件包括寄存器传输级硬件描述语言代码、工艺库(可以由第三方 晶圆 代工服务机构提供)、设计约束文件三大类,这些文件在不同的 电子设计自动化 工具包系统中的格式可能不尽相同。逻辑综合工具会产生一个优化后的门级网表,但是这个网表仍然是基于硬件描述语言的,这个网表在 半导体芯片 中的走线将在 物理设计 中来完成。
选择不同器件(如专用 集成电路 或者 FPGA 等)对应的工艺库来进行逻辑综合,或者在综合时设置了不同的约束策略,将产生不同的综合结果。 寄存器 传输级代码对于设计项目的逻计划分、语言结构风格等因素会影响综合后网表的效率。大多数成熟的综合工具大多数是基于寄存器传输级描述的,而基于系统级描述的高级综合工具还处在发展阶段。
等效性检查
为了比较门级网表和寄存器传输级的等效性,可以通过生成诸如不二可满足性、 二元决策图 等途径来完成形式等效性检查( 形式验证 )。实际上,等效性检查还可以检查两个寄存器传输级设计之间,或者两个门级网表之间的逻辑等效性。
时序分析
现代 集成电路 的时钟频率已经到达了兆赫兹级别,而大量模块内、模块之间的时序关系极其复杂,因此,除了需要验证电路的逻辑功能,还需要进行时序分析,即对信号在传输路径上的延迟进行检查,判断其是否匹配时序收敛要求。时序分析所需的逻辑门标准延迟格式信息可以由标准单元库(或从用户自己设计的单元从提取的时序信息)提供。随着电路特征尺寸不断减小,互连线延迟在实际的总延时中所占的比例愈加显著,因此在 物理设计 完成之后,把互连线的延迟纳入考虑,才能够精准地进行时序分析。
物理设计
逻辑综合完成之后,通过引入器件制造公司提供的工艺信息,前面完成的设计将进入布图规划、布局、布线阶段,工程人员需要根据延迟、功耗、面积等方面的约束信息,合理设置物理设计工具的参数,不断调试,以获取最佳的配置,从而决定组件在 晶圆 上的物理位置。如果是 全定制 设计,工程师还需要精心绘制单元的 集成电路版图 ,调整 晶体管 尺寸,从而降低功耗、延时。
随着现代 集成电路 的特征尺寸不断下降, 超大规模集成电路 已经进入深亚微米级阶段,互连线延迟对电路性能的影响已经达到甚至超过逻辑门延迟的影响。这时,需要考虑的因素包括线网的 电容 效应和线网 电感 效应,芯片内部 power cord 上大电流在线网 电阻 上造成的电压降也会影响集成电路的稳定性。为了解决这些问题,同时缓解 时钟偏移 、时钟树 寄生 参数的负面影响,合理的布局布线和逻辑设计、 功能验证 等过程同等重要。随着 手持移动设备 的发展,低功耗设计在集成电路设计中的地位愈加显著。在物理设计阶段,设计可以转化成 几何图形 的表示方法,工业界有若干标准化的文件格式(如GDSII)予以规范。
值得注意的是,电路实现的功能在之前的 寄存器 传输级设计中就已经确定。在物理设计阶段,工程师不仅不能够让之前设计好的逻辑、时序功能在该阶段的设计中被损坏,还要进一步优化芯片按照正确运行时的延迟时间、功耗、面积等方面的性能。在 物理设计 产生了初步版图文件之后,工程师需要再次对 集成电路 进行功能、时序、设计规则、 信号完整性 等方面的验证,以确保物理设计产生正确的硬件版图文件。
可测试性设计
随着 超大规模集成电路 的复杂程度不断提高,电路制造后的测试所需的时间和经济成本也不断增加。以往,人们将绝大多数精力放在设计本身,而并不考虑之后的测试,因为那时的测试相对更为简单。近年来,测试本身也逐渐成为一个庞大的课题。
比如,从电路外部控制某些内部信号使得它们呈现特定的逻辑值比较容易,而某些内部信号由于依赖大量其它内部信号,从外部很难直接改变它们的数值。此外,内部信号的改变很多时候不能在主输出端观测(有时主输出端的信号输出看似正确,其实内部状态是错误的,仅观测主输出端的输出不足以判断电路是否正常工作)。以上两类问题,即可控制性和可观测性,是可测试性的两大组成部分。
人们逐渐发现,电路在设计时向电路添加一些特殊的结构(例如扫描链和内建自测试),能够大大方便之后的电路测试。这样的设计即为可测试性设计,它们使电路更加复杂,但是却能凭借更简捷的测试降低整个项目的成本。
随着 超大规模集成电路 的集成度不断提高,同时市场竞争压力的不断增加,集成电路设计逐渐引入了可重用设计方法学。可重用设计方法学的主要意义在于,提供IP核( 知识产权 核)的供应商可以将一些已经预先完成的设计以商品的形式提供给设计方,后者可以将IP核作为一个完整的模块在自己的设计项目中使用。由此,在实现类似功能时,各个公司就不需反复设计类似模块。这样做虽会提高商业成本,但亦显著降低了设计的复杂程度,从而缩短公司在设计大型电路所需的周期,从而提高市场竞争力。IP核供应商提供的产品可能是已验证的硬件描述语言代码,为了保护供应商的知识产权,这些代码很多时候是加密的。IP核本身也是作为 集成电路 进行设计,但是它为了在不同设计项目中能够得到应用,会重点强化其可移植性,因此它的设计代码规范更加严格。有的芯片公司专门从事IP核的开发和销售,ARM就是一个典型的例子,这些公司通过 知识产权 的授权营利。