1、高级ASIC芯片综合 高级ASIC芯片综合 翻译者:阿信 使用Synopsys公司的 Design Compiler Physical Compiler 和PrimeTime 第二版目录写在前面前言前言事实证明,相对于集成电路IC设计规模半导体产业是相对?。作为一个团体,80年代中期,每个芯片集成了大约1000个晶体管,我们称之为大规模集成电路(LSI),仅仅在大约两年后,每个芯片的晶体管集成数量就达到了1万10万个,我们所用的术语也迅速的变成了甚大规模集成电路(VLSI)。Preface 前言这本书的第二版描述了一些使用Synopsys公司的一套工具在ASIC芯片设计中的高级概念和技术,包括
2、ASIC芯片综合,物理综合,形式验证和静态时序分析等。另外,对ASIC的整个设计流程和沈亚微米(Very-Deep-Sub-Micron)设计技术作了详细的介绍。这本书的重点是在Synopsys 工具的实时使用上,用工具去解决在深亚微米尺寸领域的各种问题。将展示给读者解决在亚微米ASIC设计复杂问题的有效设计方法。重点就在HDL的编码风格,综合和优化,动态仿真,形式验证,可测性设计DFT扫描链的插入,版图设计的连接,物理综合和静态时序分析。在每一步,确定设计流程中每一段的问题,问题的解决方法并围绕此问题展开详细的论述。另外,关于版图设计的关键问题,比如时钟的综合和最后的集成也作了较长篇幅的讨论
3、。最后,这本书深入的讨论了基本的Synopsys技术库和编码风格,综合优化技术。 这本书的读者对象是刚刚工作的ASIC设计工程师和学习过ASIC大规模集成电路设计与可测性设计课程的高年级学生。这本书并不是想取代Synopsys的参考手册,而是为任何参与ASIC设计的人员而写。同时,这本书对那些没有版图能力或者自己有技术库但是需要其他公司来做后端集成和最终制造器件的计者(和公设司)都是很有用。因为到深亚微米技术会遇到各种各样的问题,本书提供了可选择的;这本书同时也介绍了设计人员对不同EDA工具商提供的各种工具时所面临常见问题的解决方法。这本书中的所有Design Compiler命令都更新为Tc
4、l版本的命令。为了尽量反映最新版(2000.11SP1)的Synopsys的这套工具,这些命令都作了及时的更新。各章概要 第一章简要介绍了用Synopsys 工具设计ASIC流程时各种不同平台。这个设计流程在此作了精简的描述,从概念到流片。这一章对那些想学习ASIC设计的整个流程但还没有钻研过芯片设计到集成的整个流程的设计者是非常有用的。第二章论述了第一章中描述的ASIC设计流程中的实践方面的问题。初学者可以把这一章作为指导手册。有使用Synopsys工具经验的设计者可以把这一章作为有益的参考。没有使用Synopsys工具作综合经验的读者可以先跳过本章,在读完后续章节后再读这一章。综合的基本概
5、念在第三章有详细的解释。这些综合术语的概念贯穿到后面的所有章节。读者将会发现这些信息非常有用,可以对这些工具及工具的使用环境有一个基本的理解。第四章对Synopsys技术库做了基本的讲述。设计这常常对技术库的技术细节不够了解,同时这些库包含了各种具有不同驱动能力的库单元。然而,一个拥有丰富单元的库往往决定了综合的最终质量。因此,这一章就从设计者的角度来讲述Synopsys技术库。集中讲述延迟的计算方法和其他技术,这些技术主要用来改变技术库的行为,提高综合的质量。合适的功能划分和好的编码风格是获得好的输出结果的必然要求。第5章讲述了各种技术来指导读者该怎样做合适的功能划分来达到预期的优化目标。另
6、外,这一章也讲述了HDL的编码风格,并举出多个附有点评的例子来引导读者编写出逻辑速度更快面积更小的设计。Design Compiler综合和优化所使用的命令在第6章作了描述。这一章包含了对Synopsys工具的初学者和有经验的人员都非常有用的信息。这一章注重实际应用。这一章列举了数个例子来指导读者对这些命令的使用。 第7章讨论了为满足时许和面积要求的优化技术。在老版本的DC和新版本的DC都有讲述,重点是新版本。重点讲述了Design Compiler 中采用的新的优化技术“TNS”。同时对各种逻辑优化技术也作了详细介绍。另外,对不同编译策略的优点和缺点也给出了详细的讨论。可测性(DFT Des
7、ign For Test)设计技术越来越成为ASIC设计工程师考虑的一大要素。第8章对当今设计界所使用的各种DFT技术作精简的描述,随后对使用Synopsys的Test Compiler 工具作器件的扫描插入给出了详细介绍。介绍了Design Compiler做扫描链插入的命令。介绍一些指导方针来处理DFT设计的中的各种问题。第9章介绍了Design Compiler与后端版图的连接特性,描述了前端和后端工具的接口。同时,这一章介绍了设计中版图优化的一些策略。这包括in-place和location优化技术。更进步,列出一节专门讨论时钟树的插入和时钟树的转移的相关问题。这一章对那些不打算自己做
8、版图而希望学习布局布线过程和整个芯片集成技术的设计者或公司都是极其有用的。物理综合技术的引入,迅速的改变了传统的综合方法。第10章详细描述了物理综合技术。这一章描述了各种得到优化结果的物理综合方法。为了理解物理综合的流程,建议读者先去读一些好传统设计流程相关的章节(尤其是第9章),然后再来读这一章。将这一章讲述的流程和传统的流程做一个比较学习。为了使用这个新的工具,本章列出了一些脚本的例子来说明使用方法。第11章的标题是 SDF(标准延时文件)文件的产生:为了做动态时许仿真,这一章描述了用Design Compiler 或 PrimeTime产生SDF文的过程。有一节讲述SDF文件的语法格式,
9、接下来详细讨论在版图前和版图后的SDF文件的产生过程。另外,为了更好的帮助设计人员获得成功的仿真,这章还给出了一些新的思想和建议。这一章对那些做动态仿真和形式验证来验证设计功能的设计者非常有用。第12章给读者介绍了用PrimeTime做静态时序分析的基本知识。这包括其中一节讲述了使用PrimeTime的Tcl语言。同时描述了用PrimeTime完成静态时序分析的一些命令,这些命令对设计人员找出设计中可能存在的违反时序的错误也是很有帮助的。设计出可靠工作的芯片的关键一步就是对特定的设计能够成功的做完静态时序分析。这种能力使得静态时序分析成了整个设计流程中最重要的一步而且成为很多设计者公认的判断A
10、SIC销售商的标准。第13章主要讲述了用PrimeTime做静态时序分析的一些基本的高级的论题。这一章很有效的说明了在整个设计流程中版图前和版图后PrimeTime的使用。另外,列举了许多例子来说明在各种假定情况下的报告和建议设置分析。这一章对那些想从传统的动态仿真分析法向静态分析法设计转移的设计者非常有用。对那些想用PrimeTime对设计做更深入的分析的读者也很有帮助。这本书中用到的一些约定 所用Synopsys的命令都是用Ariel字体打印的。这包括所有例子中的综合脚本和时序分析脚本。命令行的提示符使用Courier New字体打印的。例如:dc_shell 和 pt_shell 一些命
11、令中使用的选择值都用三角括号括起来了。总之,这些值在命令使用之前必须被具体的取值替换掉。例如:set_false_path from -to 反斜杠“”表示本行写不完下一行继续,而竖杠“|”字符表示“或”的关系。 例如:compile map_effort low | medium | high -incremental-mapping无论那里,关键字都是斜体的(italicized)。需要强调的主要论题或观点都用下划线或粗体字表示。致谢没翻译关于作者Himanshu Bhatnagar 是位于美国加利佛尼亚州新口海滩Conextant Systems公司ASIC设计小组的领导者。该公司是世界
12、上最大的专注于电子通信半导体产品的供应商。作者利用最新的高性能的Synopsys公司和其他公司的EDA工具来研究下一代的ASIC设计流程和设计方法学。 加入Conexant公司之前,作者在新加坡的特许微电子公司和位于法国格勒诺布尔市的公司总部工作。他在英国威尔士Swansea大学完成了他的电子与计算机科学学士学位,在美国的Clemson大学完成了大规模集成电路设计的硕士学位。 1ASIC设计方法学随着深亚微米半导体器件尺寸的缩小,传统的设计方法变得越来越困难。除此之外,在同一个晶元中集成了越来越多的晶体管,这使得设计功能的验证非常困难,甚至不能确认设计的功能正确与否。另外,在关键的产品上市时间
13、的压力下设计周期没有变化,或者被持续的缩短了。为了解决这些问题,发展了新的设计方法和设计工具,使ASIC设计方法容易使用。这一章的主要作用就是带领读者认识在亚微米领域芯片设计的不同阶段。同时对改进设计流程的一些技术也作了介绍。 从这本书的上一版开始,Synopsys公司又介绍了另外一个叫做物理综合(Physical Compiler)的工具。在这个工具中,综合和布局的处理更加紧密。因此,相对传统的设计流程有了很大的改变。这一章向读者强调了这些新技术的重要性,解释了为什么这些新技术在整个设计流程中达到设计最优化的必须性和这些新技术怎样缩短整个设计周期。因为这个工具对IC设计界来说还是陌生的,到现
14、在为止,还没有100%的融入到设计界,所以对传统的设计流程和新的设计流程都作了讨论。 这一章主要在ASIC设计流程的基础上讲述整个综合过程,从RTL级代码到最后的流片。讨论了传统设计流程和物理综合流程。1.1 传统的设计流程下面讲述传统的ASIC设计流程包含的步骤。流程图1-1说明了整个设计流程,下面加以讲述。以后的章节将更加详细的讲述和综合有关的话题。1. 结构和电气规范。2. RTL级的HDL编码。3. 为包含存储元件的设计做可测性DFT和存储自测试BIST的插入。4. 为了确保设计功能正确,做全面的动态仿真。5. 设计环境的设定。这包括技术库的使用和其他和环境有关的属性设置。6. 使用D
15、esign Compiler对设计进行扫描链插入(可选择JTAG),设计约束和综合。7. 使用Design Compiler自带的静态时序分析工具对设计做模块级的静态时序分析。8. 使用Formality工具对设计进行形式验证,比较RTL和综合后的网表。9. 使用PrimeTime工具对整个设计进行版图前的静态时序分析。10. 使用版图实现工具对提取的时序约束进行反标。11. 在时序驱动下进行初步的单元布局,时钟树的插入和全局布线。12. 把时钟树转化为DesignCompiler内部的原始设计网表。13. 用DesignCompiler对设计进行局部优化。14. 使用Formality工具对
16、设计在综合后的网表和插入时钟树的网表进行形式验证。图1-1 传统ASIC设计流程15. 在做过全局布线后(图中第11步)的版图中提取估计延时信息。16. 把从全局布线后的设计中提取的估计时间数据反标给PrimeTime。17. 在PrimeTime中使用从全局布线后提取的估计延时信息对设计进行静态时序分析。18. 对设计进行局部的布线。19. 对局部布线后的设计进行延时信息的提取。20. 把上一步提取的延时信息反标到PrimeTime中。21. 使用PrimeTime对版图后的设计进行静态时序分析。22. 使用版图后的延时信息对版图后的设计进行门级的功能仿真。(如果有要求)23. 电气规则(L
17、VS)和设计规则(DRC)检查通过后的流片。图1-1,说明了上面讨论的典型ASIC设计流程。STA和CT是英文的首字母缩写,分别表示静态时序分析和时钟树,DC表示DesignCompiler。1.1.1 规范和RTL编码芯片的设计概念来自于市场的需求想法。然后把这些想法转化为设计的体系结构规范和电气规范。体系结构规范定义设计的功能,把芯片划分成几个容易实现的模块;而电气规范则定义各个模块之间的时序关系。芯片设计的下一个阶段就是怎样实现这些规范。在过去是在单元库找出有用的器件,然后手工画电路图的方式来实现的。这种方式既耗时又无法实现设计的重复利用。为了解决这个问题,开发出了硬件描述语言(HDL)
18、。顾名思义,设计的功能是用HDL编码来表达的。当今主要有两种硬件描述语言,Verilog和HDL。两者都可以表达相同的功能,各有它们的优缺点。用硬件描述语言可以对设计进行三个等级的抽象描述;行为级,RTL(Register Transfer Level)级和结构级。行为级代码是更高级别的抽象,主要用于把体系结构规范翻译成代码进行功能仿真。行为级代码刚开始是为了完成对设计实现的正确性和可行性分析。相反,RTL级代码用来描述和推断设计的元件结构及内部连接关系。这种类别的代码是用于描述设计的功能并能综合生成网表。这个网表由目标库中的元件和它们各自的连接关系组成;非常类似于手工画的电路图。 一个设计用
19、RTL级的语言格式编码,用Verilog或VHDL,或两者的混合。如果有必要,也可以分割成几个小一些的模块来形成层次化的结构,使用一个顶层模块来连接所以低一级的模块。 Synopsys公司最近推出了行为级综合器Behavior Compiler,能够对行为级的代码进行综合。这是以后讨论的主要话题和这本书不相关,这本书只讲述RTL级相关的综合问题。1.1.2 动态仿真第二步是通过对RTL级代码的动态仿真来检查设计的功能。所以当前可以用的仿真器都具有仿真行为级和RTL级代码的功能。另外,这些工具也可以用于仿真映射后的门级设计。图 1-2 说明了使用test bench来准备仿真一个分模块的设计。这
20、个 test bench 通常是用行为级硬件描述语言描述而设计通常是描述为RTL级的代码。通常,仿真器是和描述语言紧密相关的(要么支持 Verilog要么支持VHDL),虽然市场上有几个可以支持两种语言的仿真器。图 1-2 层次化设计例子Test bench的主要功能是给设计提供必要的输入激励。所完成的测试情况和test bench的质量决定了设计测试的覆盖率,明白这一点是很重要的。这就是为什么一个全面的测试程序对设计是至关重要的。在对RTL级代码进行仿真时,元件(或逻辑门)的延时是不考虑的。因此,为了减少在RTL级仿真和后面的综合后的门级仿真的差别,在编RTL级源代码时,通常时序模块中加入延
21、时信息。1.1.3 约束,综合和扫描链插入 在很长一段时间里,硬件描述语言是用来做设计的逻辑验证的。设计者把硬件描述语言手工翻译成电路,并画出各个元件之间的连线来产生门级的网表。随着功能强大的综合工具的出现,这种手工作业的方式逐渐的被淘汰。综合工具取代了手工综合,能够更快的完成从RTL级的描述到门级网表的转化任务。这个处理过程就是所谓的综合。Synopsys公司的综合工具Design Compiler(以后简称DC)是事实上的标准综合工具且到现在为止也是在ASIC设计行业里最流行的综合工具。一个设计的综合是需要反复多次的过程,首先需要定义每个模块的时序约束。这些时序约束定义了相应模块的每个信号
22、相对于时钟输入的关系。除了时序约束之外,还需要一个定义综合环境的文件。这个环境文件指定了DC在综合过程中所用到的工艺库和其他的相关信息。DC读入设计的RTL级代码并利用时序约束文件把代码综合到结构级,然后产生对应的门级网表。这个概念可以从图1-3来理解。图 1-3 DC的输入和输出对一个设计的较小的模块,通常使用DC内部自带的静态时序分析工具来静态时序分析并生成报告。DC 会尽量优化设计,使之能满足指定的时序约束。 如果时序要求没有满足,则需要进一步的优化。现在大多数的设计中都会包含可测性设计(DFT)逻辑,用于芯片生产出来后的功能测试。DFT由自测(BIST)存储逻辑,扫描逻辑和边界扫描逻辑
23、(JTAG)等逻辑电路组成。这些逻辑电路和自测(BIST)存储逻辑是由控制逻辑的可综合代码组成的,它们在综合之前就要加入到设计中。市场上有不少用于产生BIST控制器和编辑逻辑的工具。不幸的是,Synopsys公司没有提供具有此类功能的工具。扫描链的插入也许可以使用DC的准备测试编译特性来完成。这个处理过程把设计的RTL级代码在链接成扫描链之前直接映射成扫描寄存器。利用这个特性的一个优点是它能够使DC在综合时计算扫描寄存器的时间。这个技术是非常重要的,因为相对于那些没有插入扫描链同样的设计,它们具有不同的延迟时间。JTAG或边界扫描主要用于测试电路板的连接情况,而不用把芯片从板子上拔掉。JTAG
24、控制器和边界逻辑也可以直接由DC来产生。1.1.4 形式验证 形式验证的在ASIC设计行业还是相当的概念。形式验证利用数学方法来确定设计的功能,不需要工艺库的支持,例如时序和物理效应。形式验证把设计和参考设计相比较来确认设计的功能。很多EDA供应商已经开发出了形式验证工具。然而,就在最近,Synopsys公司的形式验证工具Formality也推上了市场。形式验证和动态仿真的主要区别是前者通过比较两个设计在结构和功能上的等价性来验证设计。动态仿真只能够验证被激活路径的功能,因此就可能在没有测试到的地方出现问题。另外,和动态仿真所花的时间相比,形式验证的所用时间非常的少。在设计流程中,形式验证的目
25、的就是比较设计的功能是否相等。比较可以是RTL级代码和RTL级代码, 门级网表和RTL级代码,或门级网表和门级网表。RTL级代码和RTL级代码的验证是用于确保新的RTL级代码和原来的RTL级代码的功能一致。这经常会发生在设计这为增加功能而反复修改设计时。当源代码增加了新的功能特性时,就会原来的代码的正确功能带来潜在的风险。为了消除这风险,就可以在新的代码和原来代码之间做形式验证。RTL级代码和门级网表之间的形式验证是用于确保用DC综合后的设计依然是正确的。虽然RTL级代码的动态仿真后是 功能正确的,当是对设计的形式验证确保了在对设计插入扫描链综合后的功能和RTL级代码功能是一致的,即综合后的网
26、表具有相同的功能。在综合后的情况下,如果我们用动态仿真的方法来验证门级网表的正确性,那么将会耗费很长的时间(根据设计的大小,可能花几天或几周的时间)来验证设计。相比而言,形势验证方法仅仅需要几个小时来做相似的验证。最后一部验证是在门级网表和门级网表之间。 这也是整个验证过程中非常重要的一步,这一步主要用来验证在修改后的版图和原来版图之间的功能一致性。版图后的一个很明显的改变就是时钟树网表(一层的或者有层次的)的插入。这就意味着原来传给版图工具的网表被修改了。形式验证就是就被用于验证修改后的网表和原来网表的逻辑等价性。1.1.5 用Prime Time做静态时序分析前面曾提到过用DC对设计做模块
27、级的静态时序分析。虽然芯片级的静态时序分析也可以使用上述方法,但最好还是用PrimeTime。PrimeTime是Synopsys公司的专门做静态时序分析的工具,能够在芯片级完成快速的静态时序分析。它提供了Tcl(工具语言)接口,这样能够为设计的分析和消除错误提供非常强大的操作环境。静态时序分析在某种程度上是整个ASIC设计流程中最重要的一步。静态时序分析可以让使用者对所有的关键路径进行分析,然后把分析很有条理的报告给设计者。另外,这个分析报告还包含其它一个有利于消除错误的信息,例如每条连线的扇出和负载电容。静态时序分析在门级网表生成版图前和版图后都要做。在版图前,即在门级网表这一级,Prim
28、eTime使用工艺库中指定的线负载模型来估计连线延时。在此过程中,以前用于DC做时序分析的时许约束文件也同样适用于PrimeTime,这些时序约束文件指定了主要输入输出信号好时钟信号的关系。如果时序约束对所有的关键路径都是可以接受的,那么就可以用PrimeTime或者是DC导出一个约束文件,把这个约束文件反标给前面的布局布线工具。这个约束文件是SDF格式,它指定了设计中各个逻辑模块之间的时许关系,布局布线工具就利用这些时序信息来完成时间驱动的单元布局。在版图级的静态时序分析,提取出的延时信息更贴近实际,这些延时信息返回给PrimeTime做较真实的延时计算。这些延时由连线电容和内部RC(电阻和
29、电容)组成。和综合类似,静态时序分析也是一个需要不断反复的过程。它和芯片的布局布线紧密相连。通常为了满足时序要求,这个过程序要反复多次。1.1.6 布局,布线和验证顾名思义,规划(layout)工具完成设计的布局和布线。这一步可以有很多方法来完成。然而,这一节仅仅讨论和综合相关的问题。预布局和布局的质量比实际的布线要重要的多。理想的标准单元的布局不仅可以提高布线的速度,而且可以提高设计的时序,减少时序冲突。就像前面解释过的一样,约束文件用于时序驱动的布局。时序驱动的布局方法迫使布局布线工具按照单元之间的时序违反的危险程度来决定单元的放置位置。把标准单元布局好之后,就利用布局布线工具在设计中插入
30、时钟树。时钟树的插入是可选择的,主要依赖设计者的喜好。设计这可以使用更传统的时钟布线方法,例如,使用鱼骨结构的时钟树,这样可以减少总的延时和时钟抖动。随着工艺尺寸的缩减,鱼骨结构的时钟树已经很难达到设计要求,因为随着工艺尺寸的缩减,内部连线之间的电阻就会增加,因此增加了RC延迟。因此这一节的内容(和整本书的内容)主要放在了时钟树的综合方法上。在这一阶段,为了完成时钟树的插入,还有一步是必须做的。前面也提到过,布局布线工具在完成单元布局以后把时钟树插入设计中。因此,原来由DC(或其它用于布局布线)产生的网表文件是没有时钟树信息(本质上是整个时钟树网络,包括缓冲和连线)的。因此,时钟树必须插入原来
31、的网表并做形式验证。一些布局布线工具直接为DC提供完成时钟树插入的接口。第9章对此介绍了一些传统和非传统的方法来完成这几个步骤。为了简单起见,我们假设原来的网表文件中都已经完成了时钟树的插入。总体而言,布局布线工具完成布线工具分成两个阶段-全局布线和局部布线。在布局之后,对设计进行一次全局布线来判断布局的质量并提供近似于版图(在局部布线之后)之后的实际延时的估计延时。如果单元布局不够合理,则全局布线就会花相对于单元布局时间更长的时间来完成。糟糕的布局还会影响整个设计的时间。因此,为了减少综合和布局布线之间的反复和提高布局质量,在全局布线之后就会提取延时信息来指导布局和布线。虽然这些延时信息还没
32、有局部布线之后提取的延时信息准确,但是这些信息的确提供了比较理想的布线延时信息。这些延时信息反标给PrimeTime来做静态时序分析,并且只有认为时序信息满足要求以后,才允许继续下一步骤。局部布线是布局布线工具需要完成的最后一步动作。在局部布线完成后,就会提取芯片的实际延时信息,然后把这些信息加入到PrimeTime中,来做静态时序分析。这些步骤之间是需要反复多次的,反复的次数主要依赖于设计的时间余量的要求。如果设计不满足时序要求,在执行下一次反复之前就要做布局布线的优化。如果设计通过了静态时序分析,那么就要准备做流片之前的版图规则LVS(版图与电路图)和设计规则DRC(设计规则检查)检查。1.1.7 工程改变顺序 这一步骤是正常设计流程中的一个例外,请不要和通常设计中的环节相混淆。因此,这一步骤也不会在以后的章节中讨论到。很多设计人员把ECO认为是ASIC设计流程中最后一步时,由工程需要而
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1