数字系统设计与VHDL
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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器件的数字系统设计流程如图1.7所示,包括设计输入、综合、布局布线、仿真和编程下载等步骤。

图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标准,在电子设计领域成为事实上的通用硬件描述语言。

VHDL和Verilog HDL各有优点,可用来进行算法级(Algorithm Level)、寄存器传输级(RTL)、门级(Gate Level)等各种层次的逻辑设计,也可以进行仿真验证、时序分析等。由于HDL语言的标准化,易于将设计移植到不同厂家的芯片中去,信号参数也容易改变和修改。此外,采用HDL进行设计还具有工艺无关性,这使得工程师在功能设计、逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求,施加不同的约束条件,即可设计出实际电路。

PLD器件的设计柱柱采用层次化的设计方法,分模块、分层次地进行设计描述。描述器件总功能的模块放置在最上层,称为顶层设计;描述器件最基本功能的模块放置在最下层,称为底层设计。顶层和底层之间的关系类似于软件中的主程序和子程序的关系。层次化设计的方法比较自由,可以在任何层次使用原理图或硬件描述语言进行描述。一般做法是:在顶层设计中,使用图形法表达连接关系和芯片内部逻辑到引脚的接口;在底层设计中,使用硬件描述语言描述各个模块的逻辑功能。

1.3.2 综合

综合(Synthesis)是一个很重要的步骤,综合指的是将较高级抽象层次的设计描述自动转化为较低层次描述的过程。综合有下面几种形式。

● 将算法表示、行为描述转换到寄存器传输级(RTL),即从行为描述到结构描述。

● 将RTL级描述转换到逻辑门级(包括触发器),称为逻辑综合。

● 将逻辑门表示转换到版图表示,或转换到PLD器件的配置网表表示;据版图信息能够进行ASIC生产,有了配置网表可完成基于PLD器件的系统实现。

综合器就是能够自动实现上述转换的软件工具。或者说,综合器是能够将原理图或HDL语言表达、描述的电路编译成由与或阵列、RAM、触发器、寄存器等逻辑单元组成的电路结构网表的工具。

硬件综合器和软件程序编译器是有着本质的区别的,如图1.8所示是表现两者区别的示意图,软件程序编译器是将C或汇编语言等编写的程序编译为0,1代码流,而硬件综合器则是将用硬件描述语言编写的程序代码转化为具体的电路网表结构。

图1.8 软件编译器和硬件综合器的比较

1.3.3 布局布线

布局布线可理解为将综合生成的电路逻辑网表映射到具体的目标器件中实现,并产生最终的可下载文件的过程。布局布线将综合后的网表文件针对某一具体的目标器件进行逻辑映射,把整个设计分为多个适合器件内部逻辑资源实现的逻辑小块,并根据用户的设定在速度和面积之间做出选择或折中;布局是将己分割的逻辑小块放到器件内部逻辑资源的具体位置,并使它们易于连线;布线则是利用器件的布线资源完成各功能块之间和反馈信号之间的连接。

布局布线完成后产生如下一些重要的文件:

(1)芯片资源耗用情况报告;

(2)面向其他EDA工具的输出文件,如EDIF文件等。

(3)产生延时网表结构,以便于进行精确的时序仿真,因为己经提取出延时网表,所以仿真结果能比较精确地预测未来芯片的实际性能。如果仿真结果达不到设计要求,就需要修改源代码或选择不同速度的器件,直至满足设计要求。

(4)器件编程文件:如用于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印制板时,应预留器件的下载接口。