第3章 CHAPTER 3 数字集成电路设计 描述与仿真 目前集成电路大多都是SoC的设计,对SoC的设计大多采用自顶向下的设计方法,本章对设计方法中的各个层次进行简单介绍,同时介绍描述电路的几种常用方法。电路设计的正确与否是通过仿真完成的,早期的电路设计中,是通过在面包板或者电路板上对设计的电路进行调试来验证其功能,但随着电路规模的增大,再采用此方法显然是非常不现实的。幸运的是,随着EDA技术的发展,目前的集成电路设计可以采用各种软件在设计的不同阶段进行功能、时序等方面的仿真,从而快速及时地发现设计中出现的问题,对设计进行修改。本章后半部分即对仿真的一般概念、涉及的常用EDA软件进行介绍。最后还对业界广为采用的系统验证方法——UVM进行简单介绍。 3.1数字集成电路的设计描述 工艺的进步使得数字电路的设计进入数字系统级的设计,一个集成电路芯片上集成的电路规模也变得十分庞大,要保证制造的芯片能正确工作,最初的设计是很关键的。在数字系统集成电路设计中,需要完成两方面的任务: ①根据所要设计的电子系统硬件功能和行为描述出相应的电路结构; ②对得到的电路进行仿真,以验证所设计电路是否确实满足指标要求。 3.1.1数字集成电路的层次化设计及描述域 有效的设计方法是电路与系统设计成功的关键,而无论是自下向上的设计方法还是自顶向下的设计方法,均采用了层次化的设计思想,使得设计能力有了很大的提升。目前自顶向下的设计方法被广泛采用,这种设计方法其实是根据设计的抽象层次来划分的,也就是将一个复杂系统依次分解为复杂性较低的设计层次,使得最终实现系统的设计层次复杂性足够低。 1. 层次化设计方法定义 把完整的硬件设计划分为一些不同的设计层次,允许多个设计者同时设计一个硬件系统中的不同层次模块,其中每个设计者负责自己所承担的部分。层次化设计中对于每一层一般都可以在结构域或行为域中进行。 2. 集成电路硬件设计层次 图3.1给出了典型的自顶向下设计流程与抽象层次的关系。 图3.1自顶向下设计流程与抽象层次关系图 (1) 系统层: 是整个设计过程的第一步,也是最关键的一步。主要进行电路功能的定义、各种电学参数(如工作频率、功耗、工作温度等)的确定。这一层的设计好坏直接决定了整个集成电路性能的好坏、价格的高低、市场的占有率,更决定了后续设计阶段的难易程度及效率。 (2) 算法层: 主要进行算法设计及描述。首先根据系统的功能要求,制定可以实现此功能的不同算法,分析和比较这些算法的优缺点,选定一种最适合的; 其次,根据所选定的算法对整个系统进行功能划分及各个功能模块之间的数据流与控制流连接; 此外,时钟方案等对系统性能起关键作用的部分也在算法层实现。由此可见,算法层的设计对于整个系统的性能起着至关重要的作用。 (3) 寄存器传输层: RTL,主要将算法层用代码的形式进行抽象描述。在进行RTL层描述时,必须严格按照设计所使用的综合工具要求的规范进行,并尽可能地考虑时延、面积、测试等问题。 (4) 逻辑层: 将系统再进一步细化,转换为用普通的逻辑门来实现。对于当前的设计方法来讲,这一层次主要借助于综合工具来完成。 (5) 电路层: 将逻辑层中的门电路用具体的晶体管、电容、电阻等基本电子元器件来表示,并将之间的互连关系呈现出来。 (6) 版图层: 将各种电子元件用物理的方式呈现出来,根据所选工艺将这些元件转换成不同的几何图形,并相互连接。版图层的实现方式是系统最终的呈现方式,也是整个设计中最低的层次,并且仅仅是结构描述。 3. 集成电路描述域 层次化设计将整个设计划分为不同的抽象层次,而这些抽象层次又可以根据设计的表现形式不同分为几个不同的描述域,如表3.1所示。 表3.1集成电路设计的抽象层次与描述域关系表 抽 象 层 次行为域结构域物理域 系统层设计的功能和指标处理器、存储器等 算法层算法硬件模块框图 寄存器传输层传输方程、状态机等寄存器、ALU等宏单元 逻辑层布尔逻辑函数门级电路标准单元库 电路层网络方程晶体管级电路工艺层 版图层版图 行为域主要关注系统的功能实现,对系统的输入/输出关系进行描述; 结构域关注系统中每一抽象层次的实现方式,包含具体的逻辑和电路结构; 物理域则更加关注集成电路最终的呈现方式,以物理特性表征。 3.1.2集成电路设计的描述方式 设计描述是将所设计的电路以某种形式表达出来。整个集成电路的设计过程中主要包括系统设计、算法设计、逻辑设计、电路设计、版图设计等,这些设计过程所需要进行的设计描述有功能描述、逻辑描述、电路描述和版图描述等。这些描述均可以采用图形方式或者文字方式进行。 1. 图形描述方式 图形描述方式可以直观地描述一个设计的整体层次关系、主要输入/输出端口、关键信号的输入/输出关系等。根据设计过程中对应的层次不同,采用的具体图形方式也不一样。如采用方框图和原理图描述电路结构,而采用状态图、时序波形图描述电路的功能等。 图形描述直观易懂,在数字系统集成电路设计中是一种重要的设计手段。但在具体设计时,要受到特定的工艺库或者逻辑宏单元的限制,而且在电路规模很大时,用图形化描述方式也不方便易读,通用性和可移植性均差一些。 2. 文字描述方式 文字描述可以描述电路的结构,也可以描述电路的行为,特别适合描述复杂行为。采用的方式有自然语言描述、网表、硬件语言描述等,其中硬件描述语言(Hardware Description Language,HDL)采用最多。 HDL语言主要有VHDL和Verilog HDL两种,但因为Verilog HDL的语法结构与C语言类似,编程风格简洁、高效,更容易被设计者掌握,所以Verilog HDL(具体会在第6章详细介绍)成为业界目前最常用的设计语言。 用Verilog HDL描述电路行为通常有两种描述方式: ①算法式——通过定义硬件的输入激励/输出响应描述硬件的行为,与硬件实现无关; ②数据流式——采用与硬件物理实现相一致的数据流动方式描述硬件行为。一般认为,硬件行为的算法式描述是硬件的芯片级实现,数据流式硬件行为描述是硬件的寄存器级实现。(这里的实现是指硬件描述语言的实现,而非物理实现。) 【例3.1】设计一个半加器电路。 解: (1) 使用自然语言进行描述。 ① 端口定义: A、B为电路的输入端,Sum、Cout为电路的输出端。 ② 电路行为描述: 电路实现两个1位二进制数A和B的相加,产生和Sum,并向高位进位Cout。 (2) 使用框图进行描述,如图3.2所示。 (3) 使用逻辑电路图进行描述,如图3.3所示。 图3.2半加器的框图描述 图3.3半加器的逻辑图 (4) 使用波形图进行描述,如图3.4所示。 图3.4半加器的输出波形图 (5) 使用真值表进行描述,如表3.2所示。 表3.2半加器的真值表 ABSumCout 0000 0110 1010 1101 (6) 使用Verilog HDL进行描述。 module ha(A,B,Sum,Cout);//半加器模块名"ha" input A,B; output Sum,Cout; assign{Cout, Sum}=A+B; endmodule (7) 使用版图描述,如图3.5所示。 图3.5半加器的版图 3. 两种描述方式的应用特性 无论是文字描述方式还是图形描述方式,都有其优缺点,但这两种描述方式均可在上述提到的两种描述域——行为域和结构域中对电路进行描述。 在进行集成电路设计时,可以采用不同的描述方式,一般选择原则是: ①文字方式适合描述行为,特别是复杂行为; ②图形方式适合描述器件的内部互连关系,即描述结构; ③在进行大规模系统设计时,对于不同的设计层次,采用的描述方式往往不同,因此在整个设计过程中,文字描述方式和图形描述方式通常要交叉使用。 3.2集成电路逻辑仿真与时序分析 整个数字系统集成电路设计中,不仅需要根据电子系统硬件的功能和行为描述出相应的电路结构,而且还需要对所设计的电路进行仿真,以验证其是否满足设计指标要求。随着设计规模的增大,验证在整个产品开发中也越来越重要,已经占到整个开发时间的一半以上,有些复杂的设计甚至达到了80%。此外,电子产品的高速、低功耗特点也对产品的时序问题带来了严峻的考验,在制造前对设计进行良好的时序分析,也是保证产品成功的关键。 3.2.1集成电路设计验证 随着集成电路设计规模的扩大,单个芯片上包含的晶体管数越来越多,如华为麒麟9000芯片集成了153亿个晶体管,苹果的M2 Ultra芯片集成的管子数更是多达1340亿个。因此,设计验证的工作量已经超过设计本身,设计验证也因此成为设计中一个至关重要的步骤。 现在集成电路设计采用的是层次化的设计方法,从系统层到版图层是一个从抽象到具体的过程,下一层是在上一层次工作的基础上进行的,设计验证同样如此,验证当前对象的行为是为了查看是否与上一层次的设计一致。例如,验证设计的逻辑功能是否符合设计最初设定的设计规范; 在原理图设计和HDL设计后进行的功能原理仿真工作,主要是针对所设计硬件电路逻辑功能的验证; 对逻辑层的仿真验证是为了确保综合后生成的网表行为与RTL级模型一致等。 此外,随着工艺的进步,验证设计结果的时间是否符合原始设计的要求也越来越严格。这是因为深亚微米级以下工艺条件下,为了生产出更小尺寸的芯片,提高集成度,芯片内部连线的平均长度会增加,而连线本身会引起电容、电阻、电感等寄生参数效应。随着器件尺寸的缩小以及对电路高速低功耗的要求,连线的这些寄生效应成为影响整个设计性能(如速度、功耗和可靠性等)的关键因素。而对连线的延时分析跟连线的布局有很大关系,因此逻辑综合后的仿真和版图布局布线后的仿真工作,除了进一步验证所设计电路逻辑功能的完备性外,更重要的是对所设计电路的时序完备性进行验证。这与逻辑综合后对网表的仿真有区别,后者主要验证的是逻辑器件的门延迟对设计的影响。 对一个设计进行验证,往往做不到对这个设计的完整功能进行验证,因此有必要在验证时首先制定一个详细的验证标准,包括要验证的电路功能、电路本身要达到的设计要求、关键的输入/输出一致关系等。 验证常用的方法主要有3种: ①仿真(或称模拟)过程(Simulation/Emulation)。从电路描述(文字描述/图形描述)中提取模型; 再将外部激励信号/数据施加于此模型; 观察该模型的响应,判断电路系统是否实现预期功能。②规则检查(Design Rule Checking)。分析电路设计结果中各种数据是否符合设计规则(如ERC、DRC等)。③形式验证(Formal Verification)。分为两个方向: 等价性验证和模型验证,但无论哪个方向都基于严密的数字逻辑理论体系,都是用理论证明方法来验证设计结果的正确性。 1. 仿真(或称模拟)过程 这里的仿真(或称模拟)(Simulation/Emulation)主要是指常用的软件仿真。它是验证中最常用的方法,设计的层次不同,仿真的层次也不同,例如系统层仿真、电路层仿真、寄存器传输层仿真等。 软件仿真利用仿真工具(如ModelSim、NCVerilog、VCS等)对设计的行为进行模拟。一般来讲,所要验证的对象是设计本身(大多数情况下是Verilog代码),但随着设计规模的扩大、功能复杂性的增强,纯粹通过编写代码对设计进行验证的效率会很低,于是就出现了“验证方法学”。验证方法学是可以快速完整地建立验证环境,并且对不同设计可以重复使用的方法学,能显著提高验证效率。 关于验证方法学的研究早在2000年就开始进行,并有相关的产品。2003年,Synopsys 公司公布了可重用验证方法学库(Reference Verification Methodology,RVM),这个方法学采用了 Synopsys 公司的Vera 语言。2006 年,Mentor 公司公布了高级验证方法学(Advanced Verification Methodology,AVM)。这个方法学主要采用了OSCI SystemC 的事务抽象层方法学(Transaction Level Modeling,TLM)标准,它是用 SystemVerilog 和SystemC 两种语言实现的。2006 年,Synopsys 公司推出了验证方法学手册(Verification Methodology Manual,VMM),这是 RVM 从 Vera 语言过渡到 SystemVerilog 的方法学。2007 年,Cadence 公司推出通用的可重用验证方法学(Universal Reusable Methodology,URM),主要是eRM 从 E 语言过渡到SystemVerilog 的方法学,同时加入了 TLM接口、工厂模式替换、配置机制、策励类等。2008 年,Cadence 公司和 Mentor 公司共同推出了 OVM(Open Verification Methodology)。2010年,Accellera采用OVM 作为基础,推出了 UVM(Universal Verification Methodology),同时引入VMM 的 callbacks等概念。作为业界方法学的一个统一雏形。2010 年,Synopsys公司推出VMM 1.2,基本上沿用了 OVM 的 TLM 通信机制,并采用TLM 2.0(OSCI 最新的标准),采用 OVM 提出的 implicit phase,并且将验证流程继续细化,推出工厂模式替换机制,建立类层次(建立 parent 关系)。并且在此基础上,提出了vmm_timeline 的概念,方便各个 phase 之间实现跳转,增加 phase 或删除 phase,增加了 rtl_config 等概念。 2014年,Accellera又推出了UVM 1.2版本。目前,对SoC的验证普遍利用UVM验证平台进行。 2. 规则检查 规则检查(Design Rule Checking)主要检查电路设计结果中各种设计参数是否符合设计规则。主要包含DRC和ERC两种。 DRC是针对版图进行的,主要检查版图中各个掩膜层图形或不同的掩膜层图形之间的几何尺寸是否符合所选生产工艺的设计规则要求,这些设计规则主要包括版图几何图形的宽度、间距及层与层之间的相对位置(间隔和套准)等。DRC的目的是确保设计的版图能在特定的集成电路制造工艺下流片成功,并且具有较高的成品率。由于不同的集成电路工艺具有与之对应的设计规则,因此设计规则检查与集成电路的工艺有关。由于这个验证步骤的重要性,DRC是版图验证的必做步骤。ERC则是检查版图是否有违反电学规则的错误,如短路、开路和悬空的节点,以及与工艺有关的错误,如无效器件、不适当的注入类型、不适当的衬底偏置、不适当的电源、地连接和孤立的电节点等。完成ERC检查后,按照电位的不同来标记电节点和元器件,并且产生图示输出。 进行规则检查的主要工具有Cadence公司的Diva和Dracula(Cadence新版本中的工具名称为Assura),Synopsys的Hercules以及Mentor公司的Calibre工具等。Diva工具是一个集成在版图编辑器(常用的是Cadence公司的Virtuoso工具)内的交互式验证工具,嵌入在Cadence的主体框架中,用来寻找并改正违反设计规则的错误,包含检查物理设计、电学设计和进行电路图与版图的一致性检查等功能。Diva属于在线验证工具,在版图的设计过程中可以按照需要随时对版图进行设计规则的检查,方便及时发现错误并纠正。Dracula工具是一种离线式的验证工具,需要先将版图转换为GDS文件后才能进行,但它适用于从小单元到大规模的集成电路,而Diva一般用于小规模的电路设计中。Calibre工具是目前业界用得最多的深亚微米集成电路设计规则检查工具,其具有先进的分层次处理功能,支持平坦化和层次化的验证,大大提高了超大规模集成电路的验证速率。此外,Calibre工具还具有独特的验证结果视图环境(Results Viewing Environment,RVE)界面,将验证的结果反标到版图编辑器中,准确快捷,一目了然。 3. 形式验证 形式验证(Formal Verification)是基于理论分析将待验证电路的功能描述与参考设计进行对比,以判断是否达到了设计要求,因此形式验证不需要获得测试激励。此外,形式验证可以对待验证电路的所有可能情况进行分析验证,而利用测试激励对大规模电路进行验证时只是尽可能多地考虑所有的工作情况,因此形式验证能克服仿真验证不全面的缺点。此外,形式验证可以进行从系统级到门级的验证,而且验证时间短,有利于尽早、尽快地发现和改正电路设计中的错误,缩短设计周期。 形式验证分为两种类型: 等价性验证和模型验证。顾名思义,等价性验证是进行待验证电路与参考电路的一致性对比,它是目前在集成电路设计中经常用到的。整个电路的设计是分层进行的,在层和层的转化时都需要进行一系列的设计步骤,例如综合、布局布线、可测试性设计、时钟树的插入等,这些操作无疑都会对设计带来一些改变,利用等价性验证即可全面地检验变换前后的电路功能是否一致。等价性验证的原理是: 首先建立被比较的两种电路的模型,之后依据两个模型之间的关系,自动确定被比较的两个设计的等价性,而不需要用户的输入,这使得在因为某种原因只对设计局部进行修改而不做功能性改变时,可利用等价性验证,避免进行长时间仿真。 综上所述,可以看出规则验证属于物理范畴,而仿真过程和形式验证都是基于电路的功能进行的,两者存在很多不同之处,如表3.3所示。 表3.3仿真与形式验证的区别 比较项目仿真形 式 验 证 激励源需要激励源,且仿真效率受此影响只对电路描述本身进行分析,不需外加激励 实现路径通过信号在电路元件之间动态传播实现通过静态逻辑推理实现 错误分析不能直接指出电路是否有错误和错误位置,需用户自己分析仿真结果直接给出“正确”或“错误”结论 虽然形式验证在大规模电路验证方面存在很多优势,但最初的参考电路功能还是需要通过仿真来验证,即仿真是一切验证的基础,因此本书主要介绍仿真的一些基本知识,而对于形式验证,后面只给出一个简单的例子加以说明。 3.2.2集成电路设计验证中的逻辑仿真 早期的集成电路设计规模不大,对电路的验证主要通过硬件方式进行,即通过在电路板上构建验证系统进行调试验证。而随着集成电路设计规模的不断扩大,如果还采用类似的硬件仿真方式,肯定费时费力,甚至行不通。因此,目前集成电路设计领域中仿真的基本原理是在集成电路制造出来之前,利用计算机软件工具构造硬件模型,给定输入激励,模拟确定电路响应,验证硬件设计正确性的过程,如图3.6所示。 图3.6仿真路径图 对数字逻辑系统的仿真,一般称为“逻辑仿真”。图3.6表述的即是数字逻辑系统的仿真路径图。目前的数字逻辑系统设计一般都用Verilog HDL语言描述,对其仿真时所用的激励源(也称Testbench)一般也是Verilog HDL代码,对系统进行仿真时,利用软件将激励源施加到待验证对象上,结合不同设计层次的电路模型输出响应,最后对响应进行分析,来验证系统设计是否在功能和时序等方面符合预期的目标。 系统的设计遵循层次化的设计思想,同样,逻辑仿真根据不同的设计层次或仿真时器件的规模类型,按照由高级到低级又可分为不同的层次或级别,如功能块级仿真、逻辑门级仿真、开关级仿真等,如图3.7所示。 图3.7系统不同层次级示例 1. 功能块级仿真 功能块级仿真中把寄存器、运算/控制器件和总线等作为基本单元,主要检查数据在各个寄存器中的传输情况,因此也常常被称作“寄存器传输级仿真”。此时系统的行为通过在寄存器间的数据流来表征,并分析设计是否符合预期要求。 功能块级仿真的抽象级别高,分为基于事件的仿真、基于时钟周期的仿真和基于对象转换的仿真。 (1) 基于事件的仿真是把每次输入激励信号的变化都作为一个触发事件,根据这个触发事件来计算电路的运行结果。因为每一个信号变化就产生一个触发,因此在一个时钟周期内可以有多次的触发存在。基于事件的仿真不仅包含电路的功能模型,也包含时序模型,因此仿真的精度高。 (2) 基于时钟周期的仿真,是不论信号在整个时钟周期如何变化,对电路进行仿真时仅仅采集时钟上升沿或者下降沿到来时的信号值,也即在一个时钟周期内仅对电路进行一次计算处理。基于时钟的仿真加快了电路的仿真速度,但却降低了仿真的精度,且只适用于同步电路。 (3) 基于对象转换的仿真与基于事件的仿真不同,它不需要在输入端口加入激励源,而是将数据包、图形等对象作为仿真激励施加于待测对象中。基于对象转换的仿真提高了测试激励的抽象层次,因此提高了仿真效率,适用于大规模的集成电路。 2. 逻辑门级仿真 逻辑门级仿真中把各种逻辑门、触发器和计数器等作为基本单元,主要检查逻辑设计的正确性和硬件有无竞争冒险等问题。此时,连接系统电路中这些基本单元的信号线用逻辑值0,1,x表示,通过在电路的输入端口中加载激励,在输出端观察响应来分析判断设计的功能和时序是否正确。 逻辑门仿真不仅可以用以验证电路的功能,而且更重要的是在仿真时,逻辑门单元的延迟信息会被调用,以此来验证电路的时序。对设计进行综合后所产生的门级网表进行仿真即属于逻辑门仿真。 3. 开关级仿真 开关级仿真中把每个晶体管看作一个独立的开关,此时整个系统电路看作由若干晶体管组成的结构,模拟硬件中信号强度对逻辑设计的影响。开关级仿真的精度最高,仿真时的计算量也最大。 开关级仿真中电路看作由晶体管和节点所组成的,根据电路的连接关系验证电路的逻辑功能,并且计算每个节点的逻辑值及其延迟时间。开关级仿真比逻辑门级仿真的时序更精确。 3.2.3集成电路设计中的时序分析 目前集成电路设计中对性能的要求越来越高,相应地对于时序的要求也越来越高。因此目前时序分析已经独立于功能仿真,成为设计流程中一个不可缺少的非常重要的环节。 对电路进行时序仿真最传统的方法是对逻辑综合后的网表或者布局布线后的版图中所产生的网表施加相应的测试激励,模拟电路的工作环境,对电路进行再次仿真,即所谓的“动态时序仿真”。动态时序仿真需要对电路施加特定的测试激励来验证设计,是将功能仿真和时序仿真同时进行,因此动态时序仿真对于电路的时序分析结果较精确。原理上这种方法是没有问题的,但随着集成电路设计规模的增大,创建用以验证电路的时序测试矢量和功能测试矢量工作量都很巨大,因此采用传统的动态时序仿真方法会非常耗时。而且因为测试矢量未必对所有的时序路径都敏感,因此基本也不可能开发出完备的测试矢量既找出所有潜在的故障,又同时找出时序上的关键路径。以上原因促进了时序分析技术向静态时序分析技术的发展。 静态时序分析(Static Timing Analysis,STA)是基于路径对设计进行时序分析,其在整个设计流程中的位置如图3.8所示。在设计进行综合得出网表后,其根据电路网表的拓扑将设计分成若干路径的集合,通过计算每一条路径上的延迟(如建立时间、保持时间等)对电路的时序进行判断,以衡量电路的性能。由此可以看出,静态时序分析是不需要外加测试激励的,因此运行速度快,占用的内存也小。 图3.8静态时序分析在设计流程中的位置 同时,静态时序分析可以对电路中的所有路径都计算得出相应的时序信息,也即是穷尽所有的路径,理论上可以达到测试路径的100%覆盖率,因此比动态时序仿真的完备性强。但静态时序分析也存在着缺点,主要有: ①不能同时进行功能仿真; ②仅适用于同步时序电路。因此静态时序仿真和功能仿真验证是相辅相成的,为保证设计的正确性,同时进行这两方面的验证是必不可少的。常用的静态时序分析工具是Synopsys公司的PrimeTime工具。 1. 静态时序分析的基本原理 静态时序分析是基于路径的,路径的构成要素主要是组成电路的所有时序单元、门级单元等,因此STA主要是针对门级网表进行的。 静态时序分析是将整个设计分解为不同时序路径的集合,每条路径都有一个起点和一个终点。时序路径的起点只能是设计的基本输入端口或内部时序单元,如寄存器、锁存器的时钟输入端; 时序路径的终点则只能是内部时序单元的数据输入端或设计的基本输出端。图3.9中用箭头标出了4条时序路径,分别代表了以下4类。 (1) 路径1: 基本输入端口到时序单元的数据输入端。 (2) 路径2: 内部时序单元时钟输入端到下一个内部时序单元数据输入端口。 (3) 路径3: 内部时序单元的时钟输入端到基本输出端口。 (4) 路径4: 基本输入端口到基本输出端口。 图3.9静态时序分析过程中定义的时序路径 静态时序分析的一个重要目的是发现使芯片时序失效和对芯片性能起决定作用的电路关键路径,保证以上所有的路径都满足内部时序单元对建立时间和保持时间的要求。它采用穷尽分析方法,提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。在工作过程中,静态时序分析的内容包含以下3个步骤。 (1) 按照前面所述的路径分类,把设计分成不同的时序路径集合。如图3.10所示给出了一个时序路径分割的示例,其把12条时序路径分成了3种不同的路径组合。其中Clock Group 1对应前述的路径1(基本输入端口到时序单元的数据输入端),Clock Group 2对应前述的路径2(内部时序单元时钟输入端到下一个内部时序单元数据输入端),Default Group对应前述的路径3(内部时序单元的时钟输入端到基本输出端口)。 图3.10时序路径分割示例 (2) 计算每条路径的延时信息,为后续的路径延时检查做准备。 (3) 检查所有路径的延时,分析时序约束是否可以满足设计要求。静态时序分析所要做的主要检查包括以下内容: 建立时间和保持时间检查、门控时钟检查、数据恢复和数据移除检查、时钟脉冲宽度检查。 这些检查大致可以分为3类: 对时序单元的检查、对时钟的检查、对组合逻辑的检查。在这些检查中,大部分都比较易于理解,下面先介绍几个基本概念,再着重分析一些基本的时序路径约束检查。 信号的到达时间(Arrival Time,AT): 表示实际计算得到的信号到达逻辑电路中某一时序路径终点的绝对时间之和。它等于信号到达某条路径起点的时间加上信号在该条路径上的逻辑单元间传递延时的总和。 要求到达时间(Required Arrival Time,RAT): 表示电路正常工作的时序约束要求信号到达逻辑电路某一时序路径终点处的绝对时间。 时间余量(Slack): 表示在逻辑电路的某一时序路径终点处,要求到达时间与实际到达时间之间的差,Slack的值表示该信号到达得太早或太晚。 ① 寄存器的建立和保持时间检查。 STA对寄存器建立时间检查的目的是确保数据在时钟的有效沿之前到来,如图3.11所示,数据到达时间不能太晚,它必须满足: 数据到来的最晚时间小于等于时钟有效沿最早到来的时间减去寄存器固有的建立时间。根据上面这个条件,可以得到时序路径时间余量的计算公式: Slack=RAT-AT=(时钟有效沿最早到来的时间-寄存器固有的建立时间)- 数据到达的最大延迟时间 STA对寄存器保持时间的检查,其目的是保证数据在时钟的有效沿后能够稳定并保持足够长的时间以使时钟能够正确地采样到数据。如图3.11所示,这主要是保证数据不会到达太早,数据到来的最早时间大于等于时钟有效沿最迟到来时间加上寄存器固有的保持时间。由上面这个条件可以得到保持时间余量的计算公式: Slack=AT-RAT=数据到达的最早时间-(时钟有效沿到达的最晚时间+ 寄存器固有的保持时间) 图3.11建立保持时间检查示意图 如果两个Slack中任何一个为负,就说明建立时间或保持时间不满足设计要求,要对约束条件进行改进: 如果出现了建立时间不满足的问题,可以加快数据传送或是延迟时钟到来; 如果出现保持时间不满足的问题,则需要加快时钟或是延迟数据。 ② 同步时序电路周期检查。 同步时序电路中的各种操作都要受到时钟信号的控制,设计者既要保证电路工作频率尽可能高,又要保证电路在特定情况下工作可靠。图3.11也代表一个基本时序电路,参数如下: tcq,tcqmin分别是寄存器FF1和FF2最大和最小传输延时; tsu,thold分别是寄存器FF1和FF2的建立时间和保持时间; tcom,tcommin分别是组合逻辑的最大和最小延时。 在理想的情况下,时钟相位没有偏移,为了保证电路的正常工作,必须保证数据在一个时钟沿触发,经过FF1和组合逻辑的延时,在下一个时钟触发沿前到达FF2,并且保证FF2有足够的建立时间。对时钟周期的约束公式为 T>tcq+tcom+tsu 同时,FF2寄存器采样数据还要求数据有足够的保持时间,也就是FF2要求的保持时间要小于FF1和组合逻辑的最小延时,约束公式为 thold