什么是FPGA CPLD?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是FPGA CPLD?相关的知识,希望对你有一定的参考价值。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA简介
背景
目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简 单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。
CPLD与FPGA的关系
早在1980年代中期,FPGA已经在PLD设备中扎根。CPLD和FPGA包括了一些相对大数量的可编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。
CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。
CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。因此一个有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。
FPGA工作原理
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件。与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程.
CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统.
简介
CPLD主要是由可编程逻辑宏单元(MC,Macro Cell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。
发展历史及应用领域
20世纪70年代,最早的可编程逻辑器件--PLD诞生了。其输出结构是可编程的逻辑宏单元,因为它的硬件结构设计可由软件完成(相当于房子盖好后人工设计局部室内结构),因而它的设计比纯硬件的数字电路具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路。为弥补PLD只能设计小规模电路这一缺陷,20世纪80年代中期,推出了复杂可编程逻辑器件--CPLD。目前应用已深入网络、仪器仪表、汽车电子、数控机床、航天测控设备等方面。
器件特点
它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。
如何使用
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
这里以抢答器为例讲一下它的设计(装修)过程,即芯片的设计流程。CPLD的工作大部分是在电脑上完成的。打开集成开发软件(Altera公司 Max+pluxII)→画原理图、写硬件描述语言(VHDL,Verilog)→编译→给出逻辑电路的输入激励信号,进行仿真,查看逻辑输出结果是否正确→进行管脚输入、输出锁定(7128的64个输入、输出管脚可根据需要设定)→生成代码→通过下载电缆将代码传送并存储在CPLD芯片中。7128这块芯片各管脚已引出,将数码管、抢答开关、指示灯、蜂鸣器通过导线分别接到芯片板上,通电测试,当抢答开关按下,对应位的指示灯应当亮,答对以后,裁判给加分后,看此时数码显示加分结果是否正确,如发现有问题,可重新修改原理图或硬件描述语言,完善设计。设计好后,如批量生产,可直接复制其他CPLD芯片,即写入代码即可。如果要对芯片进行其它设计,比如进行交通灯设计,要重新画原理图、或写硬件描述语言,重复以上工作过程,完成设计。这种修改设计相当于将房屋进行了重新装修,这种装修对CPLD来说可进行上万次。
家庭成员:经过几十年的发展,许多公司都开发出了CPLD可编程逻辑器件。比较典型的就是Altera、Lattice、Xilinx世界三大权威公司的产品,这里给出常用芯片: Altera EPM7128S (PLCC84)
Lattice LC4128V (TQFP100)
Xilinx XC95108 (PLCC84)
FPGA与CPLD的辨别和分类
FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。通常的分类方法是:
将以乘积项结构方式构成逻辑行为的器件称为CPLD,如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。
将以查表法结构方式构成逻辑行为的器件称为FPGA,如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。
尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:
①CPLD更适合完成各种算法和组合逻辑,FP GA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。
③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FP GA可在逻辑门下编程,而CPLD是在逻辑块下编程。
④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
⑧CPLD保密性好,FPGA保密性差。
⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。 参考技术A 现场可编程逻辑阵列(FPGA)/复杂可编程逻辑器件(CPLD)
FPGA
现场可编程门阵列;
双语例句
1.Application of FPGA to the design of digital down converting
FPGA在数字下变频设计中的应用
2.An Electrophoresis Control System for Microfluidic Chip Based on FPGA
基于FPGA的微流控芯片电泳控制系统设计
3.Design and implementation of high-speed image encoder based on FPGA
基于FPGA的高速图像压缩编码器设计与实现
CPLD
abbr.Complex Programmable Logic Device 复杂可编程逻辑器件;
双语例句
1.Design of Harmonics Detection System Based on DSP+ CPLD
基于DSP+CPLD的谐波检测装置设计
2.Design of multiple re-trigger memory test system based on CPLD
基于CPLD的多次重触发存储测试系统设计
3.Design of Video Multi-function Board Based on CPLD and SDRAM
基于CPLD和SDRAM的视频多功能卡设计 参考技术B 而状态机由于什么原因,它就是不易受干扰。所以我们选择了状态机。 简单的来说,CPLD更适合做逻辑,FPGA更适合做时序。 FPGA是现场可编程逻辑门追问
那XCS3000和XCS4000系列有何区别,多谢您的回答
EDA课设 FPGA开发板 VHDL实现串口通信
一、设计概述
1. UART串口通信设计目的
随着 FPGA/CPLD 器件在控制领域的广泛使用,开发嵌于 FPGA/CPLD 器件内部的通用异步收发器,以实现 FPGA/CPLD 开发系统与 PC 机之间的数据通信是很有实际意义的。FPGA/CPLD与单片机、ARM等器件不同,它内部并没有集成UART,因此要实现串行通信必须要独立开发UART模块。
通用异步收发器(Universal Asynchronous Receiver/Transmitter, 简称为UART)由于具有数据通信时需要的连线少,具有相关工业标准提供的标准的接口电平规范等优点,在工业控制领域被广泛采用。近年来,FPGA器件逐渐开始广泛使用,开发基于 FPGA/CPLD 器件内部的通用异步收发器,以实现 FPGA/CPLD 开发系统与 PC 机或其它外设之间的数据通信引起了 FPGA/CPLD 领域研究人员的关注。为此,本设计基于 FPGA 器件设计了符合 RS232 标准的UART,实现开发板与计算机串口助手之间的收发,并能够自行调节波特率。
2. UART串口通信设计目的
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输,在数据接收时将接收到的串行数据转换成并行数据,可以实现全双工传输和接收。它包括了 RS232、RS449、RS423、RS422 和 RS485 等接口标准规范和总线标准规范。换句话说,UART是异步串行通信的总称。而 RS232、RS449、RS423、RS422 和 RS485 等,是对应各种异步串行通信口的接口标准和总线标准,它们规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。RS-232是美国电子工业联盟(EIA)制定的串行数据通信的接口标准,原始编号全称是 EIA-RS-232(简称232,RS-232),被广泛用于计算机串行接口外设连接。其 DB9 接口的针脚定义如下图所示。
引脚功能如下表所示。若系统存在多个 UART 接口,则可分别称为 COM1、COM2 等。
UART通信使用前需要做多项设置,常见的设置包括数据位数、波特率大小、奇偶校验类型和停止位数。数据位(Data bits):该参数定义单个UART数据传输在开始到停止期间发送的数据位数。可选择为:5、6、7或者8(默认)。波特率(Baud):是指从一设备发送到另一设备的波特率,即每秒钟可以通信的数据比特个数。典型的波特率有4800、9600、19200、38400、57600、115200等。一般通信两端设备都要设为相同的波特率,但有些设备也可设置为自动检测波特率。
奇偶校验类型(Parity Type):是用来验证数据的正确性。奇偶校验一般不使用,如果使用,则既可以做奇校验(Odd)也可以做偶校验(Even)。在偶校验中,因为奇偶校验位会被相应的置1或0(一般是最高位或最低位),所以数据会被改变以使得所有传送的数位(含字符的各数位和校验位)中“1”的个数为偶数;在奇校验中,所有传送的数位(含字符的各数位和校验位)中“1”的个数为奇数。奇偶校验可以用于接受方检查传输是否发送生错误,如果某一字节中“1”的个数发生了错误,那么这个字节在传输中一定有错误发生。如果奇偶校验是正确的,那么要么没有发生错误,要么发生了偶数个的错误。如果用户选择数据长度为8位,则因为没有多余的比特可被用来作为奇偶校验位,因此就叫做“无奇偶校验”。
停止位(Stop bits):在每个字节的数据位发送完成之后,发送停止位,来标志着一次数据传输完成,同时用来帮助接收信号方硬件重同步。可选择为:1(默认)、1.5或者2位。在 RS-232 标准中,最常用的配置是8N1(即八个数据位、无奇偶校验、一个停止位),其发送一个字节时序图如下图所示。
空闲状态为一个高电平,按照一个完整的字节包括一位起始位、8位数据位、一位停止位即总共十位数据来算,要想完整地实现这十位数据的发送,就需要 11 个波特率时钟脉冲,第 1 个高电平脉冲标记一次传输的开始,第 11 个高电平脉冲标记一次传输的结束。
二、顶层设计
在 FPGA 内部实现串口接收与串口发送模块,串口接收模块接收上位机发送的数据,然后通过串口发送模块将数据发回上位机,实现串口数据环回。系统框图如下图所示:
如上图所示,为串口通信的顶层设计原理图。
三、子模块设计
1. 波特率时钟生成模块
本模块的设计是为了保证模块的复用性。当需要不同的波特率时,只需设置不同的波特率时钟计数器的计数初值,使用查找表即可实现。下面的设计代码中包含了针对 7 个波特率的设置,如需要其他波特率可根据实际使用情况自行调节。如下图所示。
波特率生成,用一个定时器来定时,产生频率与对应波特率时钟频率相同的时钟信号,如下图所示。例如,我们使用波特率为115200bps,则我们需要产生一个频率为115200Hz的时钟信号。这里,我们首先将 115200Hz 时钟信号的周期计算出来,1秒钟为1000000000ns,因此波特率时钟的周期Tb=1000000000/115200=8680.6ns,即 115200Hz 时钟信号的一个周期为8680.6ns,那么,我们只需要设定我们的定时器定时时间为8680.6ns,每当定时时间到,产生一个系统时钟周期长度的高电平脉冲信号即可。系统时钟频率为50MHz,即周期为20ns,那么,我们只需要计数 8680/20 个系统时钟,就可获得 8680ns 的定时,bps115200=Tb×Fclk-1=Fclk115200-1。相应的,其它波特率定时值的计算与此相同。为了实现可以自行调节波特率,设计中使用了一个 3 位的波特率选择端口:Baud_Set。通过给此端口不同的值,就能选择不同的波特率,此端口控制不同波特率的原理很简单,就是一个多路选择器,多路选择器通过选择不同的定时器计数最大值来设置不同的比特率时钟频率。Baud_Set的值与各波特率的对应关系如下表所示。
2. 发送模块
串口发送模块的整体框图,如下图所示。
其接口列表如下表所示:
从原理部分已知,波特率是 UART 通信中需要设置的参数之一。在波特率时钟生成模块中,系统时钟周期为System_clk_period,这里为20ns。如果接入到该模块的时钟频率为其他值,需要根据具体的频率值修改该参数。
3. 数据输出模块
通过对波特率时钟进行计数,来确定数据发送的循环状态。为了使得模块可以对其他模块进行控制或者调用,这里产生一个 byte 传送结束的信号。一个数据位传输结束后 done 信号输出一个时钟的高电平,如下图所示。
产生数据传输状态信号,如上图所示。即当在正常传输的时候 work_en 信号为高电平,其他情况均为低电平。
4. 数据传输状态控制模块
在模块结构图中还有一个多路选择器,作用是根据 bps_cnt 的值来确定数据传输的状态。不同的波特率时钟计数值时,有不同的传输数据对应。
5. 接收模块
串口接收模块与串口发送模块设计思路类似。串口接收模块整体框图,如下图所示。
如上图所示,为接收模块的关键的 VDHL 代码。
四、系统测试
1. 仿真结果与分析
对该发送模块进行功能仿真。在仿真文件中,生成了复位信号以及使能信号、待传输数据。这里将所有数据变化与系统时钟错开1ns,是为了能更清楚看到输入输出数据与时钟的时序关系。
设置好仿真脚本后用ModelSim进行功能仿真,得到如图所示的波形文件,可以看出在复位信号为高电平以及使能信号有效之前输出信号Rs232_Tx均为 0,在复位结束以及使能后输出信号才开始正常,待发送数据设置为8’haa(MSB),且当开始发送后,输出信号依次为 1、0(起始位)、 8’haa(LSB)、1(停止位);当输入数据为01010101b(MSB)后,输出信号依次为 1、0(起始位)、10101010b(LSB)、1(停止位)。同时uart_state处于发送状态时为1,即仿真验证结果正确,如下图所示。
对接收模块进行功能仿真,模块输出的Tx连接到接收模块上的Rx,作为接收模块的激励。
设置好仿真脚本后运行 ModelSim 进行功能仿真,得到如下图所示的波形文件。分析可知:每当一个字节发送结束后,数据输出data_byte_r均会更新输出一次,符合设计预期。
2. 管脚安排
我们选用 Cyclone IV E 系列的 EP4CE6E22C8 芯片,最终的管脚安排 Pin Planner 如下图所示。
3. 下载测试
通过 USB 线缆连接 FPGA 开发板和 PC 机, Hardware Setup设置为USB-Blaster [USB-0],下载 sof 文件到 FPGA 开发板中。如下图所示。
在串口助手中选择与开发板相连接的串口端口,设置波特率为9600,数据位为8,停止位为1,无校验位。通过点击“打开”按钮来打开串口。
如下图所示。串口打开后,在发送文本框中输入数据 abc123 并点击发送,可以看到串口助手中接收到了数据。在接收设置为 ASCII 时,显示abc123;在接收设置为 Hex(十六进制)时,显示61 62 63 31 32 33。分析可知接收到的数据与发送的数据一致,设计验证正确。
在波特率设置为 9600 时,串口调试助手中设置波特率为19200,这时发送数据,接收到的数据会有乱码。这时我们修改顶层设计的 baud_set 为001,此时对应波特率为19200,重新全编译整个项目,再下载 sof 文件到 FPGA 开发板,打开串口调试助手调试,测试结果如上图所示。分析可知,本设计实现了开发板与计算机串口助手之间数据的收发,通信格式正确,并且能自行调节波特率,符合设计预期,并且验证正确。
设计报告+源码+资料:https://download.csdn.net/download/fyfugoyfa/20691109
六、参考资料
- 黄沛昱.EDA技术与VHDL设计实验指导.西安电子科技大学出版社,2012,08.
- 杨英强.一种基于FPGA的UART电路实现[J].现代电子技术,2005,28(12):82-84.
- 郭勇.EDA技术基础(第2版)[M].机械工业出版社,2005.3.14—320.
- 褚振勇.FPGA设计及应用[M].西安:西安电子科技大学出版社.
以上是关于什么是FPGA CPLD?的主要内容,如果未能解决你的问题,请参考以下文章