《数字集成电路设计与实现》由会员分享,可在线阅读,更多相关《数字集成电路设计与实现(61页珍藏版)》请在金锄头文库上搜索。
1、数字集成电路设计与实现1.绪论2.基本流程2.1 代码编写2.2 功能验证2.3 逻辑综合2.4 静态时序分析2.5 物理综合3.设计技术3.1 RTL代码3.2 数据通道设计3.3 状态机设计3.4 系统设计4.验证技术4.1 测试平台5.逻辑综合技术5.1 标准单元库5.2 设计约束6.物理综合技术第1章 绪论1.1 数字集成电路的特点数字电路通常是由简单的单元电路构成的规模庞大的系统,体现了“简单性”与“复杂性”的对立统一。基本的数字单元电路,如各种逻辑门电路和触发器、锁存器等,其电路结构比较简单,且实现的逻辑功能与其中晶体管尺寸无关。数字电路的性能指标相对较少,主要包括速度、功耗、面积
2、三个方面,设计思路比较简单。但是,一个数字电路系统通常是非常复杂的,可能包含数百万个基本逻辑单元,其逻辑功能也需要有其它领域的知识才能理解。具有存储功能的数字逻辑单元,其输入信号和控制信号需要满足一定的时序关系才能正确实现逻辑功能。在达到一定规模后,各个单元电路的时序要求很难同时满足。制造工艺的进步,对数字电路性能提高作用显著。同样的设计,用特征尺寸更小的工艺实现,各方面都性能会有很大提高。因此,数字电路设计需要有较好的可移植性或重用性,以适应制造工艺的发展。数字电路的这些特点,决定了其设计技术的发展方向。1.2 现代数字电路设计方法在早期的集成电路设计中,数字电路与模拟电路的设计方法没有什么
3、区别,都是全定制设计。全定制设计是一种晶体管级的设计,任何电路都要描述为由晶体管构成的电路网络。由于晶体管与版图之间具有明确的对应关系,这种设计方法的实现步骤相对较少,对EDA工具的依赖程度相对较低。在全定制设计问题中,设计者可以任意确定每个单元电路的结构和其中晶体管的尺寸,理论上讲,能够实现最优化的电路性能。由于具有较高的灵活性和设计自由度,全定制设计至今仍是模拟电路和规模较小的混合信号电路的设计方法。但是,对于规模庞大的数字电路来说,这种设计方法不仅设计工作量大,而且对电路的时序关系验证也十分困难,对于规模达到百万、千万晶体管的电路,完全采用全定制设计是不现实的。现代数字集成电路设计方法来
4、自对传统设计方法的总结和对计算机软件技术的引入。在对电路性能的要求没有达到工艺极限时,不需要对每个单元电路都进行特殊设计,可先设计出各种基本单元电路(cell),包括原理图和版图,形成一个标准单元库,再利用库中的cell实现复杂的逻辑关系。这种方法使得自动化设计成为可能。即使在全定制设计中,对电路功能的描述也是层次化的,而不是直接描述为晶体管网络。有了标准单元库,一个电路就可以理解为由标准单元构成的网表,也就是说“描述级别”由晶体管级提升到了“门级”。复杂的电路在“门级”仍然难以看出逻辑功能,需要更高级别的描述。一个复杂的数字电路系统可以理解为由若干个具有典型逻辑功能的模块和一个控制电路组成的
5、,常见的模块包括寄存器、计数器、算术和逻辑运算单元和存储器等。控制电路是一个有限状态机,在时钟的作用下,状态机根据当前的状态和输入信号不断地进行状态转换,同时产生输出信号,控制各个逻辑模块工作。这种级别的描述称为“架构级”,是最重要的设计级别。最高级别的描述是系统级,在这个级别,一般只定义系统的功能、外部接口和其中主要功能模块。最低级别的描述是版图,版图实际上就是一组几何图形,根据版图可以生成光刻版。一个设计实际上总是要从系统级开始考虑,然后是架构级、门级、晶体管级,最后是版图级。在传统的设计流程中,可验证的设计描述是从晶体管级开始的,用晶体管构成逻辑门,再由逻辑门构成功能模块,最后连接成系统
6、。全部设计工作都要由设计者来完成,尽管也使用EDA工具,但这些工具只是代替了纸、笔和计算器,不能自动生成任何东西。计算机技术的发展,使得从高级别的描述自动生成低级别的描述成为可能,这个过程与从高级语言编写的程序生成机器码的过程相似。用电路图描述复杂电路是很困难的,也很难被计算机理解,于是产生了硬件描述语言。硬件描述语言具有很强的描述能力,一段几百行的代码,有时可以代替几百张图纸。硬件描述语言诞生之初是为了保存设计或进行功能仿真,用于生成电路是后来的事。硬件描述语言也存在级别的概念,分为行为级、寄存器传输级(RTL级)、门级、晶体管级等。版图的细节很难用语言描述,目前还不能自动生成,因此在所谓的
7、自动化设计流程中,标准单元库中的基本单元的版图还是手工设计的。在现代的ASIC设计方法中,标准单元库是由芯片制造厂提供的,设计者只需要用硬件描述语言写出对电路功能的描述,再用EDA工具的脚本语言,写出对电路性能的要求,大部分工作将由EDA工具实现。这种方法极大地提高了设计速度,也提高了设计的重用性。本文主要介绍这种设计方法,按业界习惯说法,简称为ASIC设计方法。ASIC设计方法可以归纳为两部分工作,即设计和实现。设计指描述和验证电路功能,这部分工作需要由设计者完成。另一部分工作是实现的流程,在这部分工作中,设计者的任务是将对电路性能的要求,按EDA工具规定的形式,提供给EDA工具,用EDA工
8、具自动生成基于cell的电路网表、版图和各种性能报告,最后确定设计的交付。用EDA工具自动实现的设计工作称为“综合”,从硬件描述语言得到由cell网表的工作称为逻辑综合,由cell网表自动生成版图的工作称为物理综合。设计过程的主要任务是给出可综合的描述,并验证其逻辑功能的正确性。对于复杂的设计,电路功能需要通过多个级别的描述来完成。数字电路设计分为系统级、架构级、寄存器传输级(RTL)、门级和晶体管级等。所谓级别包括两方面含义,一是设计者对电路的认识,二是允许使用的描述方法。系统级设计的任务主要是定义电路的功能和外部特性,设计者只需要将电路为若干个抽象的功能模块,并将各个功能模块的逻辑功能定义
9、清楚即可。架构级设计要具体一些,在这个级别,电路要描述成相互连接的若干个典型逻辑部件和控制其数据传输的状态机。典型逻辑部件包括计数器、寄存器、算术运算单元等,又称为数据通道(Data path),状态机则是一个设计中具有特殊性的部分,它控制数据通道的工作。以上两种描述,描述方法没有什么限制,将问题说清楚即可。寄存器传输级的描述是ASIC设计中最重要的描述,必须使用硬件描述语言完成。所谓寄存器传输级描述是基于这样一种认识,即任何数字电路,无论功能如何,都是由寄存器和寄存器之间的组合逻辑电路实现的,寄存器用来保存数据,组合电路用于传输数据。RTL代码必须保证可综合性,只能使用硬件描述语言中的部分描
10、述语句。从RTL代码中应可隐约看出电路结构,又不要写得过于具体。细化到逻辑门和触发器的代码并不好,因为从RTL描述到cell的转换是逻辑综合工具的任务,人为 写到cell一级不仅降低了代码的可读性,也不利于优化。在ASIC设计中,门级和晶体管级电路是由EDA工具生成的,设计者的任务是给出功能正确的RTL级代码。验证RTL代码的正确性需要编写验证代码,这部分代码称为测试平台(Testbench)。Testbench用于给RTL代码输入信号和判断输出的正确性,也要用硬件描述语言编写,但与RTL代码不同,这部分代码不需要生成电路,对语言的使用没有限制。1.3 硬件描述语言硬件描述语言(HDL)是一种
11、用于描述电路功能的语言,具有与计算机编程语言类似的语法,看起来与C语言等计算机编程语言很相似,但两者有本质区别。硬件描述语言编写的代码是对电路的描述,而不是程序。程序是指令的序列,是有执行次序的,而电路则不存在执行次序的概念。实际上,HDL语言与SPICE语言属于同一类型,但抽象级别较高。在进行仿真分析,SPICE更精确,但速度太慢,不适合用于大规模电路。HDL代码的仿真速度要快得多,但只能反映逻辑功能和延迟,无法提供全面信息,也不如SPICE精确。常用的硬件描述语言有VHDL,Verilog,SystemC等,这些硬件描述语言各有特点。每一种硬件描述语言都支持多个抽象级别的描述,支持级别有所
12、不同。System C主要用于系统级建模和功能验证。VHDL和Verilog都支持RTL级描述,但VHDL侧重更高级别描述,语法复杂。Verilog主要支持RTL和RTL以下级别,语法与C语言十分相似,应用最为广泛。1.4 设计与实现流程在IC设计领域,设计流程有两层含义,一是指一般意义的设计流程,强调的是设计步骤和各个步骤的关系,但不具体确定各个步骤的所使用的EDA工具。二是具体的设计流程,例如某个公司的设计的特有设计流程,这种流程对EDA工具也有明确要求。图1-1 简化的设计流程图1-1是一般意义的简化设计流程。设计流程并不是直线进行的,往往需要多次迭代,主要是解决时序收敛问题。本文将前端
13、的前3个环节称为“设计”过程,而将以后的环节称为“实现”过程。(1) 编写设计规格书编写设计规格书(SPEC)是最重要设计环节,它实际上包含了系统级和架构级两部分设计内容。SPEC中包括电路功能定义,芯片制造工艺和标准单元库选择,对最高时钟频率、输入输出时序、功耗、面积等性能方面的要求,以及对工作电压范围、环境温度、静电防护(ESD)、可测性等方面的要求等。此外,电路的基本架构一般也要在这个阶段确定。SPRC就是技术文档,一般采用文字、框图、状态机、时序图等表示。大型的电路设计需要一个设计队伍来完成,在这个队伍中,每个人只负责一个环节或一个环节的一部分。SPEC是协调整个设计队伍的依据。(2)
14、编写RTL代码根据Specification,用硬件描述语言编写可综合的代码。工具:文本编辑器,如UltraEdit32,ActiveHDL等。(2) RTL仿真编写测试平台(TestBench),给出输入信号,验证RTL代码与SPEC的一致性。常用的工具有:Modelsim(Windows)、VCS(Unix,Linux)等。(3) 逻辑综合ASIC:利用综合工具将RTL代码转换为门级网表。门级网表中的基本元件包括触发器、逻辑门和缓冲器(Buffer)等称为cell,由流片厂家(Foundry)以库的方式提供,门级网表就是cell和连接关系的集合。常用综合工具是Synopsys的DC(Des
15、ign Compiler)。规模较大的设计需要考虑可测性设计(DFT,Design For Test)问题,低功耗设计需要进行功耗优化,如时钟门控、操作数隔离等,可使用Synopsys的Power Compiler进行功耗优化。(4)布线前的静态时序分析(STA)和门级仿真。静态时序分析是根据门延迟和设计约束,通过计算分析设计是否满足时序要求。主要工具是Synopsys的PT(PrimeTime)。门级仿真是用门级网表代替RTL代码,利用与RTL仿真相同的Testbench,重新进行功能验证。主要使用Synopsys的VCS。也可以使用Modelsim。布线前的静态时序分析和动态仿真中,cel
16、l的延迟是比较基本准确的,但时钟通常使用理想时钟,连线延迟不考虑。因此,在这个阶段,只能说明设计是有可能实现的,允许有一些时序上的violation存在,需要在提取布线信息后解决。(5) 布局布线根据门级网表和流片厂家的库文件,利用工具自动完成电路的版图设计并进行设计规则和电气规则校验。可以使用Synopsys的Astro或Cadence的Encounter进行版图设计。(6) 参数提取参数提取(extract)就是从版图中提取实际的延迟信息和各种寄生参数,可采用Synopsys的Star-rcxt提取。(7) 布线后的静态时序分析(STA)和门级仿真把从版图中提取实际的延迟信息假如到网表中,重新进行STA和