1.3 数字系统设计的流程
数字系统的实现主要可选择两类器件,一类是可编程逻辑器件(PLD),另一类是专用集成电路(ASIC),这两类器件各有自己的优点。
(1)可编程逻辑器件(PLD)
PLD(主要包括FPGA和CPLD)是一种半定制的器件,器件内已做好各种逻辑资源,用户只需对器件内的资源编程连接就可实现所需要的功能,而且可以反复修改,反复编程,直到满足设计要求。用PLD实现设计直接面向用户,具有其他方法无可比拟的方便性、灵活性和通用性,硬件测试和实现快捷,开发效率高、成本低,风险小。现代FPGA器件集成度不断提高,等效门数已达到了千万门级,在器件中,除集成各种逻辑门和寄存器外,还集成了嵌入式块RAM、硬件乘法器、锁相环、DSP块等功能模块,使FPGA的使用更方便。EDA开发软件对PLD器件也提供了强有力的支持,其功能更全面,兼容性更强。
(2)专用集成电路(ASIC)
专用集成电路(Application Specific Integrated Circuit,ASIC)指用全定制方法来实现设计的方式,它在最低层,即物理版图级实现设计,因此也称为掩模(Mask)ASIC。采用ASIC,能得到最高速度、最低功耗和最省面积的设计。它要求设计者必须使用版图编辑工具从晶体管的版图尺寸、位置及连线开始进行设计,以得到芯片的最优性能。在版图设计时,设计者需手工设计版图并精心地布局布线,以获得最佳的性能和最小的面积。版图设计完成后,还要进行一系列检查和验证,包括设计规则检查、电学规则检查、连接性检查、版图与电路图一致性检查等,全部通过后,才可以将得到的标准格式的版图文件(一般为 CIF、GDSII 格式)交与半导体厂家进行流片。
ASIC是在母片(晶圆)的基础上实现芯片的,如图1.6所示为一片8寸的晶圆(Wafer),每一个小方格经过切割,封装后就是一颗芯片。ASIC 的实现成本高昂,设计周期长,但可以设计出速度高、功耗低、尽量节省面积的芯片,适用于对性能要求很高和批量很大的芯片。
图1.6 晶圆外观
用PLD还是用ASIC来实现设计,应根据具体情况来选择。对于一般的设计开发而言,采用PLD器件来实现,是一种设计周期短、投入资金少、风险小的选择。对于一些成熟的设计来说,可以考虑把系统中的某些模块,或者整个系统,采用 ASIC 的形式来实现,以获得最优的性价比。
本节主要讨论基于 FPGA/CPLD 器件的实现数字系统的步骤与要点,基于 FPGA/CPLD器件的数字系统设计流程如图1.7所示,主要包括设计输入、综合、FPGA/CPLD器件适配、仿真和编程下载等步骤。
图1.7 基于FPGA/CPLD的数字系统设计流程
1.3.1 输入
设计输入(Design Entry)是将设计者所设计的电路以开发软件要求的某种形式表达出来,并输入到相应软件中的过程。设计输入有多种表达方式,最常用的是原理图方式和 HDL 文本方式两种。
1.原理图输入
原理图(Schematic)是图形化的表达方式,使用元件符号和连线来描述设计。其特点是适合描述连接关系和接口关系,而描述逻辑功能则比较烦琐。原理图输入对用户来讲很直观,尤其对表现层次结构、模块化结构更为方便。但它要求设计工具提供必要的元件库或逻辑宏单元。如果输入的是较为复杂的逻辑或者元件库中不存在的模型,采用原理图输入方式往往很不方便,此外,原理图方式的设计可重用性、可移植性也差一些。
2.HDL文本输入
硬件描述语言(HDL)是一种用文本形式来描述和设计电路的语言。设计者可利用HDL语言来描述自己的设计,然后利用 EDA 工具进行综合和仿真,最后变为某种目标文件,再用ASIC或FPGA具体实现。这种设计方法已被普遍采用。
硬件描述语言的发展至今不过 20 年左右的历史,已成功应用于数字系统开发的各个阶段:设计、综合、仿真、验证等。到20世纪80年代时,已出现了数十种硬件描述语言,但是,这些语言一般面向特定的设计领域与层次,而且众多的语言使用户无所适从,因此需要一种面向多领域、多层次、并得到普遍认同的标准HDL语言。进入80年代后期,硬件描述语言向着标准化、集成化的方向发展。最终,VHDL和Verilog HDL适应了这种趋势的要求,先后成为IEEE标准,在电子设计领域已成为事实上的通用硬件描述语言。
(1)VHDL
1.85 年在美国国防部的支持下正式推出了超高速集成电路硬件描述语言(Very High Speed Integration Circuit HDL,VHDL),VHDL是一种标准化程度较高的硬件描述语言,它源于美国国防部提出的超高速集成电路计划,最初的目的是为了在各个承担国防部订货的集成电路厂商之间建立一个统一的设计数据和文档交换格式。由于美国国防部是财力集中、范围广泛的特殊用户,因此它的要求很快得到了响应。IEEE于1987年将VHDL采纳为“IEEE标准1076”,从而VHDL正式成为硬件描述语言的业界标准之一,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以支持VHDL。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展了 VHDL 的内容,公布了新版本的VHDL,即IEEE 1076-1993版本;现在公布的最新VHDL标准版本是IEEE 1076-2002。
VHDL主要用于描述数字系统的结构、行为、功能和接口。其特点如下:
● 数据类型丰富:VHDL有整数、布尔、字符、字符串、位型(Bit)、位矢量型(Bit_Vector)、时间型(Time)等数据类型,这些数据类型具有鲜明的物理意义,因此VHDL是强类型语言,表达式中操作数必须与操作符要求的数据类型相一致,否则为语法错误,除非有合法的强制类型转换。VHDL 也允许设计者自己定义数据类型,自己定义的数据类型可以是标准数据类型复合而成的枚举、数组或记录(Record)等。
● 层次结构性:VHDL 把一个数字系统当成一组模块来描述,并把它们分别放在不同的设计单元中:实体(Entity)与构造体(Architecture)。实体定义了模块被调用时所需要的信息,包括输入/输出信号接口与有关参数。构造体描述模块内部的结构和行为状态,这种分开描述有助于层次化的设计方法。
● 支持结构性描述和行为描述:对同一电路,VHDL 支持多种描述方法。元件调用是非进程性的并发语句,用来表达各子模块的相互连接。进程内包含串行语句,它可以像普通程序那样描述模块的行为特征,这时设计者注意力集中在模块的功能上,而不是具体实现结构,因此它更为抽象。设计中可同时采用结构描述和行为描述,一部分用行为描述,另一部分用结构描述。设计人员可以灵活地运用这两种不同的设计风格。
(2)Verilog HDL
Verilog语言是应用最为广泛的硬件描述语言之一,可用来进行各种层次的逻辑设计,也可以进行仿真验证、时序分析等。Verilog语言的发展及应用将在第5章详细介绍。
Verilog语言适合算法级(Algorithm Level)、寄存器传输级(RTL)、门级(Gate Level)和版图级(Layout Level)等各个层次的设计和描述,如表1.1所示。
表1.1 不同层次的描述方式
采用Verilog语言进行设计,由于Verilog语言的标准化,易于将设计移植到不同厂家的不同芯片中去,信号参数也容易改变,可任意修改。在仿真验证时,测试向量也可用该语言描述。此外,采用Verilog进行设计还具有工艺无关性,这使得工程师在功能设计、逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求,施加不同的约束条件,即可设计出实际电路。
Verilog HDL和VHDL都是用于电路设计的硬件描述语言,并且都已成为IEEE标准。两者各有自己的优势和特点。Verilog HDL早在1983年就已推出,至今已有20多年的应用历史,因而拥有广泛的用户群体,其设计的资源也比VHDL丰富。与VHDL相比,Verilog HDL的语法结构自由,也相对容易掌握一些,可使用户集中精力于设计工作中,而不必花费太多的时间在语言和语法的学习上。
PLD器件的设计往往采用层次化的设计方法,分模块、分层次地进行设计描述。描述器件总功能的模块放置在最上层,称为顶层设计;描述器件最基本功能的模块放置在最下层,称为底层设计。顶层和底层之间的关系类似于软件中的主程序和子程序的关系。层次化设计的方法比较自由,可以在任何层次使用原理图或硬件描述语言进行描述。一般做法是:在顶层设计中,使用图形法表达连接关系和芯片内部逻辑到管脚的接口;在底层设计中,使用硬件描述语言描述各个模块的逻辑功能。
1.3.2 综合
综合(Synthesis)是一个很重要的步骤,综合指的是将较高层次的设计描述自动转化为较低层次描述的过程。综合有下面几种形式。
● 将算法表示、行为描述转换到寄存器传输级(RTL),即从行为描述到结构描述,称为行为综合。
● RTL级描述转换到逻辑门级(可包括触发器),称为逻辑综合。
● 将逻辑门表示转换到版图表示,或转换到PLD器件的配置网表表示,称为版图综合或结构综合。根据版图信息能够进行ASIC生产,有了配置网表可完成基于PLD器件的系统实现。
综合器就是能够自动实现上述转换的软件工具。或者说,综合器是能够将原理图或HDL语言表达或描述的电路功能转化为具体的电路结构网表的工具。
硬件综合器和软件程序编译器是有着本质的区别的,如图1.8所示是表现两者区别的示意图,软件程序编译器是将C或汇编语言等编写的程序编译为0、1代码流,而硬件综合器则是将用硬件描述语言编写的程序代码转化为具体的电路网表结构。
图1.8 软件编译器和硬件综合器的比较
1.3.3 适配
适配器(Fitter)有时也称为结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,并产生最终的可下载文件,如对CPLD器件而言,产生熔丝图文件,即JEDEC文件;对FPGA器件则产生Bitstream位流数据文件。一般综合器可由第三方的EDA公司提供,而适配器多由FPGA/CPLD生产厂家提供,因为适配的过程直接与器件的具体结构相对应。
利用适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化、布局布线等。映射是把设计分为多个适合器件内部逻辑资源实现的逻辑小块的过程;布局是将已分割的逻辑小块放到器件内部逻辑资源的具体位置,并使它们易于连线;布线则是利用器件的布线资源完成各功能块之间和反馈信号之间的连接。
适配器产生如下一些重要的文件:
① 适配报告:包括芯片内部资源利用情况,设计的布尔方程描述情况等。
② 面向其他EDA工具的输出文件,如EDIF文件等。
③ 适配后的仿真模型,包括延时信息等,以便于进行精确的时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确地预测未来芯片的实际性能。如果仿真结果达不到设计要求,就需要修改源代码或选择不同速度的器件,直至满足设计要求。
④ 器件编程文件:如用于CPLD编程的JEDEC、POF等格式的文件;用于FPGA配置的SOF、JAM、BIT等格式的文件。
1.3.4 仿真
仿真(Simulation),也称为模拟,是对所设计电路的功能的验证。用户可以在设计过程中对整个系统和各个模块进行仿真,即在计算机上用软件验证功能是否正确,各部分的时序配合是否准确。如果有问题可以随时进行修改,从而避免了逻辑错误。高级的仿真软件还可以对整个系统设计的性能进行估计。规模越大的设计,越需要进行仿真。
仿真包括功能仿真和时序仿真。不考虑信号时延等因素的仿真,称为功能仿真,又叫前仿真;时序仿真又称后仿真,它是在选择了具体器件并完成了布局布线后进行的包含延时的仿真。由于不同器件的内部时延不一样,不同的布局、布线方案也给延时造成了很大的影响,因此在设计实现后,对网络和逻辑块进行时延仿真,分析定时关系,估计设计性能是非常有必要的。
1.3.5 编程
把适配后生成的编程文件装入到PLD器件中的过程称为下载。通常将对基于EEPROM工艺的非易失结构CPLD器件的下载称为编程(Program),而将基于SRAM工艺结构的FPGA器件的下载称为配置(Configure)。编程需要满足一定的条件,如编程电压、编程时序和编程算法等。有两种常用的编程方式:在系统编程(In-System Programmable,ISP)和用专用的编程器编程,现在的PLD器件一般都支持在系统编程,因此在设计数字系统和做PCB印制板时,应预留器件的下载接口。