FPGA原理简介
本文将简练地介绍FPGA的硬件原理及使用方法
FPGA和CPLD是什么
FPGA和CPLD都是可编程逻辑器件,构造不同而已。
FPGA:Field-Programmable Gate Array
CPLD:Complex Programmable Logic Device
FPGA是数字器件,但又相当于一张白纸没有特定的功能。
我们可以通过软件对其硬件结构进行重新构造,实现任何常见的以及从未见过的数字器件功能(wait…软件能改变硬件结构?变形金刚吗?是的!)。我们不用像传统设计方式那样,每次做电路、升级电路都要重新买器件、焊电路。使用FPGA设计,发现逻辑电路设计不对,只需要改改代码就能把逻辑电路修正,而电路板和FPGA器件可以不换。
编程语言有VerilogHDL 、VHDL等,开发软件可以用Quartus等.这里的HDL是指硬件描述语言Hardware Description Language.
CPLD的“与或门阵列”
下面来介绍一下“变形金刚”的原理。如下图是CPLD内部的一种基本结构:”与或门阵列”。
A0、A1是输入信号,F0、F1是输出信号。
图中的黑点·和×代表横竖交叉的两条线是连接的。黑点表示此处固定连接,不可编程修改,×表示此处可编程为连接或断开。
与或门阵列
通过设置“与阵列”和“或阵列”中交叉点的连接、断开,可以得到F(A0,A1)的任意一种组合逻辑表达式。
故,该电路在硬件不更换的条件下,通过改变交叉点状态,对应逻辑功能是可以再次改变的,所以称为可编程逻辑器件(PLD)。
这些交叉点的通断控制有很多实现方式,起初用紫外线或激光对交叉点进行照射使其熔断或熔接。现在可以用存储器的值去控制三极管通断实现交叉点通断。所以,对可编程逻辑器件下载配置,实际上可以理解为给存储器赋值。
FPGA的查找表结构
FPGA内部可编程单元结构采用"查找表结构"(LUT,look up table)如下图,左侧一列是16X1bit的位存储单元 RAM。输入信号是ABCD,输出信号F在图的最右侧。ABCD相当于这个存储器的地址线,选择16位存储器中的一个值输出。通过修改存储单元RAM的内容,这个电路结构就可实现任意的F(A,B,C,D)逻辑函数。这个结构和数字电路中真值表的功能是一模一样的。根据输入地址,输出不同值,所以叫查找表结构。
LUT查找表结构
小结
VerilogHDL是我们描述电路功能的语言,软件Quartus根据Verilog让计算机自动设计出电路结构,并将这种结构配置到FPGA芯片中,实现其内部结构的重构。
在现代电子系统设计中,FPGA\CPLD的使用,极大地降低了用户设计大规模数字电路的难度,实现了电子设计自动化(EDA,Electronic Design Automation)。
FPGA、CPLD内部结构非常丰富,绝不局限于以上内容。本文仅帮助大家快速揭开可编程逻辑器件的神秘之处。
FPGA和单片机
初学FPGA的朋友,经常把FPGA和单片机搞混,认为FPGA也是一种单片机。这种理解是不妥当的。
他们的结构完全不同。FPGA\CPLD可说是一种"硬件可编程器件",它通过"重构"硬件以实现不同的器件功能,甚至实现一个单片机也完全没有问题。
而所有的单片机,包括89C51,AVR,STM32……它们的硬件结构和动作是固化的,都是cpu读取程序存储器指令并执行,然后再读下一条指令,无限循环。通过改变被读取的程序内容,最终实现不同功能。
CPU工作原理
FPGA可以做单片机做的事情,单片机做不了FPGA的事情。这并不是说FPGA就比单片机优秀,它们结构不同,应用场合也不完全一样。
举几个例子吧:
1、实现快速傅里叶变换,FPGA做出来是硬件FFT输出,速度快。单片机是通过程序一步步演算出FFT。
2、一个FPGA内可以设计N多种数字器件,相互独立,同时工作。单片机的cpu同一时刻只能执行一条指令,有多个任务时需要分时段处理。
3、由于FPGA的可定制性,它还侧重于新型芯片设计、集成芯片研发,片上系统Soc集成等。
4、大部分单片机集成了多种总线接口、AD转换器、定时器、PWM输出等,使用起来简单快捷。