《可编程逻辑器件与应用专题》实验讲义附实验指导书.pdf

上传人:赵** 文档编号:44005583 上传时间:2022-09-20 格式:PDF 页数:36 大小:614KB
返回 下载 相关 举报
《可编程逻辑器件与应用专题》实验讲义附实验指导书.pdf_第1页
第1页 / 共36页
《可编程逻辑器件与应用专题》实验讲义附实验指导书.pdf_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《《可编程逻辑器件与应用专题》实验讲义附实验指导书.pdf》由会员分享,可在线阅读,更多相关《《可编程逻辑器件与应用专题》实验讲义附实验指导书.pdf(36页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

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

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

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

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

6、而抵消掉。20 世纪 80 年代联合测试行动组 JTAG(Joint Test Action Group)开发了 IEEE1149.1-1990 边界扫描测试技术规范。这个边界扫描测试(BST)结构提供了有效地测试引线间隔致密的电路板上零部件的能力。你可以使用 BST 结构测试引脚连接而不必使用物理测试探针,而且可以在器件正常工作时捕获功能数据。器件的边界扫描单元能够迫使逻辑追踪引脚信号,或是从引脚或器件核心逻辑信号中捕获数据。强行加入的测试数据串行移入边界扫描单元,捕获的数据串行移出并在器件外部同预期的结果进行比 2 较。JTAG 标准提供了板级和芯片级的测试。通过定义输入输出引脚、逻辑控制

7、函数和指令,所有 JTAG的测试功能部仅需一个四线或五线的接口及相应的软件即能完成。图 1-1 举例说明了边界扫描测试法的概念。核心 逻辑 核心逻辑串行数据输入 JTAG 器件 1 JTAG 器件 2 串行数据输出 IC 引脚 图 1-1 JTAG 边界扫描测试法 可编程逻辑器件规模的不断发展,使其可以实现电子系统的高度集成,为了快速准确地设计复杂的电子系统,必须采用计算机自顶向下的设计和综合工具。综合工具一般包括从原理图和高层描述工具、逻辑仿真器,到底层综合工具的一系列软件包。底层的综合工具对设计进行逻辑描述,并执行逻辑优化、器件映射、布局布线的网表优化,从而产生最终的设计结果。对于简单的设

8、计,采用原始图输入或布尔方程输入是比较合适的。但对于复杂系统的设计,这两种输入方法变得繁琐而复杂并容易产生错误,而必须考虑高层次的设计输入方法。因此很多综合工具支持硬件描述语言(HDL),寄存器转换语言(RTL)或有限状态机(FSM)。高层综合工具可以采用高层的行为描述,如 VHDL 或编程语言。行为描述语言不需要说明一个设计具体采用何种方式实现。高层综合包括选择特定的结构模板,然后执行资源分配,寄存器分配和定时。所以在高层设计期间,设计者基本是在速度和资源之间所取舍。例如,相同的行为设计,当速度要求不高时,可以采用完全的流水线方式的逻辑设计来实现。从一个满意的行为描述开始的设计,使设计者能够

9、有更广泛的选择余地,来找出哪一个最适合特定的实现环境。高层设计方法的另一个主要优点是更容易理解和维护。目前,电子设计自动化软件不再是简单的 CAD 或 CAT,已经发展到“电子系统设计自动化(EDA)”,软件平台也已从小型机覆盖到工作站到高性能微机,一般都包含了符合 IEEE-1076 标准的 VHDL 高层综合工具,这些都为可编程 ASIC 的设计带来了极大的方便。特别对于中小规模系统的集成,可编程逻辑器件成为首选的方案。这也是可编程逻辑器件得到广泛应用的原因之一。1.2 可编程逻辑器件的分类 可编程逻辑器件包括一个未配置的逻辑单元阵列,此阵列可以编程实现所需的逻辑功能,并通过可编程互连接到

10、所要求的输入、输出。这些逻辑单元可以是门、反相器、触发器或较大的宏单元,并且有它自身的可编程局部互连系统。可编程互连是由可编程的开关阵列和连接逻辑单元的固定信号线组成。可编程逻辑器件有许多不同的分类方法,下面主要介绍四种:1.2.1 从互连特性上分类 从互连特性上,可编程逻辑器件结构可以分为确定型和统计型两大类。确定型的 PLD 包括 PROM、PLA、PAL、FPLA、GAL、EPLD 和 EEPLD。它们所提供的互连结构每次都用相同的互连线实现布线。所以这类可编程逻辑器件的延时特性常常可以从数据手册上直接查到,而不需通过设计软件来确定。统计型的器件主要是现场可编程门阵列(FPGA)。FPG

11、A 的设计软件每次完成相同的功能却给出不同的布线结果,所以称为统计型的结构。因此在电路设计时必须允许设计者限制功能中关键路径的时序变化,确保它们不超出系统的技术要求。1.2.2 从可编程特性上分类:目前为用户提供的编程手段主要有四种:*一次编程熔丝或逆熔丝;*EPROM 结构,即紫外线擦除电报编程存储单元(UVEPROM)采用紫外线互补金属氧化半导体 3 (UVCMOS);*电擦除和再编程存储单元。一类是 EEPROM,为电擦除式互补金属氧化半导体(EECMOS);另一类是结构与 UVEPROM 类似,但采用电擦除的闪速存储单元(FLASH MEMORY);*基于静态存储器(SRAM)的编程结

12、构。所以根据编程能力可以将它们分为两大类,一类是不可以再编程的,确定型的 PAL 和统计型采用逆熔丝的 FPGA 都是不可再编程的;另一类是可再编程的,确定型的 GAL 和统计型的采用 SRAM 的FPGA 属于此类。1.2.3 从器件容量上分类 由于可编程逻辑器件本身结构上和半导体生产工艺的不断改进和提高,器件的密度不断增加,性能亦不断提高,目前可编程逻辑器件的容量已达到百万门以上。从容量上对可编程逻辑器件的分类是将复杂的可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)统称为高容量可编程逻辑器件(HCPLD)。1.2.4 从结构的复杂程度上分类 从结构上对可编程逻辑进行分类是最常用的

13、方法,而且各类可编程逻辑器件的开发系统都是针对其结构来设计的,了解和掌握可编程逻辑器件的结构对合理、有效地选用开发软件来设计可编程逻辑器件就很重要。从结构上可将可编程逻辑器件分为以下三类:*简单可编程逻辑器件(PLD);*复杂可编程逻辑器件(CPLD);*可编程门阵列(FPGA)。4 第二章 可编程逻辑器件的结构和特点 2.1 概述 可编程逻辑器件(PLD)是一个逻辑电路,可由用户编程来实现特定的逻辑功能。许多 PLD 器件的功能已经或多或少变成工业标准,即可以像标准 74 系列中小规模器件那样。设计人员可以按照产品手册,根据速度、功耗、成本进行选择,并能从不同的厂家购买到。而且,PLD 器件

14、还提供了标准 74系列器件无法提供的可编程功能,用户可以将一些中小规模器件的功能集成到一个或几个 PLD 中,极大的简化了印制板的设计,因此 PLD 成为最早实现可编程 ASIC 的器件。2.2 PLD 的结构 PLD 的主要部分由两个逻辑阵列构成,一个与阵和一个或阵。输入到 PLD 的信号首先通过与阵,形成输入信号的组合,每组与项称为布尔代数的最小项或乘积项,这些乘积项在或阵中进行逻辑或后由输出宏单元输出。输入信号的反码由输入缓冲器产生,PLD 的布线由阵列实现,所以只要逻辑功能能够放进 PLD 器件,布线就能够成功。PLD 器件的与或阵列结构可以有效地利用硅片的面积,对于逻辑设计也非常方便

15、。因为任何布尔函数都可以表示为最小项的逻辑表达式,而这正是 PLD 器件的结构。基于与或阵的 PLD 有三种基本类型,由哪个阵列可编程来区分这三种器件:可编程只读存储器PROM:与阵固定,或阵可编程 可编程阵列逻辑PAL,GAL:与阵可编程,或阵固定 可编程逻辑阵列PLA:与阵、或阵都可编程 图 2-1 是 PLA 的结构示意图,图中的表示可编程的熔丝连接。PROM、PAL 等的结构和 PLA 基本相同,只是可编程的阵列不同,不同的具体型号的输出结构和输出电平也略有区别,有的器件具有三态输出、寄存器输出、反馈输入特性,进一步增强了器件的功能。下表列出了 PAL 器件的编号方法,具体特性请参考器

16、件手册或相关资料。表 21 常用 PAL 器件编号方法 结构代码 含义 器件编号 H L P R V 高电平输出有效 低电平输出有效 输出电平可编程 带寄存器输出 单元乘积项数目不同或宏单元输出 PAL10H8 PAL16L8 PAL16P8 PAL16R8 PAL20V8 例如,编号 PAL16H8 的 PAL 器件表示有最多可以有 16 个输入端,8 个输出端,输入输出端口可组合编程,输出高电平有效。2.3 CPLD 的结构 PLD 器件的共同缺点是逻辑阵列规模小,每个器件仅相当于几十个等效门,不适用于较复杂的逻辑电路的设计,并且也不能完全杜绝编程数据的非法抄袭。随着集成电路工艺的发展,P

17、LD 的规模越来越大,已经发展到百万门级的复杂可编程逻辑器件 CPLD(Complex Programmable Logic Device)系图 2-1 是 PLA 的结构示意图 5 列,其中可擦除的 CPLD 有称为 EPLD(Erasable PLD)。表 2-2 ALTERA CPLD 主要产品 CPLD 的发展十分快速,各半导体厂都有 CPLD 产品投入研发,如 ALTERA、ATMEL、CYPRESS、LATTICE 及 XILINX 等。表 2-1 及表 2-2 列出了 ALTERA 及 ATMEL 生产的 CPLD 主要规格,若要详细了解则可到各家厂商的网站查阅,网址如下:ALT

18、ERA:http:/ ATMEL:http:/ CYPRESS:http:/ LATTICE:http:/ XILINX:http:/ 表 2-3 ATMEL CPLD 主要产品 制造技术 Flash Flash SRAM SRAM SRAM 产品系列 ATF220V10CC AT6010 AT6005 AT6003 AT6002 等效门数 10K 5K 3K 2K 速度(MHz)250MHz 250MHz 250MHz 250MHz 最大传输延迟tpd(max)1.2nS 1.2nS 1.2nS 1.2nS 逻辑单元 GLB 10 6400 3136 1600 1024 缓存器数 10 64

19、00 3136 1600 1024 I/O 数 20 204 108 120 96 CPLD 不但提高了器件的密度,还改进了阵列宏单元的结构及 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)和快速互连通道构成。制造技术 EEPROM EEPROM S

21、RAM EEPROM SRAM 系列 MAX5000 MAX7000 FLEX8000 MAX9000 FLEX10K 等效门 60-3750 60-5K 2.5K-16K 6K-12K 10K-100K 速度(MHz)125MHz 178.6MHz 125MHz 125MHz 70MHz 最大传输延迟 tpd(max)10nS 5.0nS 8nS 8nS 逻辑单元GLB 16-192 32-256 208-1296 320-560 576-4992 缓存器数 16-192 32-256 208-1500 484-772 720-53920 引脚数 84 164 84-208 168-216

22、150-406 6 图 2-2Altera 公司 FLEX10K 系列的 FLEX 结构图 逻辑单元 LE 是 FLEX 结构中最小的逻辑单元,每个 LE 含有一个提供 4 输入组合逻辑函数的查找表(LUTLook Up Table),能够快速产生 4 输入变量的任意逻辑函数输出。LE 还有一个带同步使能的可编程寄存器和一个进位链、一个级联链,如图 2-3 所示。图 2-3 Altera 公司 FLEX10K 系列 CPLD 的 LE 结构图 LE 中的可编程寄存器可以设置成 D、T、JK 或 RS 触发器,该寄存器的时钟、置位和复位端可由全局复位、LAB 控制信号 LABCTRL14 驱动。

23、如果需要 LE 实现组合逻辑功能,可以将该寄存器旁路。LE 产生两个输出,其中一个连接到快速互连通道,另一个连接到 LAB 的局部互连通道。这两个输出可以独立控制。每 8 个 LE 组成一组,构成一个逻辑阵列块 LAB。每个 LAB 是独立的模块,LAB 中的 LE 有共同的输入、互连和控制信号。同一模块的逻辑电路一般安排在同一个 LAB 内。嵌入阵列块 EAB 由 RAM/ROM 和相关的输入、输出寄存器构成,它可以实现大容量的片内存储器,也可以编程作为复杂逻辑功能查找表,实现乘法器、微控制器、状态机等复杂的逻辑功能。在 FLEX 结构中,LAB、EAB 排出行和列,构成二维逻辑阵列,内部信

24、号的互连是通过行、列快速互连通道和 LAB、EAB 内部的局部互连通道实现的。7 第三章 CPLD 实验系统CPLD 实验系统 3.1 CPLD 实验系统简介 本实验系统由 C P L D下载板、I/O实验板、R S-2 32 接口电路与电源等四部分构成,如图 3-1所示。串口 CPLD 或FPGA下载板PC I/O 实验板 图 3-1 CPLD 实验系统结构图 I/O 实验板是供基础实验用,板上有简单的输入输出器件,包括 LED、七段显示器、米字型显示器、57 点矩阵显示器、DIP 开关、按键及振荡器、脉冲信号等,足以进行所有的基础实验。米字型 显示器 七段显示器 16 个 LED 输出状态

25、显示 矩阵 显示器 键盘 脉波输出按键 连续可调脉冲输出3 个 40 PIN 的下载板插座16 个 LED输 入/输 出状态显示 24bits DIP 开关 图 3-2 I/O 实验板 本课程使用的 C P L D下载板主要由一片 A l t e r a 公司的 FL E X 10 K 10、单片机、R A M、R O M和 R S-2 32接口组成。C P L D下载板通过 3个 40 P I N的接插件和 I/O板相连。通过更换不同类型 C P L D下载板和 I/O实验板可以满足各种实验要求。图 3-2 是 CPLD 下载板的实物图。RS-232 接口 电源 CPLD 芯片 复位开关 图

26、 3-2 CPLD 下载板的实物图 8 电路设计完成后,由计算机通过 R S-2 32 串行口把数据传送到 C P L D下载板,再由板上的单片机把数据下载到 C P L D内,完成 C P L D的配置工作。I/O实验板上的输入输出器件和 CPLD 下载板上的 CPLD 芯片具有一定的连接关系,可以参考表 3-1。I/O实验板上的输入输出器件都有一个以 P 开头的编号,例如第一个输入指示 LED 是 P01,从表中可以看出它和 CPLD 的第 3 脚相连。表 3-1 I/O板和 C P L D芯片的连接关系 IO 板 P01 P02 P03 P04 P06 P07 P08 P09 CPLD

27、引脚 03 05 06 07 08 09 10 11 IO 板 P13 P14 P15 P16 P18 P19 P20 P21 CPLD 引脚 16 17 18 19 21 22 23 24 IO 板 P22 P23 P24 P25 P27 P28 P29 P30 CPLD 引脚 25 27 28 29 30 35 36 37 IO 板 P34 P35 P36 P37 P39 P40 P41 P42 CPLD 引脚 38 39 47 48 49 50 51 52 IO 板 P43 P44 P45 P46 P48 P49 P50 P51 CPLD 引脚 25 27 28 29 30 35 36

28、37 IO 板 P55 P56 P57 P58 P60 P61 P62 P63 CPLD 引脚 53 54 58 59 60 61 62 64 IO 板 P64 P65 P66 P67 P69 P70 P71 P72 CPLD 引脚 65 66 67 69 70 71 72 73 IO 板 P76 P77 P78 P79 P81 P82 P83 P84 CPLD 引脚 78 79 80 81 44 84 83 IO 板 I12 I31 I54 I73 CPLD 引脚 1 2 43 42 3.2 I/O 实验板 I/O 实验板包括 LED、七段显示器、米字型显示器、57 点矩阵显示器、DIP 开

29、关、按键及振荡器、脉冲信号等输入输出器件,下面分别介绍。3.2.1 DIP 输入开关 DIP 输入开关位于实验板的右下角,共 3 组 24 个输入开关,它们和 CPLD 的连接关系如表 3-2 所示。DIP 开关向下时相应 CPLD 引脚接“0”,反之接“1”。和 DIP 开关 S1、S2 并联的还有 16 个 LED(D1D16)可以这些 DIP 开关的状态。图 3-3 DIP输入开关配置图 9 表 3-2 CPLD引脚与DIP输入开关的对应关系 代 号 S1-1 S1-2S1-3S1-4S1-5S1-6S1-7S1-8 CPLD引脚 03 05 06 07 08 09 10 11 代 号

30、S2-1 S2-2S2-3S2-4S2-5S2-6S2-7S2-8 CPLD引脚 38 39 47 48 49 50 51 52 代 号 S3-1 S3-2S3-3S3-4S3-5S3-6S3-7S3-8 CPLD引脚 25 27 28 29 30 35 36 37 3.2.2 输出指示 LED 16 个输出指示 LED 位于实验板的右上角,它们和 CPLD 的连接关系如表 3-3 所示。这些 LED 完全用来指示 CPLD 引脚的输出电平,并且是通过 CD40106 缓冲驱动,几乎不会有负载效应。表 3-3 CPLD 引脚与输出指示 LED 的对应关系 代 号 P 5 5 P 5 6P 5

31、7P 5 8P 6 0P 6 1P 6 2P 6 3 CPLD引脚 53 54 58 59 60 61 62 64 代 号 P 6 4 P 6 5P 6 6P 6 7P 6 9P 7 0P 7 1P 7 2 CPLD引脚 65 66 67 69 70 71 72 73 3.2.3 七段 LED 显示器 实验板的左上角是 6 个七段 LED 显示器(DP1DP6),可以接成扫描方式或独立显示方式。本实验仅需要使用最左面的两个七段 LED 显示器,并且工作在独立显示方式,它们和 CPLD 的连接关系如下表所示。表 3-4 CPLD 引脚与七段 LED 显示器的对应关系 代 号 DA1 D B 1D

32、 C 1D D 1D E 1D F1D G 1D P 1 名称 D P 1 七段显示器 CPLD引脚 16 17 18 19 21 22 23 24 代 号 DA2 D B 2D C 2D D 2D E 2D F2D G 2D P 2 名称 D P 2 七段显示器 CPLD引脚 25 27 28 29 30 35 36 37 图3-4 七段显示器段位示意图 注:七段显示器DP2 不能和DIP输入开关S3 同时使用。10 3.2.4 脉冲信号发生器 I/O 实验板的正下方是四个按钮式脉冲信号发生器(SWP1SWP4),其中 SWP4 不能用,它们和 CPLD的连接关系如下表所示。SWP14 在没

33、有按下时接“0”,按下时接“1”,四个按钮都经过了噪声消除处理,每按一次产生一个高电平脉冲,非常适合作为计数器、缓冲器等调试时的时钟输入使用。表 3-5 CPLD 引脚与按钮式脉冲信号发生器的对应关系 代 号 SWP1S WP 2 S WP 3S WP 4CPLD引脚44 84 83 连续脉冲信号发生器由 CD40106 作 RC 振荡器,分两段产生低频和高频时钟,由半可调电位器 F1、F2 调整输出频率。其中 F1 的调整范围是 1KHz 到 1MHz,F2 的调整范围是 1Hz 到 1KHz。F1 输出接到CPLD 的第 2 脚,F2 输出接到 CPLD 的第 42 脚。3.2.5 米字型

34、显示器、矩阵键盘、点阵显示器 本实验未使用,在此不作介绍。请参考相关的使用手册。11 第四章 VHDL 简介VHDL 简介 4.1 VHDL 的特点 随着电子设计计术的高速发展,电路的复杂度越来越高,产品的更新速度越来越快,原理图输入的方法已经不能满足工业界对设计能力的要求。VHDL(Very High Speed Integrated Circuit Hardware Description Language)是美国国防部 1983 年提出的一种硬件描述语言,它可以描述硬件的结构和行为,通过采用 EDA 工具自动综合出电路结构,极大地提高了设计能力。VHDL 设计方法有以下几个优点:1 可以

35、直接描述电路的行为,由 EDA 工具综合出电路,设计速度快。2 工艺无关性。设计人员不必过多关心具体的工艺,由 EDA 工具自动针对具体的工艺综合出电路。同时设计具有非常高的可移植性,这是原理图输入法不可比拟的。3 设计文件可读性好 4.2 VHDL 的设计流程 和原理图输入法不同,CPLD/FPGA 的 VHDL 设计流程如下图所示。行为级/RTL级VHDL代码综合、布局布线正确?改正错误否仿真正确?电路拓扑否下载到CPLD验证 图 4-1 CPLD/FPGA 设计流程 设计流程主要包括以下几步:1 写设计文件。按照自顶向下的方法将系统分解为不同的模块,采用行为描述或结构描述的方法设计各个模

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

37、间的流动方式。4.3.1 VHDL 程序的结构 LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY counter IS PORT(A,B,CLK:in std_logic;D:out std_logic);END;ARCHITECTURE behav OF counter IS SIGNAL E:std_logic;BEGIN -E=A and B;-PROCESS(CLK)BEGIN IF CLKevent and CLK=1 THEN D=E;END IF;END PROCESS;

38、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 电路名称 IS PORT(信号 1,信号 2:in std_logic;信号 3,信号 4:in std_logic_vector(7 downto

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

40、,定义规则 13 和端口的定义一样。内部信号只能在 ARCHITECTURE 和 BEGIN 关键词之间定义。图 4-2 中有两个模块,一个是结构描述类型的与门,一个是行为描述类型的 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_v

41、ector(3 downto 0);表示 x 是一个四位总线,由信号 x(3),x(2),x(1),x(0)构成。3整型 integer 整型信号主要用作状态信号、计数信号或数组的下标。整形信号使用时必须指定数值范围,通常是从小到大,例如: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

42、);signal IRAM:instr;上例首先定义了 instr 数据类型是一个 8 位的矢量数组,数组容量是 16;然后用该数据类型定义了信号 IRAM。因此 IRAM 信号实际上是一个容量为 16 的 8 位数组,可以作为 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逻辑

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

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

45、then 语句;else 语句;end if;条件分支举例:If LOAD =0 then Q=Q+1;else Q 语句;when 值 2|值 3|=-“|”表示“或”语句;when others=语句;End case;条件分支举例:case OP is when“00”=Q -OP 为“01”或“10”Q Q=“0000”;End case;4.3.6 元件(COMPONENT)在 VHDL 程序中可以直接使用已经设计好的电路模块,称为“元件”。元件在使用前要在结构体的ARCHITECTURE 和 BEGIN 关键词之间用 COMPONENT 关键词事先声明(和内部信号的定义类似)。在下

46、文的ROM 和 RAM 部分将举例说明。4.3.7 注释 VHDL 程序的注释行以“-”为开始标志,可以位于程序的任何位置。4.4 VHDL 的电路设计技术 任何一个电路都可以分解为很多模块的互连,这些模块可以用 VHDL 语言在同一个结构体中分别用 15 并行赋值语句或进程来描述。下面将分别介绍各种电路单元的 VHDL 描述。4.4.1 组合逻辑电路 简单组合逻辑电路既可以并行赋值语句,也可以用进程描述。简单组合逻辑电路一般可以用一个布尔方程表示,例如三输入与门:F=ABC 并行赋值语句:F=A and B and C;进程:process(A,B,C)begin F=A and B and

47、 C;End process;或:process(A,B,C)begin if A=1 and B=1 and C=1 then F=1;Else F=0;End if;End process;并行赋值语句适用于可以用简洁的布尔方程表示的组合逻辑电路。如果逻辑关系复杂,难以用布尔方程表示,则可以用进程实现,在进程中用条件分支语句和 CASE 语句直接描述电路的逻辑功能。注意:要实现组合逻辑电路,所有的条件分支必须写全。4.4.2 触发器(D 触发器)D 触发器的功能可以如下描述:1如果有异步复位(置位)端,当复位信号有效时,输出端被复位或置位。复位(置位)端的优先级比时钟端高。2在时钟信号的上

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

49、现,在进程的敏感表中应包括所有用到的输入信号。下面的例子是一个典型的锁存器,它用一个分支描述锁存器的锁存功能,在其它情况下 Q 保持不变。和 D 触发器的区别是,锁存器没有边沿型的分支。process(LE,D)begin if LE=1 then Q=D;End if;End process;16 4.4.4 寄存器堆 寄存器堆是一组寄存器,由于寄存器堆的速度快,常被 CPU 用来作数据缓冲。下例中的 REG 数组是一个 8 位的寄存器堆,其功能可以描述为:在写信号 WR 有效时把数据 D 写入到地址为 REG_ADDR 的寄存器中。signal REG_ADDR:std_logic_vec

50、tor(1 downto 0);signal D:std_logic_vector(7 downto 0);type 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 then REG(CONV_INTEGER(REG_ADDR)local_address,-local 开头的信号都是 RAM 连接到的内部信号 inclock=clock,data=local_data,we=local_w

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com