数字系统设计与Verilog HDL(第7版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-10 19:40:46

点击下载

作者:王金明

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

数字系统设计与Verilog HDL(第7版)

数字系统设计与Verilog HDL(第7版)试读:

第7版前言

本书在前一版的基础上主要做了如下修订:(1)鉴于Verilog-2001标准越来越重要,本书对Verilog-2001标准做了更为深入的阐述,一些例程也按照Verilog-2001标准做了修改。(2)将设计工具升级为Quartus Prime 17.0。从Quartus II 10.0开始,Quartus II软件取消了自带的波形仿真工具,转而采用专业第三方仿真工具ModelSim进行仿真;自版本13.1之后,Quartus II只支持64位操作系统(Windows 7,8,10);从Quartus II 15.1开始,Quartus II开发工具改称Quartus Prime;2017年5月,Intel发布了Quartus Prime 17.0版本。Quartus Prime 17.0相比之前的版本,支持的器件更多,自带的IP模块也更丰富,编译速度更快,支持System Verilog-2005和VHDL-2008。设计者应积极适应EDA设计工具的变化,并尽可能采用新版本的设计工具。(3)将目标实验板从 DE2、DE2-70 升级为 DE2-115,更新和改进了部分设计案例,并基于DE2-115实验板做了下载和验证。(4)更新了有关ModelSim仿真的内容。本书介绍了两个版本的ModelSim的使用方法,一个是Intel的OEM版本ModelSim-Intel,同时在第11章详细介绍了用ModelSim SE进行功能和时序仿真的过程,ModelSim SE的功能更全面一些。(5)更新了部分有关FPGA器件结构的内容,使之尽量反映FPGA器件的新发展。

由于FPGA芯片和EDA软件的不断更新换代,同时因编著者时间和精力所限,本书虽经不断改版和修正,仍不免有诸多疏漏和遗憾,一些案例也有继续发挥和改进的空间,同时一些新的例程限于篇幅未能在书中得到反映。基于本教材的慕课(MOOC)教学资源已在华信教育资源网推出。本书与作者的另一拙作《数字系统设计与VHDL》(第2版)互为补充,前者以Verilog语言开发为主,后者则以VHDL语言的设计为重点。

感谢友晶科技的彭显恩经理和尹作娟女士、鑫合欣的王婷女士在本书写作过程中给予的大力支持;感谢美国威斯康星大学麦迪逊分校的Yu Hen Hu教授在作者访学期间在学术上和教学上给予作者的无私帮助与支持;感谢本书责任编辑窦昊先生与作者多年的鼎力合作;参加本书编写的还有周顺、曹阳、朱莉莉、张瑾玫、徐子崑、胡雨尧、綦晓东、臧广文、刘鑫裕、朱森、陈晨等,在此一并表示感谢。

本书疏漏与错误之处,希望读者和同行给予批评指正。

E-mail:wjm_ice@163.com

编著者

2018年10月于陆军工程大学

第1章 EDA技术概述

我们已经进入数字化和信息化的时代,其特点是各种数字产品的广泛应用。现代数字产品在性能提高、复杂度增大的同时,更新换代的步伐也越来越快,实现这种进步的因素在于芯片制造技术和设计技术的进步。

芯片制造技术以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管。摩尔曾经对半导体集成技术的发展做出预言:大约每 18 个月,芯片的集成度提高1倍,功耗下降1倍,他的预言被人们称为摩尔定律(Moore’s law)。几十年来,集成电路的发展与这个预言非常吻合,数字器件经历了从 SSI,MSI,LSI 到VLSI,直到现在的SoC(System on Chip,芯片系统),我们已经能够把一个完整的电子系统集成在一个芯片上。还有一种器件的出现极大改变了设计制作电子系统的方式与方法,这就是可编程逻辑器件(Programmable Logic Device,PLD)。PLD器件是20世纪70年代后期发展起来的一种器件,它经历了可编程逻辑阵列(Programmable Logic Array,PLA)、通用阵列逻辑(Generic Array Logic,GAL)等简单形式到现场可编程门阵列(Field Programmable Gate Array,FPGA)和复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)的高级形式的发展,它的广泛使用不仅简化了电路设计、降低了研制成本、提高了系统可靠性,而且给数字系统的整个设计和实现过程带来了革命性的变化。

电子系统的设计理念和设计方法也发生了深刻的变化,从电子CAD(Computer Aided Design)、电子CAE(Computer Aided Engineering)到电子设计自动化(Electronic Design Automation,EDA),设计的自动化程度越来越高,设计的复杂性也越来越强。

EDA技术已成为现代电子设计技术的有力工具,没有EDA技术的支持,要完成超大规模集成电路的设计和制造是不可想象的,反过来,生产制造技术的进步又不断对EDA技术提出新的要求,促使其不断向前发展。

1.1 EDA技术及其发展

在现代数字系统的设计中,EDA技术已经成为一种普遍的工具。对设计者而言,熟练地掌握EDA技术,可以极大地提高工作效率,起到事半功倍的效果。

EDA(电子设计自动化)技术没有一个精确的定义,我们可以这样来认识,所谓的EDA技术就是以计算机为工具,设计者基于EDA软件平台,采用原理图或者硬件描述语言(HDL)完成设计输入,然后由计算机自动完成逻辑综合、优化、布局布线和仿真,直至对于目标芯片(CPLD、FPGA)的适配和编程下载等工作(甚至是完成ASIC专用集成电路掩膜设计),上述辅助进行电子设计的软件工具及技术统称 EDA。EDA 技术的发展以计算机科学、微电子技术的发展为基础,融合了应用电子技术、智能技术,以及计算机图形学、拓扑学、计算数学等众多学科的最新成果。EDA 技术经历了一个由简单到复杂、由初级到高级不断发展进步的阶段。从 20 世纪 70 年代,人们就已经开始基于计算机开发出一些软件工具帮助设计者完成电路系统的设计任务,以代替传统的手工设计方法,随着计算机软件和硬件技术水平的提高,EDA 技术也在不断进步,大致经历了下面三个发展阶段。

1.CAD阶段

电子CAD阶段是EDA技术发展的早期阶段(时间大致为20世纪70年代至80年代初)。在这个阶段,一方面,计算机的功能还比较有限,个人计算机还没有普及;另一方面,电子设计软件的功能也较弱。人们主要是借助计算机对所设计电路的性能进行一些模拟和预测;另外,就是完成PCB的布局布线,简单版图的绘制等工作。

2.CAE阶段

集成电路规模的扩大,电子系统设计的逐步复杂,使得电子CAD的工具逐步完善和发展,尤其是人们在设计方法学、设计工具集成化方面取得了长足的进步,EDA技术就进入了电子CAE阶段(时间大致为20世纪80年代初至90年代初)。在这个阶段,各种单点设计工具、各种设计单元库逐渐完备,并且开始将许多单点工具集成在一起使用,大大提高了工作效率。

3.EDA阶段

20 世纪 90 年代以来,微电子工艺有了显著的发展,工艺水平达到深亚微米级,在一个芯片上可以集成数目上千万乃至上亿的晶体管,芯片的工作速度达到Gbps级,这样就对电子设计的工具提出了更高的要求,也促进了设计工具的发展。

在今天,EDA技术已经成为电子设计的普遍工具,无论是设计集成电路还是设计普通的电子电路,没有EDA工具的支持,都是难以完成的。EDA技术的使用贯穿电子工程师进行电子系统开发的全过程,以及进行开发设计涉及的各个方面。从一个角度看,EDA技术可粗略分为系统级、寄存器传输级(RTL)、门级和版图级几个层次的辅助设计过程;从另一个角度来看,EDA技术包括电子电路设计的各个领域,即从低频电路到高频电路、从线性电路到非线性电路、从模拟电路到数字电路、从PCB设计到FPGA开发等。EDA技术的功能和范畴如图1.1所示。图1.1 EDA技术的功能和范畴

进入 21 世纪后,EDA 技术得到了更快的发展,开始步入一个新的时期,突出地表现在以下几个方面。(1)电子技术各个领域全方位融入EDA技术,除日益成熟的数字技术外,可编程模拟器件的设计技术也有了很大的进步。EDA技术使得电子领域各学科的界限更加模糊,相互包容和渗透,如模拟与数字、软件与硬件、系统与器件、ASIC与FPGA、行为与结构等,软硬件协同设计技术也成为EDA技术的一个发展方向。(2)IP(Intellectual Property)核在电子设计领域得到了更广泛的应用,进一步缩短了设计周期、提高了设计效率。基于IP核的SoC(System on Chip,芯片系统)设计技术趋向成熟,电子设计成果的可重用性得到提高。(3)嵌入式微处理器软核的出现、更大规模的 FPGA/CPLD 器件的不断推出,使得SoPC(System on Programmable Chip,可编程芯片系统)步入实用化阶段,在一片FPGA芯片中实现一个完备的系统成为可能。(4)用FPGA(Field Programmable Gate Array,现场可编程门阵列)器件实现完全硬件的DSP(数字信号处理)处理成为可能,用纯数字逻辑进行DSP模块的设计,为高速数字信号处理算法提供了实现途径,并有力地推动了软件无线电技术的实用化。(5)在设计和仿真两方面支持标准硬件描述语言的EDA软件不断推出,系统级、行为验证级硬件描述语言的出现(如System C)使得复杂电子系统的设计和验证更加高效。在一些大型的系统设计中,设计验证工作非常艰巨,这些高效的EDA工具的出现,减少了开发人员的工作量。

除了上述发展趋势,现代EDA技术和EDA工具还呈现出以下一些共同特点。

1)硬件描述语言(HDL)标准化程度提高

硬件描述语言(Hardware Description Language,HDL)不断进化,其标准化程度越来越高,便于设计的复用、交流、保存和修改,也便于组织大规模、模块化的设计。标准化程度最高的硬件描述语言是Verilog HDL和VHDL,它们早已成为IEEE标准,并且有新的版本获得通过,比如Verilog有Verilog-1995和Verilog-2001两个版本,其功能得到了增强,标准化程度得到提高。

2)EDA工具的开放性和标准化程度不断提高

现代EDA工具普遍采用标准化和开放性的框架结构,可以接纳其他厂商的EDA工具一起进行设计工作。这样可实现各种EDA工具间的优化组合,并集成在一个易于管理的统一环境之中,实现资源共享,有效提高设计者的工作效率,有利于大规模、有组织的设计开发工作。

EDA工具已经能接受功能级或RTL(Register Transport Level)级的HDL描述进行逻辑综合和优化。为了更好地支持自顶向下的设计方法,EDA工具需要在更高的层级进行综合和优化,并进一步提高智能化程度,提高设计的优化程度。

3)EDA工具的库(Library)更完备

EDA工具要具有更强大的设计能力和更高的设计效率,必须配有丰富的库,比如元器件图形符号库、元器件模型库、工艺参数库、标准单元库、可复用的宏功能模块库、IP库等。在电路设计的各个阶段,EDA系统需要不同层次、不同种类的元器件模型库的支持。例如,原理图输入时需要原理图符号库、宏模块库,逻辑仿真时需要逻辑单元的功能模型库,模拟电路仿真时需要模拟器件的模型库,版图生成时需要适应不同层次和不同工艺的底层版图库等。各种模型库的规模和功能是衡量EDA工具优劣的一个重要标志。

总而言之,从过去发展的过程看,EDA技术一直滞后于制造工艺的发展,它在制造技术的驱动下不断进步;从长远看,EDA技术将随着微电子技术、计算机技术的不断发展而发展。“工欲善其事,必先利其器”,EDA工具在现代电子系统的设计中所起的作用越来越大,未来它将在诸多因素的推动下继续进步。

1.2 Top-down设计与IP核复用

数字系统的设计方法发生了深刻的变化。传统的数字系统采用搭积木式的方式进行设计,即由一些固定功能的器件加上一定的外围电路构成模块,由这些模块进一步形成各种功能电路,进而构成系统。构成系统的积木块是各种标准芯片,如 74/54 系列(TTL)、4000/4500系列(CMOS)芯片等,这些芯片的功能是固定的,用户只能根据需要从这些标准器件中选择,并按照推荐的电路搭成系统。设计时几乎没有灵活性可言,设计一个系统所需的芯片种类多且数量大。

PLD器件和EDA技术的出现,改变了这种传统的设计思路,使人们可以立足于PLD芯片来实现各种不同的功能,新的设计方法能够由设计者自己定义器件的内部逻辑和引脚,将原来由电路板设计完成的工作大部分放在芯片的设计中进行。这样不仅可以通过芯片设计实现各种数字逻辑功能,而且引脚定义的灵活性减轻了原理图和印制板设计的工作量和难度,增加了设计的自由度,提高了效率。同时,这种设计减少了所需芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的可靠性。

在基于 EDA 技术的设计中,通常有两种设计思路:一种是自顶向下(Top-down)的设计思路,另一种是自底向上(Bottom-up)的设计思路。1.2.1 Top-down设计

Top-down设计,即自顶向下的设计。这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在功能级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,然后用综合工具将设计转化为具体门电路网表,其对应的物理实现可以是PLD器件或专用集成电路(ASIC)。设计的主要仿真和调试过程是在高层次上完成的,这一方面有利于早期发现结构设计上的错误,避免设计工作的浪费,另一方面也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。

在Top-down设计中,将设计分成几个不同的层次:系统级、功能级、门级和开关级等,按照自上而下的顺序,在不同的层次上对系统进行设计与仿真。图 1.2 是这种设计方式的示意图。如图中所示,在Top-down的设计过程中,需要EDA工具的支持,有些步骤EDA工具可以自动完成,比如综合等,有些步骤 EDA 工具为用户提供了操作平台。Top-down设计必须经过“设计—验证—修改设计—再验证”的过程,不断反复,直到得到的结果能够完全实现所要求的逻辑功能,并且在速度、功耗、价格和可靠性方面实现较为合理的平衡。不过,这种设计也并非是绝对的,在设计的过程中,有时也需要用到自下而上的方法,就是在系统划分和分解的基础上,先进行底层单元设计,然后逐步向上进行功能块、子系统的设计,直至构成整个系统。

图1.3所示是用Top-down的设计方式设计CPU的示意图。首先在系统级划分,将整个CPU划分为几个模块,如ALU,PC,RAM模块等,对每个模块分别进行设计与描述,然后通过EDA工具将整个设计综合为门级网表,并实现它。在设计过程中,需要进行多次仿真和验证,不断修改设计。图1.2 Top-down设计方式图1.3 CPU的Top-down设计方式示意图1.2.2 Bottom-up设计

Bottom-up设计,即自底向上的设计,这是一种传统的设计思路。这种设计方式,一般是设计者选择标准集成电路,或者将各种基本单元,如各种门电路以及加法器、计数器等模块做成基本单元库,调用这些基本单元,逐级向上组合,直到设计出满足自己需要的系统。这样的设计方法就如同一砖一瓦建造金字塔,不仅效率低、成本高,而且容易出错。

Top-down设计由于更符合人们逻辑思维的习惯,也容易使设计者对复杂的系统进行合理的划分与不断的优化,因此是目前设计思想的主流。而 Bottom-up 设计往往使设计者关注了细节,而对整个系统缺乏规划,当设计出现问题时,如果要修改,就会比较麻烦,甚至前功尽弃,不得不从头再来。因此,在数字系统的设计中,主要采用Top-down的设计思路,而以Bottom-up设计为辅。1.2.3 IP复用技术与SoC

电子系统的设计越向高层发展,基于IP复用(IP Reuse)的设计技术越显示出优越性。IP(Intellectual Property)原来的含义是指知识产权、著作权等,在IC设计领域,可将其理解为实现某种功能的设计,IP核(IP模块)则是指完成某种功能的设计模块。

IP 核分为硬核、固核和软核三种类型。软核指的是在寄存器级或门级对电路功能用HDL进行描述,表现为VHDL或Verilog HDL代码。软核与生产工艺无关,不涉及物理实现,为后续设计留有很大空间,增大了IP的灵活性和适应性。用户可以对软核的功能加以裁剪以符合特定的应用,也可以对软核的参数进行设置,包括总线宽度、存储器容量、使能或禁止功能块等。硬核指的是以版图形式实现的设计模块,它基于一定的设计工艺,通常用GDS II格式表示,不同的客户可以根据自己的需要选用特定生产工艺下的硬核。固核是完成了综合的功能块,通常以网表的形式提交客户使用。软核使用灵活,但其可预测性差,延时不一定能达到要求;硬核可靠性高,能确保性能,如速度、功耗等,能够很快地投入使用。

如图1.4所示,由微处理器核(MPU Core)、数字信号处理器核(DSP Core)、存储器核(RAM/ROM)、A/D、D/A 核和 USB 接口核等构成一个系统芯片(SoC)。用户在设计一个系统时,可以自行设计各个功能模块,也可以用IP模块来构建。对设计者来说,想要在短时间内开发出新产品,一个比较好的方法就是使用IP核完成设计。目前,还有专门的组织VSIA(Virtual Socket Interface Association,虚拟插座接口协会)来制定关于IP产品的标准与规范。图1.4 系统芯片(SoC)示意图

如上所述,基于IP复用的开发给设计者带来了诸多好处,如节省时间、缩短开发周期、避免重复劳动等。当然,IP的发展还存在一些问题,如IP版权的保护、IP的保密、IP间的集成等。但基于IP复用的设计技术无疑会成为电子系统开发的重要手段之一。

系统芯片(SoC),或者称为芯片系统、片上系统,是指把一个完整的系统集成在一个芯片上;或者说是用一个芯片实现一个功能完整的系统。系统芯片可以采用全定制的方式来实现,把设计的网表文件提交给半导体厂家流片得到,但采用这种方式风险性高、费用大、周期长。还有一种方式是采用可编程逻辑器件来实现。CPLD和FPGA 的集成度越来越高,速度也越来越快,设计者可以在其上通过编程完成自己的设计。今天,已不仅能用它们实现一般的逻辑功能,还可以把微处理器、DSP、存储器、标准接口等功能部件全部集成在其中,真正实现System on Chip。

微电子制造工艺的进步为SoC的实现提供了硬件基础,而EDA软件技术的提高则为SoC创造了必要的开发平台。目前,EDA的新工具、新标准和新方法正在向着高层化发展,过去已将设计从晶体管级提高到了逻辑门级,后来,又提高到了寄存器传输级,现在则越来越多地在系统级完成。

在数字系统进入SoC时代后,设计方法也随之产生变化。如果把器件的设计看成是设计者根据设计规则用软件搭接已有的不同模块,那么早期的设计是基于晶体管的(Transistor Based Design)。在这一阶段,设计者最关心的是怎样减小芯片的面积,所以又称为面积驱动的设计(Area Driving Design,ADD)。随着设计方法的改进,出现了以门级模块为基础的设计(Gate Based Design)。在这一阶段,设计者在考虑芯片面积的同时,更多关注门级模块之间的延时,所以这种设计又称为时延驱动的设计(Time Driving Design,TDD)。20世纪90年代以来,芯片的集成度进一步提高,系统芯片SoC的出现,使得以IP模块复用为基础的设计逐渐流行,这种设计方法称为基于模块的设计方法(Block Based Design,BBD)。在应用 BBD 方法进行设计的过程中,逐渐产生的一个问题是,在开发完一个产品后,怎么能尽快开发出其系列产品。这样就产生了新的概念——PBD,PBD是基于平台的设计方法(Platform Based Design),它是一种基于IP的、面向特定应用领域的SoC设计环境,可以在更短的时间内设计出满足需要的电路。PBD的实现依赖于如下关键技术的突破:高层次系统级的设计工具,软硬件协同设计技术,等等。图1.5是上述设计方法演变的示意图。图1.5 设计方法的演变

1.3 数字设计的流程

数字系统的实现主要可选择两类器件,一类是可编程逻辑器件(PLD),另一类是专用集成电路(ASIC),这两类器件各有优点。

PLD(主要包括FPGA和CPLD)是一种半定制的器件,器件内已做好各种逻辑资源,用户只需对器件内的资源编程连接就可实现所需的功能,而且可以反复修改、反复编程,直到满足设计要求。用PLD实现设计直接面向用户,具有其他方法不可比拟的方便性、灵活性和通用性,硬件测试和实现快捷,开发效率高、成本低、风险小。现代FPGA器件集成度不断提高,等效门数已达到了千万门级,在器件中,除集成各种逻辑门和寄存器外,还集成了嵌入式块 RAM、硬件乘法器、锁相环、DSP 块等功能模块,使 FPGA 的使用更方便。EDA开发软件对PLD器件提供强有力的支持,其功能更全面、兼容性更强。

专用集成电路(Application Specific Integrated Circuit,ASIC)指用全定制方法来实现设计的方式,它在最低层,即物理版图级实现设计,因此也称为掩膜(Mask)ASIC。采用ASIC,能得到最高速度、最低功耗和最省面积的设计。它要求设计者必须使用版图编辑工具从晶体管的版图尺寸、位置及连线开始进行设计,以得到芯片的最优性能。在进行版图设计时,设计者需手工设计版图并精心地布局布线,以获得最佳的性能和最小的面积。版图设计完成后,还要进行一系列检查和验证,包括设计规则检查、电学规则检查、连接性检查、版图与电路图一致性检查等,全部通过后,才可以将得到的标准格式的版图文件(一般为CIF、GDS II格式)交给半导体厂家进行流片。

ASIC是在母片(晶圆)的基础上实现芯片的,图1.6所示为一片8寸的晶圆(Wafer),每一个小方格经过切割,封装后就是一颗芯片。ASIC的实现成本高、设计周期长,但可以设计出速度高、功耗低、尽量节省面积的芯片,适用于对性能要求很高、批量很大的芯片。图1.6 晶圆

采用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语言。进入20世纪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 布局布线

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

布局布线完成后产生如下一些重要的文件:(1)芯片资源耗用情况报告。(2)面向其他EDA工具的输出文件,如EDIF文件等。(3)产生延时网表结构,以便进行精确的时序仿真,因为已经提取出延时网表,所以仿真结果能比较精确地预测未来芯片的实际性能。如果仿真结果达不到设计要求,就需要修改源代码或选择不同速度的器件,直至满足设计要求。(4)器件编程文件:如用于CPLD编程的JEDEC,POF等格式的文件;用于FPGA配置的SOF,JAM,BIT等格式的文件。

布局布线与芯片的物理结构直接相关,因此,一般选择芯片制造商提供的开发工具进行此项工作。1.3.4 仿真

仿真(Simulation)也称为模拟,是对所设计电路的功能的验证。用户可以在设计过程中对整个系统和各模块进行仿真,即在计算机上用软件验证功能是否正确、各部分的时序配合是否准确。有问题可以随时进行修改,避免了逻辑错误。高级的仿真软件还可以对整个系统设计的性能进行估计。规模越大的设计,越需要进行仿真。

仿真包括功能仿真(Function Simulation)和时序仿真(Timing Simulation)。不考虑信号时延等因素的仿真,称为功能仿真,又叫前仿真;时序仿真又称后仿真,它是在选择具体器件并完成布局布线后进行的包含延时的仿真。由于不同器件的内部时延不一样,不同的布局、布线方案也给延时造成很大的影响,因此在设计实现后,对网络和逻辑块进行时延仿真、分析定时关系、估计设计性能,是非常必要的。1.3.5 编程配置

把适配后生成的编程文件装入 PLD 器件中的过程称为下载。通常将对基于 EEPROM工艺的非易失结构 CPLD 器件的下载称为编程(Program),而将基于 SRAM 工艺结构的FPGA 器件的下载称为配置(Configuration)。编程需要满足一定的条件,如编程电压、编程时序和编程算法等。有两种常用的编程方式:在系统编程(In-System Programmable,ISP)和用专用的编程器编程,现在的PLD器件一般都支持在系统编程,因此在设计数字系统和做PCB时,应预留器件的下载接口。

1.4 常用的EDA工具软件

EDA工具软件有两种分类方法:一种是按公司类别进行分类,另一种是按照软件的功能进行划分。按公司类别分,大体有两类:一类是专业EDA软件公司开发的工具,也称为第三方 EDA 软件工具,专业 EDA 公司较著名的有 Cadence Design Systems、Mentor Graphics、Synopsys和Synplicity四家,它们的软件工具被广泛应用;一类是PLD器件厂商为销售其芯片而开发的EDA工具,较著名的有Intel(Altera)、Xilinx、Lattice等。前者独立于半导体器件厂商,其推出的EDA软件功能强,相互之间具有良好的兼容性,适合进行复杂和高效率的设计,但价格昂贵;后者能针对自己器件的工艺特点做出优化设计,提高资源利用率、降低功耗、改善性能,适合产品开发单位使用。

按照功能划分,EDA软件工具可分为如下几类。

1.集成的FPGA/CPLD开发工具

集成的FPGA/CPLD开发工具是由FPGA/CPLD芯片生产厂家提供的,这些工具可以完成从设计输入(原理图或 HDL)、逻辑综合、模拟仿真到适配下载等全部工作。常用的集成开发工具见表1.1,这些开发工具多数将一些专业的第三方软件集成在一起,方便用户在设计过程中选择专业的第三方软件完成某些设计任务。表1.1 常用的集成FPGA/CPLD开发工具

2.设计输入工具

输入工具主要是帮助用户完成原理图和HDL文本的编辑和输入工作。好的输入工具支持多种输入方式,包括原理图、HDL 文本、波形图、状态机、真值表等。例如,HDL Designer Series是Mentor公司的设计输入工具,包含于FPGA Advantage软件中,可以接受 HDL 文本、原理图、状态图、表格等多种设计输入形式,并将其转化为 HDL文本表达方式,功能很强。输入工具可帮助用户提高输入效率,多数人习惯使用集成开发软件或者综合/仿真工具中自带的原理图和文本编辑器,也可以直接使用普通文本编辑器,如Notepad++等。

3.逻辑综合器(Synthesizer)

逻辑综合是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图描述,依据给定的硬件结构和约束控制条件进行编译、优化和转换,最终获得门级电路甚至更底层的电路描述网表文件的过程。

逻辑综合工具能够自动完成上述过程,产生优化的电路结构网表,输出.edf 文件,导入FPGA/CPLD厂家的软件进行适配和布局布线。专业的逻辑综合软件通常比FPGA/CPLD厂家的集成开发软件自带的逻辑综合功能更强,能得到更优化的结果。

最著名的用于FPGA/CPLD设计的HDL综合工具有如下3个:

●Synopsys公司的FPGA Express、FPGA Compiler和FPGA Compiler II;

●Synplicity(Synplicity已被Synopsys收购)的Synplify Pro/Synplify;

●Mentor的Leonardo Spectrum。

表1.2中对这3个工具的性能做了介绍。表1.2 常用的HDL综合工具

4.仿真器

仿真工具提供了对设计进行模拟仿真的手段,包括布线以前的功能仿真(前仿真)和布线以后包含延时的时序仿真(后仿真)。在一些复杂的设计中,仿真比设计本身还要艰巨,因此有人认为仿真是EDA的精髓所在,仿真器的仿真速度、仿真的准确性、易用性等成为衡量仿真器性能的重要指标。

仿真器按对设计语言的处理方式分为两类:编译型仿真器和解释型仿真器。编译型仿真器的仿真速度快,但需要预处理,因此不能即时修改;解释型仿真器的仿真速度要慢一些,但可以随时修改仿真环境和仿真条件。按处理的HDL语言类型,仿真器可分为Verilog HDL仿真器、VHDL仿真器和混合仿真器,混合仿真器能够同时处理Verilog HDL和VHDL。

常用的HDL仿真软件如表1.3所示。表1.3 常用的HDL仿真软件

ModelSim能够提供很好的Verilog HDL和VHDL混合仿真;NC-Verilog和VCS是基于编译技术的仿真软件,能够胜任行为级、RTL 级和门级各种层次的仿真,速度快;而Verilog-XL是基于解释的仿真工具,速度要慢一些。

5.芯片版图设计软件

提供IC版图设计工具的著名公司有Cadence、Mentor、Synopsys等,Synopsys的优势在于其逻辑综合工具,而Mentor和Cadence则能够在设计的各个层次提供全套的开发工具。在晶体管级或基本门级提供图形输入工具的有 Cadence 公司的 Composer、Viewlogic 公司的 Viewdraw 等。专用于 IC 的综合工具有 Synopsys 公司的 Design Compiler 和 Behavial Compiler,Synplicity公司的Synplify ASIC,Cadence公司的Synergy等。IC仿真工具的关键在于,晶体管物理模型的建立和实际工艺中晶体管物理特性相符的模型,必然得到和实际电路更符合的工作波形。随着IC集成度的日益提高、线宽的日趋缩小,晶体管的模型也日趋复杂。任何电路仿真都基于一定的厂家库,在这些库文件中,制造厂家为设计者提供了相应的工艺参数。SPICE是著名的模拟电路仿真工具,SPICE最早产生于伯克利大学,经历数十年的发展,随晶体管线宽的不断缩小,SPICE 也引入了更多的参数和更复杂的晶体管模型,使其在亚微米和深亚微米工艺的今天依旧是模拟电路仿真的重要工具之一。此外,还有其他一些IC版图工具,如自动布局布线(Auto Plane&Route)工具、版图输入工具、物理验证(Physical Validate)和参数提取(LVS)工具,等等。半导体集成技术还在不断发展,相应的IC设计工具也不断地更新换代,以提供对IC设计的全方位支持,应该说,没有EDA工具就没有IC。

6.其他EDA专用工具

除了上面介绍的EDA软件外,一些公司还推出了一些开发套件和专用的开发工具,比如,Quartus Prime推出的Platform Designer就是一种基于PBD(Platform Based Design)设计理念的开发工具,它是一种基于IP的面向SoC的设计环境,可以在更短的时间内设计出满足需要的电路。这些专用的EDA开发套件和开发工具如表1.4所示。表1.4 专用的EDA开发套件和开发工具

1.5 EDA技术的发展趋势

1.高性能的EDA工具将得到进一步发展

随着市场需求的增长,集成工艺水平及计算机自动设计技术的不断提高,单片系统或系统集成芯片成为IC设计的主流,这一发展趋势表现在以下几个方面。(1)超大规模集成电路技术水平的不断提高,超深亚微米(VDSM)工艺(如14 nm)已经走向成熟,在一个芯片上完成系统级的集成已成为现实。(2)由于工艺线宽的不断减小,在半导体材料上的许多寄生效应已经不能简单地被忽略,这就对EDA工具提出了更高的要求。同时,也使得IC生产线的投资更为巨大,可编程逻辑器件开始进入传统的ASIC市场。(3)市场对电子产品提出更高的要求,如必须降低电子系统的成本,减小系统的体积等,从而对系统的集成度不断提出更高的要求。同时,设计效率也成为一个产品能否成功的关键因素,促使EDA工具和IP核应用更为广泛。(4)高性能的EDA工具将得到长足的发展,其自动化和智能化程度将不断提高,从而为嵌入式系统设计提供功能强大的开发环境。此外,计算机硬件平台性能的大幅度提高,也为复杂的SoC设计提供了物质基础。

现在的硬件描述语言只提供行为级或功能级的描述,尚无法完成系统级的抽象描述,因此人们正尝试开发一种新的系统级设计语言来完成这一工作,现在已经开发出更趋于电路行为级设计的硬件描述语言,如SystemC、System Verilog等。SystemC由Synopsys公司和 CoWare 公司合作开发,目前已有一些 EDA 公司成立“开放式 SystemC 联盟”,支持SystemC 的开发。还出现了一些系统级混合仿真工具,可以在同一个开发平台上完成高级语言(如C/C++等)与标准硬件描述语言(Verilog HDL、VHDL)的混合仿真。

2.EDA技术将促使ASIC和FPGA逐步走向融合

随着系统开发对EDA技术的目标器件各种性能指标要求的提高,ASIC和FPGA将更大程度地相互融合。这是因为,虽然标准逻辑 ASIC 芯片尺寸小、功能强、耗电省,但设计复杂,并且有批量生产要求;可编程逻辑器件的开发费用低,能现场编程,但体积大、功耗大。因此FPGA和ASIC正在走到一起,两者之间正在诞生一种“杂交”产品,互相融合,取长补短,以满足成本和上市速度的要求。例如,将可编程逻辑器件嵌入标准单元。

3.EDA技术的应用领域将更为广泛

从目前的EDA技术来看,其特点是使用普及、应用面广、工具多样。ASIC和PLD器件正在向超高速、高密度、低功耗、低电压方向发展。EDA技术水平不断进步,设计工具不断趋于完善。

习题1

1.1 现代EDA技术的特点有哪些?

1.2 什么是Top-down设计方式?

1.3 数字系统的实现方式有哪些?各有什么优缺点?

1.4 什么是IP复用技术?IP核对EDA技术的应用和发展有什么意义?

1.5 用硬件描述语言设计数字电路的优势是什么?

1.6 结合自己的使用情况谈谈对EDA工具的认识。

1.7 基于FPGA/CPLD的数字系统设计流程包括哪些步骤?

1.8 什么是综合?常用的综合工具有哪些?

1.9 功能仿真与时序仿真有什么区别?

1.10 FPGA与ASIC在概念上有什么区别?

第2章 FPGA/CPLD器件

可编程逻辑器件(Programmable Logic Device,PLD)是20世纪70年代发展起来的一种新型器件,它的应用和发展不仅简化了电路设计、降低了开发成本、提高了系统可靠性,而且给数字系统的设计方式带来了革命性的变化。PLD器件不断进步,其动力来自实际需求和芯片制造商间的竞争,PLD在结构、容量、速度和灵活性方面不断提升性能。

2.1 PLD器件概述

PLD器件的工艺和结构经历了一个不断发展变革的过程。2.1.1 PLD器件的发展历程

PLD器件的雏形是20世纪70年代中期出现的可编程逻辑阵列(Programmable Logic Array,PLA),PLA 在结构上由可编程的与阵列和可编程的或阵列构成,阵列规模小,编程烦琐。后来出现了可编程阵列逻辑(Programmable Array Logic,PAL),PAL由可编程的与阵列和固定的或阵列组成,采用熔丝编程工艺,它的设计较PLA灵活、快速,因而成为第一个得到普遍应用的PLD器件。

20世纪80年代初,美国的Lattice公司发明了通用阵列逻辑(Generic Array Logic,GAL)。GAL器件采用了输出逻辑宏单元(OLMC)的结构和EEPROM工艺,具有可编程、可擦除、可长期保持数据的优点,使用方便,所以GAL得到了更为广泛的应用。

之后,PLD器件进入了一个快速发展时期,向着大规模、高速度、低功耗的方向发展。20 世纪 80 年代中期,Altera 公司推出一种新型的可擦除、可编程的逻辑器件(Erasable Programmable Logic Device,EPLD),EPLD采用CMOS和UVEPROM工艺制成,集成度更高、设计更灵活,但它的内部连线功能弱一些。

1985年,美国Xilinx公司推出了现场可编程门阵列(Field Programmable Gate Array,FPGA),这是一种采用单元型结构的新型的PLD器件。它采用CMOS、SRAM工艺制作,在结构上和阵列型PLD不同,它的内部由许多独立的可编程逻辑单元构成,各逻辑单元之间可以灵活地相互连接,具有密度高、速度快、编程灵活、可重新配置等优点,FPGA 成为当前主流的PLD器件之一。

CPLD(Complex Programmable Logic Device),即复杂可编程逻辑器件,是从EPLD改进而来的,采用EEPROM工艺制作。同EPLD相比,CPLD增加了内部连线,对逻辑宏单元和I/O单元也有重大改进,它的性能好,使用方便。尤其是在Lattice公司提出在系统编程(In System Programmable,ISP)技术后,相继出现了一系列具备ISP功能的CPLD器件,CPLD是当前另一主流的PLD器件。

PLD器件仍处在不断发展变革中。由于PLD器件在其发展过程中出现了很多种类,不同公司生产的PLD,其工艺与结构也各不相同,因此就产生了不同的分类标准,以对众多的PLD器件进行划分。2.1.2 PLD器件的分类

1.按集成度分类

集成度是 PLD 器件的一项重要指标,如果从集成密度上分,PLD 可分为低密度 PLD器件(LDPLD)和高密度PLD器件(HDPLD),低密度PLD器件也可称为简单PLD器件(SPLD)。历史上,GAL22V10是简单PLD和高密度PLD的分水岭,一般按照GAL22V10芯片的容量区分SPLD和HDPLD。GAL22V10的集成度大致在500~750门。如果按照这个标准,PROM,PLA,PAL和GAL属于简单PLD,而CPLD和FPGA则属于高密度PLD,如表2.1所示。表2.1 PLD器件按集成度分类

1)简单的可编程逻辑器件(SPLD)

SPLD包括PROM、PLA、PAL和GAL四类器件。(1)可编程只读存储器(Programmable Read-Only Memory,PROM)。PROM采用熔丝工艺编程,只能写一次,不可以擦除或重写。随着技术的发展和应用上的需求,出现了一些可多次擦除使用的存储器件,如EPROM(紫外线擦除可编程只读存储器)和EEPROM (电擦写可编程只读存储器)。PROM 具有成本低、编程容易的特点,适于存储数据、函数和表格。(2)可编程逻辑阵列(PLA)。PLA现在基本已经被淘汰。(3)可编程阵列逻辑(PAL)。GAL可以完全代替PAL器件。(4)通用可编程阵列逻辑(GAL)。由于GAL器件简单、便宜,使用也方便,因此在一些成本低、保密要求低、电路简单的场合仍有应用价值。

以上四类SPLD器件都是基于“与或”阵列结构的,不过其内部结构有明显区别,主要表现在与阵列、或阵列是否可编程,输出电路是否含有存储元件(如触发器),以及是否可以灵活配置(可组态)方面,具体的区别如表2.2所示。表2.2 四种SPLD器件的区别

2)高密度可编程逻辑器件(HDPLD)

HDPLD主要包括CPLD和FPGA两类器件,这两类器件也是当前PLD器件的主流。

2.按编程特点分类

1)按编程次数分类

PLD器件按照可以编程的次数分为两类:(1)一次性编程器件(One Time Programmable,OTP);(2)可多次编程器件。

OTP类器件的特点是:只允许对器件编程一次,不能修改;而可多次编程器件则允许对器件多次编程,适合在科研开发中使用。

2)按不同的编程元件和编程工艺划分

PLD器件的可编程特性是通过器件的可编程元件来实现的,按照不同的编程元件和编程工艺划分,PLD器件可分为下面几类。(1)采用熔丝(Fuse)编程元件的器件,早期的PROM器件采用此类编程结构,编程过程就是根据设计的熔丝图文件来烧断对应的熔丝以达到编程的目的。(2)采用反熔丝(Antifuse)编程元件的器件,反熔丝是对熔丝技术的改进,在编程处通过击穿漏层使得两点之间获得导通,与熔丝烧断获得开路正好相反。(3)采用紫外线擦除、电编程方式的器件,如EPROM。(4)EEPROM型,即采用电擦除、电编程方式的器件,目前多数的CPLD采用此类编程方式,它是对 EPROM 编程方式的改进,用电擦除取代了紫外线擦除,提高了使用的方便性。(5)闪速存储器(Flash)型。(6)采用静态存储器(SRAM)结构的器件,即采用SRAM查找表结构的器件,大多数的FPGA采用此类结构。

一般将采用前 5 类编程工艺结构的器件称为非易失类器件,这类器件在编程后,配置数据将一直保持在器件内,直至被擦除或重写;而采用第6类编程工艺的器件则称为易失类器件,这类器件在每次掉电后配置数据会丢失,因而每次上电都需要重新进行配置。

采用熔丝或反熔丝编程工艺的器件只能写一次,所以属于OTP类器件,其他种类的器件都可以反复多次编程。Actel、Quicklogic的部分产品采用反熔丝工艺,这种PLD是不能重复擦写的,所以用于开发会比较麻烦,费用也比较高。反熔丝技术也有许多优点:布线能力强、系统速度快、功耗低,同时抗辐射能力强、耐高低温、可加密,所以适合在一些有特殊要求的领域运用,如军事及航空航天。

3.按结构特点分类

按照不同的内部结构可以将PLD器件分为如下两类。

1)基于乘积项(Product-Term)结构的PLD器件

乘积项结构的 PLD 器件的主要结构是与或阵列,此类器件都包含一个或多个与或阵列,低密度的PLD(包括PROM,PLA,PAL和GAL 4种器件)、EPLD及绝大多数的CPLD器件(包括Altera的MAX7000,MAX3000A系列,Xilinx的XC9500系列等,Lattice、Cypress的大部分CPLD产品)都是基于与或阵列结构的,这类器件多采用EEPROM或Flash工艺制作,配置数据掉电后不会丢失,器件容量大多小于5 000门的规模。

2)基于查找表(Look Up Table,LUT)结构的PLD器件

查找表的原理类似于 ROM,其物理结构基于静态存储器(SRAM)和数据选择器(MUX),通过查表方式实现函数功能。函数值存放在 SRAM 中,SRAM 的地址线即输入变量,不同的输入通过数据选择器(MUX)找到对应的函数值并输出。查找表结构的功能强,速度快,N个输入的查找表可以实现任意N输入变量的组合逻辑函数。

绝大多数的FPGA器件都基于SRAM查找表结构实现,比如Altera的Cyclone、ACEX 1K器件,Xilinx的XC4000、Spartan器件等。此类器件的特点是集成度高(可实现百万逻辑门以上设计规模)、逻辑功能强,可实现大规模的数字系统设计和复杂的算法运算,但器件的配置数据易失,需外挂非易失配置器件存储配置数据,才能构成可独立运行的系统。

2.2 PLD的基本原理与结构

PLD 是一类实现逻辑功能的通用器件,它可以根据用户的需要构成不同功能的逻辑电路。PLD 器件内部主要由各种逻辑功能部件(如逻辑门、触发器等)和可编程开关构成,如图2.1所示,这些逻辑部件通过可编程开关按照用户的需要连接起来,即可完成特定的功能。图2.1 逻辑部件和可编程开关构成PLD器件2.2.1 PLD器件的基本结构

任何组合逻辑函数均可化为“与或”表达式,用“与门—或门”二级电路实现,而任何时序电路又都可以由组合电路加上存储元件(触发器)构成。因此,从原理上说,与或阵列加上触发器的结构就可以实现任意的数字逻辑电路。PLD器件就是采用这样的结构,再加上可以灵活配置的互连线,从而实现任意的逻辑功能。

图2.2表示的是PLD器件的基本结构图,它由输入缓冲电路、与阵列、或阵列和输出缓冲电路四部分组成。“与阵列”和“或阵列”是主体,主要用来实现各种逻辑函数和逻辑功能;输入缓冲电路用于产生输入信号的原变量和反变量,并增强输入信号的驱动能力;输出缓冲电路主要用来对将要输出的信号进行处理,既能输出纯组合逻辑信号,也能输出时序逻辑信号,输出缓冲电路中一般有三态门、寄存器等单元,甚至是宏单元,用户可以根据需要灵活配置成各种输出方

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载