整个数字电路的高阶设计概念,可以说就是设计自动化的实现。在高阶设计的领域中,硬件描述语言HDL扮演的角色,只是一种程序语言接口(PLI),它提供了一个极具弹性的设计入口,以作为电路设计者与各种计算机辅助设计工具之间沟通的桥梁。因此,若缺少了这些EDA工具,硬件描述语言的剩余价值也只不过是一种系统规划工具,或是技术文件格式而已。
理想的情况是:由仿真验证设计是否符合原始设定的规格(Specification),以至于诸如逻辑电路的合成与实际晶体管配置与绕线(Place and Route)这类徒手不易掌控的工作,工程师均能寻求适当的EDA工具来完成整个电路的设计。完整的自动化数字电路设计流程包含了三种主要的EDA工具:仿真器(Simulator)、综合器(Synthesizer)以及配置与绕线(Place and Routing,P&R)工具。除P&R工具外,其余两者绝大部分均以VHDL或Verilog HDL作为其程序语言接口。配合介绍典型的自动化设计流程,简述各项EDA工具的基本功用。
1)系统规格制定 ( Define Specification ) 在系统设计之初,工程师们需根据产品的应用场合,为ASIC设定一些诸如功能、操作速度、接口规格、环境温度及消耗功率等规格,以作为将来电路设计时的依据。在这方面,目前已有厂商提供系统级仿真器(System-Level Simulator),为系统设计提供不错的解决方案。通过此类仿真器,工程师们可以预估系统的执行效果,决定软件模块及硬件模块该如何划分。除此之外,还可以进一步规划哪些功能该整合于ASIC内,哪些功能可以设计在电路板上,以符合最大的经济效能比。
2)设计描述 ( Design Description ) 一旦规格制定完成,便依据功能(Function)或其他相关要求,将ASIC划分为数个模块(Module)。此阶段是整个设计过程中最重要的关键之一,它直接影响了ASIC内部的架构及各模块间互动的信号,更间接影响到后续电路合成的效能及未来产品的可靠性。
决定模块划分后,便分别交给设计团队的各个工程师,以VHDL或Verilog等硬件描述语言进行设计,也就是功能的行为描述(Behavioral Description)。为了明确及有效地描述模块的内部功能,各模块之下可能再细分成数个子模块(Sub-Module),直到能以可合成(Synthesizible)的语法描述为止。这种层层分割模块的设计技巧,就是一般所谓的阶层式设计(Hierarchical Design)。这与早期直接以绘制门级电路进行设计的时代,所使用的技巧是相类似的。此步骤所完成的设计描述,是进入高阶合成电路设计流程的叩门砖,习惯上称之为硬件描述语言的设计切入点(HDL Design Entry)。关于这个步骤,也有相关的辅助工具相继推出,如Design Book,它利用一般工程师熟悉的图形接口,如状态图及流程图帮助开始接触以硬件描述语言进行设计的工程师,自动编写出相对应的硬件语言描述码。
3)功能验证 ( Function Verification ) 完成步骤2)的设计描述后,接下来便是利用VHDL或Verilog的电路仿真器,针对先前的设计描述,验证其功能或时序(Timing)是否符合由步骤1)所制定的规格。通常,称这类验证为功能仿真(Function Simulation)或行为仿真(Behavioral Simulation),而这类HDL电路仿真器则通称为行为仿真器(Behavioral Simulator)。
对于这类功能验证的仿真而言,仿真器并不会考虑实际逻辑单元或联机(Connect Wires)所造成的时间延迟(Time Delay)、门延迟(Gate Delay)及传递延迟(Transport Delay)。取而代之的是使用单一延迟(Unit Delay)的数学模型,来粗略估测电路的逻辑行为。虽然如此无法获得精确的结果,但其所提供的信息已足够工程师针对电路功能的设计进行除错。
4)逻辑综合 ( Logic Synthesis ) 确定设计描述之功能无误后,便可由综合器(Synthesizer)进行电路综合。综合过程中,必须选择适当的逻辑单元库(Logic Cell Library)作为综合逻辑电路时的参考依据。元件库的取得,可能直接来自于ASIC供货商,或其他组件库供货商,或者为了某种特殊原因,也可以考虑自行建立。事实上,元件库内含的逻辑单元非常广泛,大致上包括以下各项。
☺ Cell Schematic:用于电路合成,以便产生逻辑电路的网络列表(Netlist)。
☺ Timing Model:描述各逻辑单元精确的时序模型。组件工程师会选取各逻辑单元内的寄生电阻及电容进行仿真,进而建立各逻辑单元的实际延迟参数。其中包括传输门延迟(Gate Delay)、输入/输出的延迟(Input Delay/Output Delay)及线路延迟(Wire Delay)等。这一模型在进入逻辑单元各层次的电路仿真以及在布局布线(P&R)之后的仿真中都会用到。
☺ Routing Model:描述各逻辑单元在进行绕线时的限制,作为布线工具的参考资料。
☺ Silicon Physical Layout:在制作ASIC的光罩(Mask)时会使用到它。
使用综合器需要注意最佳化(Optimize)的设定。根据步骤1)所制定的规格,工程师可对综合器下达一系列限制条件(Constrain),根据这些条件,综合器便会自动合成满足规格要求的逻辑电路。最常见的三个限制条件是操作速度、逻辑单元数及功率消耗。事实上,这三项限制条件之间呈现互相矛盾的关系,一旦限制条件太过严苛,将使电路合成的速度变得非常慢,有可能在花费大量时间后,仍得不到想要的结果。
Design Entry硬件语言设计描述文件,其语法的编写风格(HDL Coding Style)是决定综合器执行效能的另一个因素。事实上,无论是对VHDL或是Verilog而言,综合器所支持的HDL语法均是有限的,过于抽象的语法只适用于编写Cell Library,或是作为系统规划评估时的仿真模型所用,而不为综合器所接受。
5)逻辑门层次的电路功能验证 ( Gate-Level Netlist Verification ) 由综合器产生的netlist,会在这个阶段进行第二次的电路仿真,一般称之为逻辑单元层次的电路功能验证或P&R前的仿真,简称前段仿真(Pre-Simulation)。在此阶段,主要的工作是要确认经由综合器所合成的电路是否如同原始的设计描述那样符合用户的功能需求。利用逻辑单元层次仿真器(Gate-Level Simulator)配合在功能验证时已经建立的Test Bench,便可达到这个目的。
在Pre-Simulation中,一般只考虑门延迟,而联机延迟在此处是不予考虑的(通常在电路合成阶段,无法预测实际联机的长度,因此也就无法推测联机所造成的延迟)。
时序变异(Timing Variation)是此处经常出现的发生错误,这当中包括设定时间(SetUp Time)或保持时间(Holding Time)的不符合,以及脉冲干扰(Glitch)现象的发生。而这些时序变异,基本上都是只单纯考虑门延迟时所造成的结果。
6)布局与布线 ( Place and Routing ) 这里包含了三项主要的工作:平面规划(Floor Planning)、布局(Placement)及布线(Routing),在设计描述的阶段,将各个子模块分别予以实现。平面规划的工作便是,适当地规划这些划分好模块在芯片上的位置。
比起模块内逻辑单元间的接线,各模块之间互连信号的接线通常会比较长,因此,它们所产生的延迟会影响ASIC的性能;在次微米制程上,此种现象更为显著,这也就是为何先前特别强调模块划分的重要性。完成平面规划之后,P&R工具便接着完成各模块方块内逻辑单元的布局与布线。
7)布局布线后的电路功能验证 ( Post Layout Verification ) 在这个阶段,经过P&R之后的电路,除了需重复验证是否仍符合原始功能设计之外,工程师最关心的是,在考虑实体的闸延迟及联机延迟的条件之下,电路能否正常运作。与逻辑单元层次的电路功能验证时发生的情况相同,可能需要面对Set-Up Time、Holding Time及Glitch的问题。不同的是,此时若真有错误发生,将面对更冗长的重复修正周期(Iteration Cycle)。也就是说,可能需要回到最原始的步骤———修改HDL设计描述,重新再跑一遍相同的流程。
由于需要参考的参数非常多,仿真时间将数倍于先前的仿真。经由P&R工具所产生的标准延迟格式(Standard Delay Format,SDF)档,提供了翔实的物理层次的延迟参数。通过VITAL的参数回传机制(Back-Annotation),仿真器能够精确预估数字电路的电气行为,并且指示出发生时序错误的时间点,而付出的代价就是“时间”。
如果设计硬件电路能像写软件那样方便,该是多么美好的景象。硬件描述语言的高阶合成电路设计,为我们打开了这扇窗。事实上,VHDL及Verilog HDL并非唯一的硬件描述语言,基于相似的目的,早期也发展出其他如ABEL及AHDL等硬件语言,但是由于支持的厂商不多,因此目前不如前者应用普遍。最近,VHDL及Verilog HDL的发展协会为提供更一般化的电路描述,已制定了能够同时描述数字及模拟混合电路的描述语法,相信支持其语法的相关EDA工具应该能在近期面市。
为能迎接SOC及IP时代的来临,各EDA工具的供货商无不竭尽全力,力图在下一代设计流程上站在业界领先的地位。Synopsys及Cadence更是相继推出应用功能一致性验证及静态仿真等技术的产品,如Formality、PrimeTime(Synopsys)以及Affirma(Cadence)。其他诸如预先平面规划(Pre-Floor-Planning)等新的设计观念也不断地被提出。虽然电路的设计工具及观念不断推陈出新,但是对传统的芯片设计厂商而言,如何将这些新的概念整合进原先的设计流程,才是最重要的问题。
半导体工艺水平的提高对EDA设计技术的发展有巨大的推进作用,与此相关的微电子技术、计算机技术和电路基本理论这三项前导技术学科对EDA技术的影响也逐渐显现出来,使EDA设计方法呈现电路基本理论、微电子理论、算法理论、操作系统、计算机语义学等多学科交叉渗透的现象。其作用范围从PCB设计延伸到电子线路设计和集成电路设计,使IC芯片、系统应用、电路制作和整个电子生产过程都集成在一个环境之中。
EDA的设计流程如图1-1所示。该流程图以VHDL输入为例,展示了EDA设计的基本过程。
图1-1 EDA的设计流程
1)设计输入 EDA的设计输入方法多种多样,可根据EDA工具的支持程度和设计者的设计能力与习惯进行选择。
☺ 逻辑原语输入法:基于AND、OR、NOT等逻辑原语的输入方法。这种基本输入法是构成各类宏功能、宏功能(Megafunction)的基础。逻辑原语作为各模块之间的数据缓冲、电平配合和负载匹配,在现代设计方法中是不可缺少的。
☺ 库函数宏输入法:大多数EDA工具都带有丰富的库函数宏,如标准74系列集成电路、各类计数器和多路器等标准函数。这些函数宏均可以编译到一个CPLD器件中,大大提高了系统的集成度。
IP模块宏功能模块核输入法:在许多EDA工具库中都有一个免费提供的IP模块库。另外,有些IP模块也可以通过商业手段得到。ALTERA公司免费提供的宏功能模块有ROM、RAM、FIFO控制部件和滤波器等。IP模块是由第三方开发的具有特定功能和知识产权的模块,利用这种模块输入法可大大缩短开发周期。
硬件描述语言输入法:用算法语言描述电子系统的行为,建立模型。利用硬件描述语言,可以方便地设计大型的电子系统。
原理图输入法:利用已经预制好的设计模块,将其生成原理图符号,在原理图编辑器中将各种逻辑器件通过电气连接线连接起来。这种设计方法与传统的原理图绘制十分相像,因此更加易于掌握。但其缺点也是明显的,由于原理图设计输入方法没有标准化,不同的EDA工具软件对其支持的方式不同,不利于文件的移植和管理。当电路系统较大时,原理图的易读性下降,使错误排查以及设计升级都十分困难。
状态图和波形图输入法:一些辅助设计工具还支持状态图输入或波形图输入方式。使用状态图输入法时,设计者只需画出状态转移图,编辑器就能够自动生成相应的VHDL、ABEL或Verilog-HDL语言模型。典型的状态机输入工具是State CAD。使用波形图输入法时,设计者画出输入的激励波形和输出的相应波形,波形输入工具自动生成符合输入输出关系的功能代码。这些输入方式目前已经被逐步淘汰。
2)综合方法 综合方法包括逻辑综合与测试综合。逻辑综合就是对不同层次和不同形式的设计描述进行转换。在此过程中,设计者的任务是把各种设计要求作为一种约束条件,按照指定的工艺库做映射转换。综合器通过各种综合算法,以具体的工艺背景实现高层目标所规定的优化设计。通过设计综合工具,可将电子系统的高层行为描述转换到低层硬件描述和确定的物理实现,使设计人员无须直接面对低层电路,不必了解具体的逻辑器件,从而把精力集中到系统行为建模和算法设计上。
在图形生成时产生的高覆盖率测试代码和关键路径的时序分析,为电路与系统的高层次设计提供了一种自动测试方案。测试综合方法是对设计进行验证的有效方法,也是对测试结果进行预测的有效手段。它是以设计结果的性能为目标的综合方法,以电路的时序、功耗、电磁辐射和负载能力等性能指标为综合对象,是保证电子系统设计结果稳定、可靠工作的必要条件。
主流的综合工具主要有Synplicity公司的Synplify/Synplify pro、Synopsys公司的FPGA CompilerⅡ/Express、Exemplar Logic公司的Leonardo Spectrum。另外,各个芯片厂商提供的EDA工具还内嵌了自己的综合工具。
3)仿真方法 仿真是确保设计成功的重要措施。集成电路的投片生产可谓一掷千金,一丝一毫的设计差错所造成的损失都是难以承受的。但就设计方法论而言,错误是在所难免的。实践证明,以现在的计算机技术,如果在投片生产之前对设计结果进行计算机仿真,由此找出设计错误,对通常规模的芯片设计基本上可以做到万无一失。有人说用EDA工具设计电子系统的过程,就是仿真的过程,这是因为一个项目的仿真时间要占整个设计时间的80%。
IP资源的来源很多,第一是用户可以自己设计开发IP模块;第二是硅片和半导体厂商为了推销他们的器件而免费提供IP模块;第三是EDA专业公司提供免费的或需要付费的IP模块;第四是专门从事IP设计的独立开发商推出的商业模块,一般需要付费。半导体厂商和可编程器件厂商的IP模块是针对自己器件的工艺特点而创建的,所以在功耗、面积、性能方面的优化都比较理想。但由于资源和知识方面的局限,他们建造的IP模块常常只能适用于较窄的领域。EDA专业开发商的优势是软件开发,提供的IP模块独立于半导体厂商的工艺结构,兼容性好,易于模块之间集成。在用IP模块搭建的系统设计中,EDA专业开发商的工具综合效率高,成功率较高。独立IP供应商一般面向某个特定领域,产品功能专一,如PCI接口、ATM设计和滤波器等。IP模块的重用方法与两个重要因素密切相关:一是IP模块供应商的能力;二是IP模块的格式。
IP模块的设计重用方法正在世界范围内兴起,IP市场也在不断扩大,模块丰富多彩,知识产权交易和设计复用将是EDA设计的关键。一个大的电子系统完全没有必要从逻辑门开始设计,而应该从大的模块,如CPU核、DSP核以及CBA(基于宏单元的阵列)开始设计,从而达到提高效率、事半功倍的效果。
目前业界最为流行的仿真工具是ModelSim。另外,Aldec公司的ActiveHDL也有相当的普及度。
4)协同验证与形式验证方法 电子系统级设计的最新方法是硬件和软件的协同设计开发,协同验证是当今系统级集成的核心。半导体器件厂商的深亚微米工艺也推动了设计方法的发展。以高层系统级设计为主导,以性能优化为目标,融合逻辑综合、性能仿真、形式验证和可测性设计,具有深亚微米工艺的物理级设计和整体规划设计能力的EDA工具与方法正在逐渐成熟。
在系统集成(Systems On Chip)设计中,首先要定义系统需求和功能,并将它们分配到硬件和软件两部分之中,然后分别独立进行硬件设计和软件设计,最后再集成到一起进行整体测试。设计的协同验证方法弥补了硬件设计和软件设计流程之间的空隙,因而是系统级集成设计的核心。通过建立虚拟样机环境来生成虚拟样品,以便对硬件和软件能否在一起正常工作进行验证。这就是说,在设计阶段可以用验证方法提前解决原来在系统集成和测试时用仿真方法才能解决的问题。Mentor公司推出的硬件/软件协同验证工具有两种基本的仿真接口:一个是用于硬件验证的逻辑仿真器,另一个是用于软件验证的指令集仿真器。指令集仿真器是一个虚拟微处理器,也就是用软件实现的仿真器,接受可执行的目标码文件,并可对其进行解码和执行。协同验证工具保持两个软/硬仿真器之间同步工作,同时也减少了硬件仿真所要处理的事务。软/硬件协同验证工具是迈向真正的系统集成的第一步,它能把软件和硬件仿真作业安排在最佳环境中进行,使软件和硬件设计人员都能看到整个系统的行为。
形式验证方法采用数学演绎论证法来检查和确保寄存器传输级(RTL)描述与较低级(门级和晶体管级)物理实现之间的功能等效性。形式验证工具为用户提供连续性的论证方法,以保证RTL模型与逻辑门之间的功能等效性,确保任何模块之间以及RTL模型与逻辑门之间一一对应。借助于高级语言描述与手工设计逻辑块行为相结合的验证和确认方法,可以加快芯片的设计。
5)设计中的 IP 重用方法 产品上市时间的缩短和芯片功能的增强对EDA设计构成了双重压力,芯片开发商正在转向寻求完整的设计重用方法。系统设计人员将IP(Intellectual Property)模块看作提高生产率的重要工具。IP模块是一些预先创建的功能模块,可以方便地纳入系统级集成电路之中。这种功能模块有两种:一种是IP模块;另一种是宏功能核(Megafunction Core),又分软核和硬核。软核是指具有一定硬件功能、用HDL语言写成的一段程序。硬核是能与某种半导体工艺相吻合的、经过编译的设计程序。无论软核还是硬核,都需要购买使用权。而硬核相对于软核来说成功的把握大一些,设计风险小一些。