fpga-cpld讲义及试验指导(清华大学电子系)_第1页
fpga-cpld讲义及试验指导(清华大学电子系)_第2页
fpga-cpld讲义及试验指导(清华大学电子系)_第3页
fpga-cpld讲义及试验指导(清华大学电子系)_第4页
fpga-cpld讲义及试验指导(清华大学电子系)_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、可编程逻辑器件与应用专题讲义附实验指导书清华大学电子工程系第一章 绪论§1.1 可编程ASIC综述为特定的产品或应用而设计的芯片被称为专用集成电路ASIC(Application Specific Integrated Circuits),除了全定制的专用集成电路外,目前有五种半定制的元件,可实现ASIC的要求,它们是:*可编程逻辑器件(PLD)*复杂可编程逻辑器件(CPLD)*现场可编程门阵列(FPGA)*门阵列(Gate Array)*标准单元(Standard Cell)在这些器件中,尤其是前三种器件的出现,使得电子系统的设计工程师利用相应的EDA软件,在办公室或实验室里就可以

2、设计自己的ASIC器件,其中近几年发展起来的CPLD和FPGA格外引人注目。这三种器件都具有用户可编程性,能实现用户需要的各种专门用途,因此被称作可编程专用集成电路。半导体制造厂家可按照通用器件的规格大批量生产这种集成电路,作为一种通用集成电路,用户可以从市场上选购,再通过设计软件编程实现ASIC的要求。由于这种方式对厂家和用户都带来了好处而受到欢迎,因此发展特别迅速,已经成为实现ASIC的一种重要手段。随着半导体技术的迅速发展,从八十年代开始,构造许多电子系统仅仅需要三种标准电路:微处理器,存储器和可编程ASIC。电子系统设计的这场革命是从70年代开始的,当时存储器已经作为标准产品进入市场,

3、而80年代的微处理器也成为一种标准产品。值得注意的是,微处理器和存储器作为电子系统的两个主要模块,一直都是可编程的。但是组成电子系统的各种控制逻辑仍然需要大量的中小规模通用器件。直到近十年来,随着可编程逻辑器件的出现,才给电子系统的控制逻辑提供了可编程的灵活性。而可编程门阵列作为一种高密度,通用的可编程逻辑器件与它的开发系统一起为更多的电子系统逻辑设计确定了一种新的工业标准。越来越多的电子系统设计工程师用CPLD或FPGA作为电子系统设计的第三个模块来实现一个电子系统。CMOS半导体技术的不断发展推动了电子系统逻辑设计的这一变革。人们历来认为CMOS速度太慢,不能满足高性能系统设计的需要,很多

4、设计只能用一次可编程(OTP)的双极型可编程逻辑器件(PLD)来完成。而现在许多CMOS的可编程逻辑器件实际上已达到或超过双极型的性能,同时还具有低功耗、可编程和高集成度等吸引人的优点。目前可编程ASIC正朝着为设计者提供系统内可再编程(或可再配置)的能力方向发展,即可编程ASIC器件不仅要具有可编程和可再编程能力,而且只要把器件插在系统内或电路板上,就能对其进行编程或再编程,这就为设计者进行电子系统的设计和开发提供了最新的实现手段,而在以前这是不可想象的。采用系统内可再编程(ISP)技术,使得系统内硬件的功能可以像软件一样被编程来配置,从而可以实时地进行灵活和方便的更改和开发。这种称为“软”

5、硬件的全新设计概念,使得新一代电子系统只有极强的灵活性和适应性,它不仅使电子系统的设计和产品性能的改进、扩充变得十分简易和方便,而且使电子系统只有多功能性的适应能力,从而可以为许多复杂的信号处理技术提供新的思路和方法。随着可编程器件规模的增加,使器件变得越来越复杂,对器件作全面彻底测试的要求也就越来越高,而且越来越重要。表面安装的封装和电路板制造技术的进步,使得电路板变小变密,这样一来,传统的测试方法,例如外探针测试法和“钉床”测试夹具法都难于实现。结果由于电路板简化所节约的成本,很可能被传统测试方法代价的提高而抵消掉。20世纪80年代联合测试行动组JTAG(Joint Test Action

6、 Group)开发了IEEE1149.1-1990边界扫描测试技术规范。这个边界扫描测试(BST)结构提供了有效地测试引线间隔致密的电路板上零部件的能力。你可以使用BST结构测试引脚连接而不必使用物理测试探针,而且可以在器件正常工作时捕获功能数据。器件的边界扫描单元能够迫使逻辑追踪引脚信号,或是从引脚或器件核心逻辑信号中捕获数据。强行加入的测试数据串行移入边界扫描单元,捕获的数据串行移出并在器件外部同预期的结果进行比较。JTAG标准提供了板级和芯片级的测试。通过定义输入输出引脚、逻辑控制函数和指令,所有JTAG的测试功能部仅需一个四线或五线的接口及相应的软件即能完成。图1-1举例说明了边界扫描

7、测试法的概念。图1-1 JTAG边界扫描测试法可编程逻辑器件规模的不断发展,使其可以实现电子系统的高度集成,为了快速准确地设计复杂的电子系统,必须采用计算机自顶向下的设计和综合工具。综合工具一般包括从原理图和高层描述工具、逻辑仿真器,到底层综合工具的一系列软件包。底层的综合工具对设计进行逻辑描述,并执行逻辑优化、器件映射、布局布线的网表优化,从而产生最终的设计结果。对于简单的设计,采用原始图输入或布尔方程输入是比较合适的。但对于复杂系统的设计,这两种输入方法变得繁琐而复杂并容易产生错误,而必须考虑高层次的设计输入方法。因此很多综合工具支持硬件描述语言(HDL),寄存器转换语言(RTL)或有限状

8、态机(FSM)。高层综合工具可以采用高层的行为描述,如VHDL或编程语言。行为描述语言不需要说明一个设计具体采用何种方式实现。高层综合包括选择特定的结构模板,然后执行资源分配,寄存器分配和定时。所以在高层设计期间,设计者基本是在速度和资源之间所取舍。例如,相同的行为设计,当速度要求不高时,可以采用完全的流水线方式的逻辑设计来实现。从一个满意的行为描述开始的设计,使设计者能够有更广泛的选择余地,来找出哪一个最适合特定的实现环境。高层设计方法的另一个主要优点是更容易理解和维护。目前,电子设计自动化软件不再是简单的CAD或CAT,已经发展到“电子系统设计自动化(EDA)”,软件平台也已从小型机覆盖到

9、工作站到高性能微机,一般都包含了符合IEEE-1076标准的VHDL高层综合工具,这些都为可编程ASIC的设计带来了极大的方便。特别对于中小规模系统的集成,可编程逻辑器件成为首选的方案。这也是可编程逻辑器件得到广泛应用的原因之一。§1.2 可编程逻辑器件的分类可编程逻辑器件包括一个未配置的逻辑单元阵列,此阵列可以编程实现所需的逻辑功能,并通过可编程互连接到所要求的输入、输出。这些逻辑单元可以是门、反相器、触发器或较大的宏单元,并且有它自身的可编程局部互连系统。可编程互连是由可编程的开关阵列和连接逻辑单元的固定信号线组成。可编程逻辑器件有许多不同的分类方法,下面主要介绍四种:1.2.1

10、 从互连特性上分类从互连特性上,可编程逻辑器件结构可以分为确定型和统计型两大类。确定型的PLD包括PROM、PLA、PAL、FPLA、GAL、EPLD和EEPLD。它们所提供的互连结构每次都用相同的互连线实现布线。所以这类可编程逻辑器件的延时特性常常可以从数据手册上直接查到,而不需通过设计软件来确定。统计型的器件主要是现场可编程门阵列(FPGA)。FPGA的设计软件每次完成相同的功能却给出不同的布线结果,所以称为统计型的结构。因此在电路设计时必须允许设计者限制功能中关键路径的时序变化,确保它们不超出系统的技术要求。1.2.2 从可编程特性上分类:目前为用户提供的编程手段主要有四种:*一次编程熔

11、丝或逆熔丝;*EPROM结构,即紫外线擦除电报编程存储单元(UVEPROM)采用紫外线互补金属氧化半导体(UVCMOS);*电擦除和再编程存储单元。一类是EEPROM,为电擦除式互补金属氧化半导体(EECMOS);另一类是结构与UVEPROM类似,但采用电擦除的闪速存储单元(FLASH MEMORY);*基于静态存储器(SRAM)的编程结构。所以根据编程能力可以将它们分为两大类,一类是不可以再编程的,确定型的PAL和统计型采用逆熔丝的FPGA都是不可再编程的;另一类是可再编程的,确定型的GAL和统计型的采用SRAM的FPGA 属于此类。1.2.3 从器件容量上分类由于可编程逻辑器件本身结构上和

12、半导体生产工艺的不断改进和提高,器件的密度不断增加,性能亦不断提高,目前可编程逻辑器件的容量已达到百万门以上。从容量上对可编程逻辑器件的分类是将复杂的可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)统称为高容量可编程逻辑器件(HCPLD)。1.2.4 从结构的复杂程度上分类从结构上对可编程逻辑进行分类是最常用的方法,而且各类可编程逻辑器件的开发系统都是针对其结构来设计的,了解和掌握可编程逻辑器件的结构对合理、有效地选用开发软件来设计可编程逻辑器件就很重要。从结构上可将可编程逻辑器件分为以下三类:*简单可编程逻辑器件(PLD);*复杂可编程逻辑器件(CPLD);*可编程门阵列(FPGA)

13、。第二章 可编程逻辑器件的结构和特点§2.1 概述可编程逻辑器件(PLD)是一个逻辑电路,可由用户编程来实现特定的逻辑功能。许多PLD器件的功能已经或多或少变成工业标准,即可以像标准74系列中小规模器件那样。设计人员可以按照产品手册,根据速度、功耗、成本进行选择,并能从不同的厂家购买到。而且,PLD器件还提供了标准74系列器件无法提供的可编程功能,用户可以将一些中小规模器件的功能集成到一个或几个PLD中,极大的简化了印制板的设计,因此PLD成为最早实现可编程ASIC的器件。§2.2 PLD的结构PLD的主要部分由两个逻辑阵列构成,一个与阵和一个或阵。输入到PLD的信号首先通

14、过与阵,形成输入信号的组合,每组与项称为布尔代数的最小项或乘积项,这些乘积项在或阵中进行逻辑或后由输出宏单元输出。输入信号的反码由输入缓冲器产生,PLD的布线由阵列实现,所以只要逻辑功能能够放进PLD器件,布线就能够成功。图2-1是PLA的结构示意图PLD器件的与或阵列结构可以有效地利用硅片的面积,对于逻辑设计也非常方便。因为任何布尔函数都可以表示为最小项的逻辑表达式,而这正是PLD器件的结构。基于与或阵的PLD有三种基本类型,由哪个阵列可编程来区分这三种器件:· 可编程只读存储器PROM:与阵固定,或阵可编程· 可编程阵列逻辑PAL,GAL:与阵可编程,或阵固定·

15、; 可编程逻辑阵列PLA:与阵、或阵都可编程图2-1是PLA的结构示意图,图中的×表示可编程的熔丝连接。PROM、PAL等的结构和PLA基本相同,只是可编程的阵列不同,不同的具体型号的输出结构和输出电平也略有区别,有的器件具有三态输出、寄存器输出、反馈输入特性,进一步增强了器件的功能。下表列出了PAL器件的编号方法,具体特性请参考器件手册或相关资料。表21 常用PAL器件编号方法结构代码含义器件编号HLPRV高电平输出有效低电平输出有效输出电平可编程带寄存器输出单元乘积项数目不同或宏单元输出PAL10H8PAL16L8PAL16P8PAL16R8PAL20V8例如,编号PAL16H8

16、的PAL器件表示有最多可以有16个输入端,8个输出端,输入输出端口可组合编程,输出高电平有效。§2.3 CPLD的结构PLD器件的共同缺点是逻辑阵列规模小,每个器件仅相当于几十个等效门,不适用于较复杂的逻辑电路的设计,并且也不能完全杜绝编程数据的非法抄袭。随着集成电路工艺的发展,PLD的规模越来越大,已经发展到百万门级的复杂可编程逻辑器件CPLD(Complex Programmable Logic Device)系列,其中可擦除的CPLD有称为EPLD(Erasable PLD)。表2-2 ALTERA CPLD主要产品制造技术EEPROMEEPROMSRAMEEPROMSRAM系

17、列MAX5000MAX7000FLEX8000MAX9000FLEX10K等效门60-375060-5K2.5K-16K6K-12K10K-100K速度(MHz)125MHz178.6MHz125MHz125MHz70MHz最大传输延迟tpd(max)10nS5.0nS8nS8nS逻辑单元GLB16-19232-256208-1296320-560576-4992缓存器数16-19232-256208-1500484-772720-53920引脚数8416484-208168-216150-406CPLD的发展十分快速,各半导体厂都有CPLD产品投入研发,如ALTERA、ATMEL、CYPRE

18、SS、LATTICE及XILINX等。表2-1及表2-2列出了ALTERA及ATMEL生产的CPLD主要规格,若要详细了解则可到各家厂商的网站查阅,网址如下:ALTERA:ATMEL:CYPRESS:LATTICE:XILINX:表2-3 ATMEL CPLD主要产品制造技术FlashFlashSRAMSRAMSRAM产品系列ATF220V10CCAT6010AT6005AT6003AT6002等效门数10K5K3K2K速度(MHz)250MHz250MHz250MHz250MHz最大传输延迟tpd(max)1.2nS1.2nS1.2nS1.2nS逻辑单元GLB1064003136160010

19、24缓存器数106400313616001024I/O数2020410812096CPLD不但提高了器件的密度,还改进了阵列宏单元的结构及I/O的控制结构。由于CPLD的I/O引脚数量和D触发器数量大大增加,如果只采用一个与阵列,那么阵列的规模会急剧增大。而实际的设计中每个与门的输入端常常不是很多,因此与门的利用率较低。此外,庞大的阵列还会增加电路的传输延迟,降低工作频率。为克服上述缺点,CPLD采用分区的阵列结构,把整个器件分成若干个区,每个区都包括若干I/O端口,输入端和较小的与或阵列及宏单元,相当于一个小规模的PLD;有的区只完成某些特定的逻辑功能。各区之间通过可编程的全局互连总线连接,

20、同一模块的电路一般安排在同一个区内,因此只有少部分输入和输出使用全局互连总线,从而大大降低了逻辑阵列的规模,减小了电路传输延迟时间。由于工艺和生成厂家的不同,不同的CPLD的分区结构有较大的差别,这里我们介绍ALTERA公司的灵活逻辑单元阵列结构(FLEX),如图2-2所示。它主要由嵌入式阵列块EAB(Embedded Array Block)、逻辑阵列块LAB(Logic Array Block)、逻辑单元LE(Logic Element)、I/O单元IOC(I/O Element)和快速互连通道构成。图2-2Altera公司FLEX10K系列的FLEX结构图逻辑单元LE是FLEX结构中最小

21、的逻辑单元,每个LE含有一个提供4输入组合逻辑函数的查找表(LUTLook Up Table),能够快速产生4输入变量的任意逻辑函数输出。LE还有一个带同步使能的可编程寄存器和一个进位链、一个级联链,如图2-3所示。图2-3 Altera公司FLEX10K系列CPLD的LE结构图LE中的可编程寄存器可以设置成D、T、JK或RS触发器,该寄存器的时钟、置位和复位端可由全局复位、LAB控制信号LABCTRL14驱动。如果需要LE实现组合逻辑功能,可以将该寄存器旁路。LE产生两个输出,其中一个连接到快速互连通道,另一个连接到LAB的局部互连通道。这两个输出可以独立控制。每8个LE组成一组,构成一个逻

22、辑阵列块LAB。每个LAB是独立的模块,LAB中的LE有共同的输入、互连和控制信号。同一模块的逻辑电路一般安排在同一个LAB内。嵌入阵列块EAB由RAM/ROM和相关的输入、输出寄存器构成,它可以实现大容量的片内存储器,也可以编程作为复杂逻辑功能查找表,实现乘法器、微控制器、状态机等复杂的逻辑功能。在FLEX结构中,LAB、EAB排出行和列,构成二维逻辑阵列,内部信号的互连是通过行、列快速互连通道和LAB、EAB内部的局部互连通道实现的。第三章 CPLD实验系统§3.1 CPLD实验系统简介本实验系统由CPLD下载板、I/O实验板、RS-232接口电路与电源等四部分构成,如图3-1所

23、示。图3-1 CPLD实验系统结构图I/O实验板是供基础实验用,板上有简单的输入输出器件,包括LED、七段显示器、米字型显示器、5×7点矩阵显示器、DIP开关、按键及振荡器、脉冲信号等,足以进行所有的基础实验。 图3-2 I/O实验板本课程使用的CPLD下载板主要由一片Altera公司的FLEX10K10、单片机、RAM、ROM和RS-232接口组成。CPLD下载板通过3个40PIN的接插件和I/O板相连。通过更换不同类型CPLD下载板和I/O实验板可以满足各种实验要求。图3-2是CPLD下载板的实物图。图3-2 CPLD下载板的实物图电路设计完成后,由计算机通过RS-232串行口把

24、数据传送到CPLD下载板,再由板上的单片机把数据下载到CPLD内,完成CPLD的配置工作。I/O实验板上的输入输出器件和CPLD下载板上的CPLD芯片具有一定的连接关系,可以参考表3-1。I/O实验板上的输入输出器件都有一个以P开头的编号,例如第一个输入指示LED是P01,从表中可以看出它和CPLD的第3脚相连。表3-1 I/O板和CPLD芯片的连接关系IO板P01P02P03P04P06P07P08P09CPLD引脚0305060708091011IO板P13P14P15P16P18P19P20P21CPLD引脚1617181921222324IO板P22P23P24P25P27P28P29

25、P30CPLD引脚2527282930353637IO板P34P35P36P37P39P40P41P42CPLD引脚3839474849505152IO板P43P44P45P46P48P49P50P51CPLD引脚2527282930353637IO板P55P56P57P58P60P61P62P63CPLD引脚5354585960616264IO板P64P65P66P67P69P70P71P72CPLD引脚6566676970717273IO板P76P77P78P79P81P82P83P84CPLD引脚78798081448483IO板I12I31I54I73CPLD引脚124342§

26、;3.2 I/O实验板I/O实验板包括LED、七段显示器、米字型显示器、5×7点矩阵显示器、DIP开关、按键及振荡器、脉冲信号等输入输出器件,下面分别介绍。3.2.1 DIP输入开关DIP输入开关位于实验板的右下角,共3组24个输入开关,它们和CPLD的连接关系如表3-2所示。DIP开关向下时相应CPLD引脚接“0”,反之接“1”。和DIP开关S1、S2并联的还有16个LED(D1D16)可以这些DIP开关的状态。 图3-3 DIP输入开关配置图表3-2 CPLD引脚与DIP输入开关的对应关系代 号S1-1S1-2S1-3S1-4S1-5S1-6S1-7S1-8CPLD引脚03050

27、60708091011代 号S2-1S2-2S2-3S2-4S2-5S2-6S2-7S2-8CPLD引脚3839474849505152代 号S3-1S3-2S3-3S3-4S3-5S3-6S3-7S3-8CPLD引脚25272829303536373.2.2 输出指示LED 16个输出指示LED位于实验板的右上角,它们和CPLD的连接关系如表3-3所示。这些LED完全用来指示CPLD引脚的输出电平,并且是通过CD40106缓冲驱动,几乎不会有负载效应。表3-3 CPLD引脚与输出指示LED的对应关系代 号P55P56P57P58P60P61P62P63CPLD引脚53545859606162

28、64代 号P64P65P66P67P69P70P71P72CPLD引脚65666769707172733.2.3 七段LED 显示器实验板的左上角是6个七段LED 显示器(DP1DP6),可以接成扫描方式或独立显示方式。本实验仅需要使用最左面的两个七段LED 显示器,并且工作在独立显示方式,它们和CPLD的连接关系如下表所示。表3-4 CPLD引脚与七段LED 显示器的对应关系代 号DA1DB1DC1DD1DE1DF1DG1DP1名称DP1 七段显示器CPLD引脚1617181921222324代 号DA2DB2DC2DD2DE2DF2DG2DP2名称DP2 七段显示器CPLD引脚252728

29、2930353637图3-4 七段显示器段位示意图注:七段显示器DP2不能和DIP输入开关S3同时使用。3.2.4 脉冲信号发生器I/O实验板的正下方是四个按钮式脉冲信号发生器(SWP1SWP4),其中SWP4不能用,它们和CPLD的连接关系如下表所示。SWP14在没有按下时接“0”,按下时接“1”,四个按钮都经过了噪声消除处理,每按一次产生一个高电平脉冲,非常适合作为计数器、缓冲器等调试时的时钟输入使用。表3-5 CPLD引脚与按钮式脉冲信号发生器的对应关系代 号SWP1SWP2SWP3SWP4CPLD引脚448483连续脉冲信号发生器由CD40106作RC振荡器,分两段产生低频和高频时钟,

30、由半可调电位器F1、F2调整输出频率。其中F1的调整范围是1KHz到1MHz,F2的调整范围是1Hz到1KHz。F1输出接到CPLD的第2脚,F2输出接到CPLD的第42脚。3.2.5米字型显示器、矩阵键盘、点阵显示器本实验未使用,在此不作介绍。请参考相关的使用手册。 第四章 VHDL简介§4.1 VHDL的特点随着电子设计计术的高速发展,电路的复杂度越来越高,产品的更新速度越来越快,原理图输入的方法已经不能满足工业界对设计能力的要求。VHDL(Very High Speed Integrated Circuit Hardware Description Language)是美国国防

31、部1983年提出的一种硬件描述语言,它可以描述硬件的结构和行为,通过采用EDA工具自动综合出电路结构,极大地提高了设计能力。VHDL设计方法有以下几个优点:1 可以直接描述电路的行为,由EDA工具综合出电路,设计速度快。2 工艺无关性。设计人员不必过多关心具体的工艺,由EDA工具自动针对具体的工艺综合出电路。同时设计具有非常高的可移植性,这是原理图输入法不可比拟的。3 设计文件可读性好§4.2 VHDL的设计流程和原理图输入法不同,CPLD/FPGA的VHDL设计流程如下图所示。图4-1 CPLD/FPGA设计流程设计流程主要包括以下几步:1 写设计文件。按照自顶向下的方法将系统分解

32、为不同的模块,采用行为描述或结构描述的方法设计各个模块。2 综合、布局布线。由EDA工具根据具体的CPLD工艺,编译设计文件,产生电路结构,并完成布局布线,最后产生可下载到CPLD的数据文件。3 仿真。在计算机上对EDA工具产生的电路进行模拟,验证电路的功能、时序是否达到设计要求。4 下载到CPLD验证。仿真验证了设计的功能正确后,最后下载到CPLD芯片中,配合外围电路验证整个系统的功能。§4.3 VHDL的基本语法VHDL语言是一种比较复杂的语言,它可以在不同的抽象层次描述一个电路,在这里仅介绍本实验所需要的最基本的语法。在CPLD设计中,RTL级(寄存器传输级)模型是最常用的模型

33、,它描述数据在寄存器之间的流动方式。4.3.1 VHDL程序的结构LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY counter ISPORT(A,B,CLK: in std_logic;D: out std_logic);END;ARCHITECTURE behav OF counter ISSIGNALE: std_logic;BEGIN-E <= A and B;-PROCESS (CLK)BEGINIF CLKevent and CLK=1 THEN D <= E

34、;END IF;END PROCESS;END;图4-2 一个VHDL程序图4-2是一个基本的VHDL程序,它包括三个基本部分:1.库定义。库类似C语言的头文件,在库里定义了一些常用的数据类型、函数等,本实验课程使用如下的库就足够了:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;2实体定义。实体定义了电路的端口和输入输出信号的名称、类型、宽度等,语法如下:ENTITY 电路名称 ISPORT(信号1,信号2: in std_logic;信号3,信号4: in std_logic_vector(7

35、 downto 0); 信号5,信号6:out std_logic );END;其中in或out表示该信号是输入还是输出,本实验中信号的类型可以都使用std_logic类型,矢量型信号必须用(n downto m)的方式,例如上例中信号3是一个8位总线。3. 结构体结构体定义了电路的内部结构,包括电路内部的信号,各个模块的结构描述和行为描述,语法如下:ARCHITECTURE 结构名 OF 实体名 ISSIGNAL内部信号1,2,3: std_logic;BEGIN 模块1 模块2END;其中结构体名可以随便起,一般命名为“behav”;内部信号的定义方式和端口的定义方式一样。图4-2中有两个

36、模块,一个是结构描述类型的与门,一个是行为描述类型的D触发器。4.3.2 数据类型VHDL支持多种数据类型,本实验用到的常用类型有:19值逻辑std_logic。它把信号线上的电平描述成“1”,“0”,“X”,“U”,“Z”等,其中“X”,“U”表示不定值,“Z”表示高阻。2矢量类型std_logic_vector该矢量类型也是9值逻辑,使用时必须指定矢量的宽度,一般从高到低,例如:signal x: std_logic_vector(3 downto 0);表示x是一个四位总线,由x(3),x(2),x(1),x(0)构成。3整型integer整型信号主要用作状态信号、计数信号或数组的下标,

37、使用时必须指定数值范围,例如:signal y: integer range 0 to 15;矢量信号可以通过转换函数CONV_INTEGER转换成整形,例如:y <= CONV_INTEGER(x);4. 自定义类型在使用RAM、ROM或寄存器堆时需要定义数组,语法如下:type instr is array (0 to 15)of std_logic_vector(7 downto 0);signal IRAM: instr; 上例首先定义了instr数据类型是一个8位的矢量数组,数组容量是16;然后用该数据类型定义了信号IRAM。因此IRAM信号实际上是一个容量为16的8位数组,可

38、以作为RAM、ROM或寄存器堆。4.3.3 数据操作1赋值(<=)相同数据类型的信号可以赋值,结构体内的赋值语句相当于信号线的连接。例如:signal x: std_logic_vector(3 downto 0);signal y,z: std_logic;y <= x(3);x(3) <= x(2);y <= z;y <= 1;x <= “0010”;以上三句表示了这些信号线之间的连接关系。2逻辑操作(AND、OR、NOT、NAND、NOR、XOR、XNOR)逻辑操作可以描述信号的逻辑关系,例如:y <= not (x(1) nand x(2) o

39、r x(3); 3比较操作(、/=、 <、>、<=、>=)比较操作常用于条件赋值语句和条件分支语句,将在以后详细介绍。其中/=表示“不等于”。4. 拼接操作(&)拼接操作可以把两个信号拼接成一个新的矢量信号,例如:x(3 downto 2) <= x(1) & x(0);4.3.4 并行赋值语句当赋值语句直接出现在结构体中时表示并行赋值语句,它直接表示了信号的连接关系或描述了一个电路模块(组合逻辑电路)。所有的语句在仿真时都是并行执行的。4.3.5 进程语句进程语句定义了一个电路模块,进程内部是模块的行为描述。语法如下:PROCESS (信号1,信

40、号2,)BEGIN行为描述语句;END PROCESS;其中PROCESS语句后的信号列表指进程的敏感表,一般情况下把整个PROCESS用到的所有输入信号都列到敏感表中,除非该进程是一个边沿触发的进程。和并行赋值语句不同,在进程内部的行为描述语句在仿真时都是顺序执行的。这里仅介绍赋值语句、条件分支语句、CASE语句,它们的语法如下:条件分支语句语法:If 条件 then语句;else语句;end if; If 条件 then语句;end if; If 条件1 then语句; elsif 条件2 then语句; else语句; end if;条件分支举例:If LOAD = 0 thenQ &l

41、t;= Q+1;elseQ <= QLOAD; End if;CASE分支语句语法:Case 信号 isWhen 值1 >语句;when 值2 | 值3 | =>语句;when others =>语句; End case;条件分支举例:case OP iswhen “00” => Q <= Q+1;When “01” | “10” =>-OP为“01”或“10”Q <= QLOAD;When others =>Q <= “0000”; End case;4.3.6 注释VHDL程序的注释行以“-”为开始标志,可以位于程序的任何位置。&

42、#167;4.4 VHDL的电路设计技术任何一个电路都可以分解为很多模块的互连,这些模块可以用VHDL语言在同一个结构体中分别用并行赋值语句或进程来描述。下面将分别介绍各种电路单元的VHDL描述。4.4.1 组合逻辑电路简单组合逻辑电路既可以并行赋值语句,也可以用进程描述。简单组合逻辑电路一般可以用一个布尔方程表示,例如三输入与门:F=A·B·C并行赋值语句:F <= A and B and C;进程:process(A,B,C)begin F <= A and B and C;End process;或:process(A,B,C)begin if A=1 a

43、nd B=1 and C=1 thenF <= 1;ElseF <=0;End if;End process;并行赋值语句适用于可以用简洁的布尔方程表示的组合逻辑电路。如果逻辑关系复杂,难以用布尔方程表示,则可以用进程实现,在进程中用条件分支语句和CASE语句直接描述电路的逻辑功能。注意:要实现组合逻辑电路,所有的条件分支必须写全。4.4.2 触发器(D触发器)D触发器的功能可以如下描述:1如果有异步复位(置位)端,当复位信号有效时,输出端被复位或置位。复位(置位)端的优先级比时钟端高。2在时钟信号的上升沿(下降沿)把输入数据打到输出端。3其它时候输出保持不变。D触发器只能用进程实

44、现,在进程的敏感表中只需有异步复位和时钟信号。下面的例子是一个典型的D触发器,它有两个分支分别描述触发器的两个功能,在其它情况下Q保持不变。process(RST,CLK)begin if RST=1 thenQ <= 0;Elsif CLKevent and CLK=1 then-时钟上升沿Q <= D;End if;End process;4.4.3 锁存器(Latch)锁存器的功能可以如下描述:1 如果使能端有效时,输入信号被输出到输出端。2使能端无效时输出保持不变。锁存器只能用进程实现,在进程的敏感表中应包括所有用到的输入信号。下面的例子是一个典型的锁存器,它用一个分支描述

45、锁存器的锁存功能,在其它情况下Q保持不变。和D触发器的区别是,锁存器没有边沿型的分支。process(LE,D)begin if LE=1 then Q <= D;End if;End process;4.4.4 寄存器堆寄存器堆是一组寄存器,由于寄存器堆的速度快,常被CPU用来作数据缓冲。下例中的REG数组是一个8位的寄存器堆,其功能可以描述为:在写信号WR有效时把数据D写入到地址为REG_ADDR的寄存器中。signal REG_ADDR: std_logic_vector(1 downto 0);signal D:std_logic_vector(7 downto 0);type

46、com_reg is array(0 to 3) of std_logic_vector(7 downto 0);signal REG: com_reg;process(CLK)begin if CLKevent and CLK=1 then if WR=1 thenREG(CONV_INTEGER(REG_ADDR) <= D;End if;End if;End process;4.4.5 RAMRAM有很多种类,如同步RAM、异步RAM、双端口RAM、单口RAM等。在CPLD设计中最常用的是同步RAM和输入输出数据总线分离的异步单口RAM。同步RAM可以用寄存器堆实现,异步RAM可以

47、用锁存器堆实现:process(WR,DIN,DOUT,RAM,RAM_ADDR)begin if WR=1 thenRAM(CONV_INTEGER(RAM_ADDR) <= DIN;End if;DOUT <= RAM(CONV_INTEGER(RAM_ADDR);End process;4.4.6 ROMROM中的内容是固定不变的,可以用如下的进程实现:process(OE,ADDR)begin if OE = 1 thencase ADDR is when “00” =>DOUT <= “00000000”;when “01” =>DOUT <= “

48、00000001”;when “10” =>DOUT <= “00000010”;when others =>DOUT <= “00000100”;end case; end if;End process;参考资料1. CPLD系统设计技术入门与应用,黄正谨等,电子工业出版社。2. VHDL硬件描述语言与数字逻辑电路设计,侯伯亨等,西安电子科技大学出版社。3. 可编程ASIC设计及应用,李广军,孟宪元,电子科技大学出版社。4. 可编程器件应用导论,曾繁泰等,清华大学出版社。5. XILINX数字系统现场集成技术,乐明程,东南大学出版社。6. CPLD技术及其应用,宋万杰

49、等,西安电子科技大学出版社。实验一 四位同步二进制计数器设计一、实验目的熟悉使用MAXPLUS II的图形输入工具和VHDL语言设计时序电路的基本操作。二、实验内容1 采用图形输入工具设计四位同步二进制计数器。2 绘制激励波形3 功能仿真4 采用VHDL语言重新设计计数器,重复2、3步骤实验二 用VHDL语言设计七段译码器一、实验目的使用VHDL语言设计七段译码器,掌握组合逻辑电路的设计方法。二、实验内容1设计七段译码器,输入为4位BCD码,输出7段译码器电路的输入输出端口如附图所示。2绘制激励波形3功能仿真实验三 综合下载实验一、实验目的使用VHDL语言进行较完整的设计,验证功能后,下载到可

50、编程逻辑实验板。二、实验内容1 结合实验1和实验2,把4位计数器的结果用七段显示器显示。2绘制激励波形3功能仿真4下载到CPLD板,用7段LED显示器显示计数结果实验四 秒表设计要求:1 设计一个秒表,可以从059计数或倒计数。2 可以用一个键启动计数和暂停计数;一个键控制加计数或减计数;一个键清零3功能仿真4下载到CPLD板,用两位7段LED显示器显示。实验五 简单微处理器的设计与实现一、设计任务和技术指标运用在“数字电路与逻辑设计”课程中学过的基本理论知识,设计并用可编程逻辑器件实现一个简单的四位操作数的微处理器。完成微处理器硬件系统设计和指令系统设计两方面的任务,使微处理器能够实现两个不

51、带符号位的四位二进制数原码相乘等功能。二、简单微处理器介绍1微处理器硬件系统及原理微处理器硬件系统包括运算器、控制器、存储器以及其它必要的逻辑部件。图4-1为微处理器的原理框图,说明如下:(1) 程序计数器PC:存放将要执行指令的地址。(2) 指令存储器IRAM,存放用户指令,容量为16×8的RAM(或寄存器堆)。开关S的状态用于控制指令的写入或读出操作。(3) 指令寄存器IR:存放被执行指令的操作码,直接供运算控制器。(4) 控制器CON:产生一系列时序逻辑信号,控制微处理器各个部件协调一致地完成每条指令相应的操作,实现两个四位操作数的运算。(5) 通用寄存器堆RAM:它由四个四位

52、的通用寄存器R0、R1、R2、R3组成,用来存放运算过程中读出和写入的数据。(6) 缓冲寄存器RS和RD:用于存放处理器的两个操作数(S)和(D)。(7) 运算器ALU和进位寄存器C:运算器是四位算术逻辑运算单元,它对两个四位二进制数(S)和(D)进行处理,进位输入端所加的是控制器送来的CI信号,运算结果的低四位直接输出,而运算结果的进位输出到进位寄存器中。(8) 运算结果显示送七段数码管显示,用十六进制显示。图4-1 简单微处理器框图2处理器指令系统及功能处理器规定基本指令字长为8位,指令的每一位从高到低用D7、D6、D5、D4、D3、D2、D1、D0表示,指令系统共包括三类指令:寄存器指令、转移指令和停机指令,指令的编码方式如下图。表4-1 指令格式指令位76543210寄存器指令OPCCSD转移指令11CCADDR停机指令1100LHD21寄存器指令这类指令能够执行两个寄存器之间的运算操作,包含OP、CC、S和D四个字段。其中S和D字段指定了两个寄存器。记号(S)表示由S字段所指定的寄存器的内容;记号(D)表示由D字段所指定的D寄存器的内

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论