FPGA开发板快速教程.docx
《FPGA开发板快速教程.docx》由会员分享,可在线阅读,更多相关《FPGA开发板快速教程.docx(27页珍藏版)》请在冰点文库上搜索。
FPGA开发板快速教程
FPGA开发板快速教程
(一)---基础知识
FPGA开发板
作者:
古 文章来源:
本站原创 点击数:
2284 更新时间:
2007-5-24
前言
FPGA在复杂逻辑电路以及数字信号处理领域中扮演者越来越重要的角色,SOC(片上系统)以其低功耗,高性能,低成本,高可靠性等优点成为嵌入式系统的发展趋势。
作为一个简明的教程,主要宗旨是让初学者快速地了解FPGA/SOPC(可编程片上系统)开发的流程。
目前IT技术的发展可以说是一日千里,以本人的观点来讲,如果希望在电子设计领域有所作为,则必须具备快速掌握新技术的能力。
电子设计最重要的是实践的积累,我们只要具备了一定的基础,应当马上投入实践,否则很多概念都无法真正理解。
有不少人包括我,当下决心要成为一个合格的电子设计工程师的时候,总是想如果把有关电路方面的理论都掌握了才能所向披靡,有底气参加实际项目设计。
当然如果能做到“把有关理论都掌握了”这样的境界,我想应该是很理想的,但经验发现这并不实际。
据我所知,我所认识的不少电子设计牛人,他们的理论知识可能都比不上我们的本科生,但很多不错的产品都是从他们的手中开发出来的,有了实践的经验后,他们掌握新技术的速度相当惊人。
有人跟我说:
“新技术是拿来用的,不是拿来学的。
”他们认为掌握新的设计技术应当尽快掌握它的设计流程。
因此,我参考朋友给我的意见,写了这个简易的教程,以非常详细的实例来让初学者了解基于QuartusII和NiosIIIDE的FPGA/SOPC开发的基本流程,目的是为了让初学者尽快上手FPGA/SOPC的开发流程,尽快投入到实践中。
为了易于说明问题,本教程中的一些概念并不是很严谨,如果读者对某些提法有异议,请参考相关资料和教材,并以相关资料和教材为准。
通过该简明教程,初学者能快速了解FPGA/SOPC的基本开发流程,很多技巧和深入理解都靠长期的经验积累,因此初学者应该在了解了基本流程以后,思维不能局限于此,应在实践中提高水平,并参考更全面和权威的资料。
本教程配套CT-SOPCx系列FPGA/SOPC开发学习板套件(对于该套件的相关内容请参考附录。
)以实践为基础,适合具备基本的数字电路设计基础的初学者。
第一章是CPLD/FPGA的基本知识,这部分内容摘自互联网并稍加删改,对于CPLD/FPGA知识为零的初学者应先了解这部分内容;对于已经有了一定基础的同学可以跳过这部分内容。
第二章以两个例子来让初学者了解FPGA的基本开发流程,并熟悉QuartusII软件的使用。
第三章以一个例子来让初学者了解基于NiosII软CPU核的SOPC设计流程,并熟识SOPCBuilder和NiosIIIDE的基本使用。
附录是本文所涉及的例子的学习板相关的内容。
由于本人水平有限,错漏和不严谨之处在所难免,欢迎大家批评指正。
嵌入式控制研究室
2006年4月20日
第一章PLD/FPGA的基本知识………………………………………………………………………
第二章FPGA基本教程……………………………………………………………………………………
第一节FPGA的基本开发流程………………………………………………………………………………
第二节 基于QuartusII的实例…………………………………………………………………………………
实验一实验板上的KEY1按钮控制FPGA核心板上的第一个LED灯介绍………………………………
实验二7段数码管实验…………………………………………………………………………………
实验三 用FPGA设计串口数据收发…………………………………………………………………………
第三章 SOPC的基本开发流程…………………………………………………………………………………
第一节第一节 SOPCvsMCU、DSP和FPGA………………………………………………………………………
第二节第二节 基于QuantusII和NiosII的SOPC基本开发流程……………………………………………………
第三节第三节 基于QuantusII和NiosII的SOPC实例……………………………………………………………
实验一核心板上的两个LED交替闪烁…………………………………………………………………
实验二4位7段数码管IPcore设计以及flash的烧写教程…………………………………
实验三LCD设备驱动开发………………………………………………………………………
实验四ALL_TEST综合设计……………………………………………………………………………
第四章 FPGA开发板中嵌入Uclinux的步骤和方法……………………………………………………
第一章CPLD/FPGA的基本知识
(一)可编程逻辑器件的历史和概述
随着数字电路应用越来越广泛,传统通用的数字集成芯片已经难以满足系统的功能要求,而且随着系统复杂程度的提高,所需通用集成电路的数量呈爆炸性增值,使得电路的体积膨大,可靠性难以保证。
此外,现代产品的生命周期都很短,一个电路可能需要在很短的周期内作改动以满足新的功能需求,对于采用通用的数字集成电路设计的电路系统来说即意味着重新设计和重新布线。
因此,系统设计师们希望自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
早期的可编程逻辑器件只有可编程只读存贮器(PROM)、紫外线可按除只读存贮器(EPROM)和电可擦除只读存贮器(EEPROM)三种。
由于结构的限制,它们只能完成简单的数字逻辑功能。
其后,出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。
典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与一或”表达式来描述,所以,PLD能以乘积和的形式完成大量的组合逻辑功能。
这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。
PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。
PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和EEPROM技术。
还有一类结构更为灵活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。
PLA器件既有现场可编程的,也有掩膜可编程的。
在PAL的基础上,又发展了一种通用阵列逻辑GAL(GenericArrayLogic),如GAL16V8,GAL22V10等。
它采用了EEPROM工艺,实现了电可按除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。
这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。
为了弥补这一缺陷,20世纪80年代中期。
Altera和Xilinx分别推出了类似于PAL结构的扩展型CPLD(ComplexProgrammab1eLogicDvice)和与标准门阵列类似的FPGA(FieldProgrammableGateArray),它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。
这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。
与门阵列等其它ASIC(ApplicationSpecificIC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和小批量产品生产(一般在10,000件以下)之中。
几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。
(二)FPGA、CPLD概述
FPGA(现场可编程门阵列)与CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,它们是在PAL,GAL等逻辑器件的基础之上发展起来的。
同以往的PAL,GAL等相比较,FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。
这样的FPGA/CPLD实际上就是一个子系统部件。
这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。
经过了十几年的发展,许多公司都开发出了多种可编程逻辑器件。
比较典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,它们开发较早,占用了较大的PLD市场。
通常来说,在欧洲用Xilinx的人多,在日本和亚太地区用ALTERA的人多,在美国则是平分秋色。
全球PLD/FPGA产品60%以上是由Altera和Xilinx提供的。
可以讲Altera和Xilinx共同决定了PLD技术的发展方向。
当然还有许多其它类型器件,如:
Lattice,Vantis,Actel,Quicklogic,Lucent等。
(99年Lattice收购了Vantis,成为第三大PLD供应商。
表1998年世界十大PLD公司
排名
公司
销售额(亿美金)
市场占有率
1
Altera
2
Xilinx
3
Vantis
4
Lattice
5
Actel
6
Luccent
7
Cypress
8
Atmel
9
Philips
10
Quicklogic
资料来源:
99年4月《电子产品世界》
尽管FPGA,CPLD和其它类型PLD的结构各有其特点和长处,但概括起来,它们是由三大部分组成的:
(1)一个二维的逻辑块阵列,构成了PLD器件的逻辑组成核心;
(2)输入/输出块;(3)连接逻辑块的互连资源,由各种长度的连线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间、逻辑块与输入/输出块之间的连接。
图1.2.1PLD的结构
对用户而言,虽然CPLD与FPGA的内部结构稍有不同,但其用法都一样,所以多数情况下,不加以区分。
FPGA/CPLD芯片都是特殊的ASIC芯片,它们除了具有ASIC的特点之外,还具有以下几个优点:
(1)
(1) 随着VlSI(VeryLargeScaleIC,超大规模集成电路)工艺的不断提高单一芯片内部可以容纳上百万个晶体管,FPGA/CPLD芯片的规模也越来越大,其单片逻辑门数已达到上百万门,它所能实现的功能也越来越强,同时也可以实现系统集成,即片上系统SOC。
(2)
(2) FPGA/CPLD芯片在出厂之前都做过百分之百的测试,不需要设计人员承担投片风险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片的最终功能设计。
所以,FPGA/CPLD的资金投入小,节省了许多潜在的花费。
(3)(3) 用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。
所以,用FPGA/PLD试制样片,能以最快的速度占领市场。
FPGA/CPLD软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直至最后芯片的制作。
当电路有少量改动时,更能显示出FPGA/CPLD的优势。
电路设计人员使用FPGA/CPLD进行电路设计时,不需要具备专门的IC(集成电路)深层次的知识,FPGA/CPLD软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。
(4)(4) 在线可编程技术(ISP)使得使用CPLD/FPGA的产品可以做到远程升级。
(以上内容参照西电《CPLD技术及其应用》,有改动)
(三)PLD/FPGA结构与原理初步
一.一. 基于乘积项(Product-Term)的PLD结构
采用这种结构的PLD芯片有:
Altera的MAX7000,MAX3000系列(EEPROM工艺),Xilinx的XC9500系列(Flash工艺)和Lattice,Cypress的大部分产品(EEPROM工艺)。
我们先看一下这种PLD的总体结构(以MAX7000为例,其他型号的结构与此都非常相似):
图基于乘积项的PLD内部结构
这种PLD可分为三块结构:
宏单元(Marocell),可编程连线(PIA)和I/O控制块。
宏单元是PLD的基本结构,由它来实现基本的逻辑功能。
图中阴影部分是多个宏单元的集合(因为宏单元较多,没有一一画出)。
可编程连线负责信号传递,连接所有的宏单元。
I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。
图左上的INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2是全局时钟,清零和输出使能信号,这几个信号有专用连线与PLD中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。
宏单元的具体结构见下图:
图宏单元结构
左侧是乘积项阵列,实际就是一个与或阵列,每一个交叉点都是一个可编程熔丝,如果导通就是实现“与”逻辑。
后面的乘积项选择矩阵是一个“或”阵列。
两者一起完成组合逻辑。
图右侧是一个可编程D触发器,它的时钟,清零输入都可以编程选择,可以使用专用的全局清零和全局时钟,也可以使用内部逻辑(乘积项阵列)产生的时钟和清零。
如果不需要触发器,也可以将此触发器旁路,信号直接输给PIA或输出到I/O脚。
二.二. 乘积项结构PLD的逻辑实现原理
下面我们以一个简单的电路为例,具体说明PLD是如何利用以上结构实现逻辑的,电路如下图:
图
假设组合逻辑的输出(AND3的输出)为f,则f=(A+B)*C*(!
D)=A*C*!
D+B*C*!
D(我们以!
D表示D的“非”)
PLD将以下面的方式来实现组合逻辑f:
图
A,B,C,D由PLD芯片的管脚输入后进入可编程连线阵列(PIA),在内部会产生A,A反,B,B反,C,C反,D,D反8个输出。
图中每一个叉表示相连(可编程熔丝导通),所以得到:
f=f1+f2=(A*C*!
D)+(B*C*!
D)。
这样组合逻辑就实现了。
图3电路中D触发器的实现比较简单,直接利用宏单元中的可编程D触发器来实现。
时钟信号CLK由I/O脚输入后进入芯片内部的全局时钟专用通道,直接连接到可编程触发器的时钟端。
可编程触发器的输出与I/O脚相连,把结果输出到芯片管脚。
这样PLD就完成了图所示电路的功能。
(以上这些步骤都是由软件自动完成的,不需要人为干预)。
图的电路是一个很简单的例子,只需要一个宏单元就可以完成。
但对于一个复杂的电路,一个宏单元是不能实现的,这时就需要通过并联扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编程连线阵列,再做为另一个宏单元的输入。
这样PLD就可以实现更复杂逻辑。
这种基于乘积项的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无需其他芯片配合。
三.三. 表(Look-Up-Table)的原理与结构
采用这种结构的PLD芯片我们也可以称之为FPGA:
如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。
查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。
目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。
当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
下面是一个4输入与门的例子:
实际逻辑电路
LUT的实现方式
a,b,c,d输入
逻辑输出
地址
RAM中存储的内容
0000
0
0000
0
0001
0
0001
0
....
0
...
0
1111
1
1111
1
四.四. 基于查找表(LUT)的FPGA的结构
altera的FLEX/ACEX等芯片的结构如下图:
图1.3.5alteraFLEX/ACEX芯片的内部结构
逻辑单元(LE)内部结构
FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。
在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT,一个触发器和相关的相关逻辑。
LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX、CYCLONE等的结构与此基本相同,具体请参阅数据手册)。
我们还是以这个电路的为例:
A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。
该电路中D触发器是直接利用LUT后面D触发器来实现。
时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。
触发器的输出与I/O脚相连,把结果输出到芯片管脚。
这样PLD就完成了图所示电路的功能。
(以上这些步骤都是由软件自动完成的,不需要人为干预)。
这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。
对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。
由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。
也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。
六.选择PLD还是FPGA?
根据上述PLD的结构和原理可以知道,PLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。
而FPGA的一个LUT只能处理4输入的组合逻辑,因此,PLD适合用于设计译码等复杂组合逻辑。
但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,PLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于PLD。
所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好选择。
第二章FPGA大体教程
第一节FPGA的大体开发流程
PLD是可编程逻辑器件(ProgramableLogicDevice)的简称,FPGA是现场可编程门阵列(FieldProgramableGateArray)的简称,二者的功能大体相同,只是实现原理略有不同,因此咱们有时能够忽略这二者的区别,统称为可编程逻辑器件或PLD/FPGA。
PLD是电子设计领域中最具活力和进展前途的一项技术,它的阻碍丝毫不亚于70年代单片机的发明和利用。
PLD能做什么呢?
能够毫不夸张的讲,PLD能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都能够用PLD来实现。
PLD犹如一张白纸或是一堆积木,工程师能够通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。
通过软件仿真,咱们能够事前验证设计的正确性。
在PCB完成以后,还能够利用PLD的在线修改能力,随时修改设计而没必要改动硬件电路。
利用PLD来开发数字电路,能够大大缩短设计时刻,减少PCB面积,提高系统的靠得住性。
PLD的这些优势使得PLD技术在90年代以后取得飞速的进展,同时也大大推动了EDA软件和硬件描述语言(HDL)的进步。
如何利用PLD呢?
其实PLD的利用很简单,学习PLD比学习单片机要简单的多,有数字电路基础,会利用运算机,就能够够进行PLD的开发。
开发PLD需要了解两个部份:
开发软件本身
由于PLD软件已经进展的相当完善,用户乃至能够不用详细了解PLD的内部结构,也能够用自己熟悉的方式:
如原理图输入或HDL语言来完成相当优秀的PLD设计。
因此对初学者,第一应了解PLD开发软件和开发流程。
了解PLD的内部结构,将有助于提高咱们设计的效率和靠得住性。
下面咱们以基于Altera公司的QuantusII软件来简单说明一下FPGA的开发流程。
以下图是一个典型的基于QuantusII的FPGA开发流程。
(1)成立工程是每一个开发进程的开始,QuantusII(以下简称Q2)以工程为单元对设计进程进行治理。
(2)成立顶层图。
能够如此明白得,顶层图是一个容器,将整个工程的各个模块包容在里面,编译的时候就将这些模块整合在一路。
也能够明白得为它是一个大元件,包括各个模块,编译的时候确实是生成一个如此的大元件。
(3)采纳ALTERA公司提供的LPM功能模块。
Q2软件环境里包括了大量的经常使用功能模块,例如计数器、累加器、比较器、译码器等等;若是不知道在工程中采纳这些现有的功能模块真是太浪费了。
以本人的体会,一个设计中一样只有极少部份的模块需要自己从零设计。
(4)自己成建功能模块。
固然,有些设计中现有的模块功能不能知足具体设计的要求,那就只能自己设计啦。
能够用硬件描述语言也能够用原理图的输入方式。
能够把它们独立地看成一个工程来设计,并生成模块符号(Symbol),然后在顶层图中利用那个模块的符号,并将源文件(实现该模块的原理图或HDL文件)拷到顶层图所在的工程目录下。
那个进程比如你要做一个电路,此刻市面上没有你想要的某个芯片,你就只能自己做一块如此的一块芯片,然后添加到你的电路板上。
(5)将顶层图的各个功能模块用连线连起来。
那个进程类似电路图设计,把各个芯片连接起来,组成电路系统。
(6)系统的功能原理图至此已经大体出炉了,下一步要为该设计选择芯片载体,才能真正在物理上实现系统的功能。
这一步的要紧工作是:
(1)选择芯片型号;
(2)为顶层图的各个输入输出信号分派芯片的管脚;(3)设置编译选项,目的是让编译器明白更多的信息。
(7)编译。
那个进程类似软件开发里的编译,但事实上那个进程比软件的编译要复杂得多,因为它毕竟最终要实现硬件里的物理结构,包括了优化逻辑的组合、综合逻辑和布线等步骤。
在类似Q2如此的集成环境里面,这些进程都能够一气呵成,集成环境帮你自动完成了几个步骤的工作。
固然,你也能够用其它工具来实现各个步骤的工作,这些内容超出了本教程陈述的范围。
(8)编译后会生成*.sof或*.pof文件,前者能够通过JTAG下载到FPGA内部,设计无误的话即能实现预期的功能,但断电后FPGA里的这些信息会丢失;后者能够下载到FPGA的配置芯片(EEPROM或FLASH芯片),掉电后这些配置信息可不能丢失,从头上电以后通过该配置芯片对FPGA的内部RAM进行配置。
(9)关于复杂的设计,工程编译了以后能够采纳Q2的仿真功能或其它仿真软件(如ModelSim)对设计反复进行仿真和验证,直到知足要求。
第二节 基于Quart