FPGA&SOPC快速入门教程
文件类型:PDF/Adobe Acrobat 文件大小:字节
更多搜索:FPGA amp SOPC 快速 入门 教程
21嵌入式控制科技 www.21control.com
FPGA/SOPC开发快速入门教程1
V2.03
2005-9-1
www.21control.com
前言
FPGA在复杂逻辑电路以及数字信号处理领域中扮演者越来越重要的角色,SOC(片上系统)以其低
功耗,高性能,低成本,高可靠性等优点成为嵌入式系统的发展趋势.作为一个简明的教程,主要宗旨是
让初学者快速地了解FPGA/SOPC(可编程片上系统)开发的流程.目前IT技术的发展可以说是一日千里,
以本人的观点来讲,如果希望在电子设计领域有所作为,则必须具备快速掌握新技术的能力.电子设计最
重要的是实践的积累,我们只要具备了一定的基础,应当马上投入实践,否则很多概念都无法真正理解.
有不少人包括我,当下决心要成为一个合格的电子设计工程师的时候,总是想如果把有关电路方面的理论
都掌握了才能所向披靡,有底气参加实际项目设计.当然如果能做到"把有关理论都掌握了"这样的境界,
我想应该是很理想的,但经验发现这并不实际.据我所知,我所认识的不少电子设计牛人,他们的理论知
识可能都比不上我们的本科生,但很多不错的产品都是从他们的手中开发出来的,有了实践的经验后,他
们掌握新技术的速度相当惊人.有人跟我说:"新技术是拿来用的,不是拿来学的."他们认为掌握新的设
计技术应当尽快掌握它的设计流程.因此,我参考朋友给我的意见,写了这个简易的教程,以非常详细的
实例来让初学者了解基于QuartusII和NiosII IDE的FPGA/SOPC开发的基本流程,目的是为了让初学者尽
快上手FPGA/SOPC的开发流程,尽快投入到实践中.为了易于说明问题,本教程中的一些概念并不是很
严谨,如果读者对某些提法有异议,请参考相关资料和教材,并以相关资料和教材为准.通过该简明教程,
初学者能快速了解FPGA/SOPC的基本开发流程,很多技巧和深入理解都靠长期的经验积累,因此初学者
应该在了解了基本流程以后,思维不能局限于此,应在实践中提高水平,并参考更全面和权威的资料.
本教程配套CT-SOPCx系列FPGA/SOPC学习套件(对于该套件的相关内容请参考附录.)以实践为基
础,适合具备基本的数字电路设计基础的初学者.第一章是CPLD/FPGA的基本知识,这部分内容摘自互
联网(www.fpga.com.cn)并稍加删改,对于CPLD/FPGA知识为零的初学者应先了解这部分内容;对于已
经有了一定基础的同学可以跳过这部分内容.第二章以两个例子来让初学者了解FPGA的基本开发流程,
并熟悉QuartusII软件的使用.第三章以一个例子来让初学者了解基于NiosII软CPU核的SOPC设计流程,
并熟识SOPC Builder和NiosII IDE的基本使用.附录是本文所涉及的例子的学习板相关的内容.
由于本人水平有限,错漏和不严谨之处在所难免,欢迎大家批评指正.
冯寿廷
2005年9月25日,于华南理工大学
1 版权归www.21control.com所有,未经同意不得翻印,公开传播等,互联网转载请注明源出处: www.21control.com .
1
21嵌入式控制科技 www.21control.com
第一章 CPLD/FPGA的基本知识
(一)可编程逻辑器件的历史和概述
随着数字电路应用越来越广泛,传统通用的数字集成芯片已经难以满足系统
的功能要求,而且随着系统复杂程度的提高,所需通用集成电路的数量呈爆炸
性增值,使得电路的体积膨大,可靠性难以保证.此外,现代产品的生命周期
都很短,一个电路可能需要在很短的周期内作改动以满足新的功能需求,对于
采用通用的数字集成电路设计的电路系统来说即意味着重新设计和重新布线.
因此,系统设计师们希望自己设计专用集成电路(ASIC)芯片,而且希望ASIC的
设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即
投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛
的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD).
早期的可编程逻辑器件只有可编程只读存贮器(PROM),紫外线可按除只读存
贮器(EPROM)和电可擦除只读存贮器(EEPROM)三种.由于结构的限制,它们只能
完成简单的数字逻辑功能.
其后,出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),
它能够完成各种数字逻辑功能.典型的PLD由一个"与"门和一个"或"门阵
列组成,而任意一个组合逻辑都可以用"与一或"表达式来描述,所以, PLD
能以乘积和的形式完成大量的组合逻辑功能.
这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑).PAL
由一个可编程的"与"平面和一个固定的"或"平面构成,或门的输出可以通
过触发器有选择地被置为寄存状态. PAL器件是现场可编程的,它的实现工艺
有反熔丝技术,EPROM技术和EEPROM技术.还有一类结构更为灵活的逻辑器件
是可编程逻辑阵列(PLA),它也由一个"与"平面和一个"或"平面构成,但是
这两个平面的连接关系是可编程的. PLA器件既有现场可编程的,也有掩膜可
编程的. 在PAL的基础上,又发展了一种通用阵列逻辑GAL (Generic Array
Logic),如GAL16V8,GAL22V10 等.它采用了EEPROM工艺,实现了电可按除,
电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活
性,至今仍有许多人使用. 这些早期的PLD器件的一个共同特点是可以实现速
度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电
路.
为了弥补这一缺陷,20世纪80年代中期. Altera和Xilinx分别推出了类
似于PAL结构的扩展型 CPLD(Complex Programmab1e Logic Dvice)和与标准门
阵列类似的FPGA(Field Programmable Gate Array),它们都具有体系结构和逻
辑单元灵活,集成度高以及适用范围宽等特点. 这两种器件兼容了PLD和通用
门阵列的优点,可实现较大规模的电路,编程也很灵活.与门阵列等其它
ASIC(Application Specific IC)相比,它们又具有设计开发周期短,设计制造
2
21嵌入式控制科技 www.21control.com
成本低,开发工具先进,标准产品无需测试,质量稳定以及可实时在线检验等
优点,因此被广泛应用于产品的原型设计和小批量产品生产(一般在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供应商.
表1.2.1 1998年世界十大PLD公司
排名 公司 销售额(亿美金)
市场占有
率
1 Altera 5.96 30.1
2 Xilinx 5.74 29.0
3 Vantis 2.20 11.1
4 Lattice 2.18 11.0
5 Actel 1.39 7.0
6 Luccent 0.85 4.3
7 Cypress 0.44 2.2
8 Atmel 0.42 2.1
9 Philips 0.28 1.4
10 Quicklogic0.24 1.2
资料来源:99年4月《电子产品世界》
尽管FPGA,CPLD和其它类型PLD的结构各有其特点和长处,但概括起来,它
们是由三大部分组成的:(1)一个二维的逻辑块阵列,构成了PLD器件的逻辑
组成核心;(2)输入/输出块;(3)连接逻辑块的互连资源,由各种长度的连
3
21嵌入式控制科技 www.21control.com
线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间,逻辑块
与输入/输出块之间的连接.
图1.2.1 PLD的结构
对用户而言,虽然CPLD与FPGA的内部结构稍有不同,但其用法都一样,
所以多数情况下,不加以区分.FPGA/CPLD芯片都是特殊的ASIC芯片,它们除
了具有ASIC的特点之外,还具有以下几个优点:
(1) 随着VlSI(Very Large Scale IC,超大规模集成电路)工艺的不断提高单
一芯片内部可以容纳上百万个晶体管, FPGA/CPLD芯片的规模也越来越大,
其单片逻辑门数已达到上百万门,它所能实现的功能也越来越强,同时也可
以实现系统集成,即片上系统SOC.
(2) FPGA/CPLD芯片在出厂之前都做过百分之百的测试,不需要设计人员承
担投片风险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬
件环境来完成芯片的最终功能设计.所以, FPGA/CPLD的资金投入小,节
省了许多潜在的花费.
(3) 用户可以反复地编程,擦除,使用或者在外围电路不动的情况下用不同
软件就可实现不同的功能.所以,用FPGA/PLD 试制样片,能以最快的速度
占领市场. FPGA/CPLD软件包中有各种输入工具和仿真工具,及版图设计
工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输
入,编译,优化,仿真,直至最后芯片的制作. 当电路有少量改动时,更能
显示出FPGA/CPLD的优势.电路设计人员使用FPGA/CPLD进行电路设计时,
不需要具备专门的IC(集成电路)深层次的知识, FPGA/CPLD软件易学易用,
可以使设计人员更能集中精力进行电路设计,快速将产品推向市场.
(4) 在线可编程技术(ISP)使得使用CPLD/FPGA的产品可以做到远程升级.
(以上内容参照西电《CPLD技术及其应用》,有改动)
(三)PLD/FPGA 结构与原理初步
一. 基于乘积项(Product-Term)的PLD结构
4
21嵌入式控制科技 www.21control.com
采用这种结构的PLD芯片有:Altera的MAX7000,MAX3000系列(EEPROM工
艺),Xilinx的XC9500系列(Flash工艺)和Lattice,Cypress的大部分产品
(EEPROM工艺).我们先看一下这种PLD的总体结构(以MAX7000为例,其他
型号的结构与此都非常相似):
图1.3.1 基于乘积项的PLD内部结构
这种PLD可分为三块结构:宏单元(Marocell),可编程连线(PIA)和I/O
控制块. 宏单元是PLD的基本结构,由它来实现基本的逻辑功能.图1.3.1中
阴影部分是多个宏单元的集合(因为宏单元较多,没有一一画出).可编程连
线负责信号传递,连接所有的宏单元.I/O控制块负责输入输出的电气特性控制,
比如可以设定集电极开路输出,摆率控制,三态输出等. 图1.3.1 左上的
INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2 是全局时钟,清零和输出使
能信号,这几个信号有专用连线与PLD中每个宏单元相连,信号到每个宏单元
的延时相同并且延时最短.宏单元的具体结构见下图:
5
21嵌入式控制科技 www.21control.com
图1.3.2 宏单元结构
左侧是乘积项阵列,实际就是一个与或阵列,每一个交叉点都是一个可编程
熔丝,如果导通就是实现"与"逻辑.后面的乘积项选择矩阵是一个"或"阵
列.两者一起完成组合逻辑.图右侧是一个可编程D触发器,它的时钟,清零
输入都可以编程选择,可以使用专用的全局清零和全局时钟,也可以使用内部
逻辑(乘积项阵列)产生的时钟和清零.如果不需要触发器,也可以将此触发
器旁路,信号直接输给PIA或输出到I/O脚.
二. 乘积项结构PLD的逻辑实现原理
下面我们以一个简单的电路为例,具体说明PLD是如何利用以上结构
实现逻辑的,电路如下图:
图1.3.3
假设组合逻辑的输出(AND3的输出)为f,则f=(A+B)*C*(!D)=A*C*!D +
B*C*!D ( 我们以!D表示D的"非")
PLD将以下面的方式来实现组合逻辑f:
图1.3.4
A,B,C,D由PLD芯片的管脚输入后进入可编程连线阵列(PIA),在内
部会产生A,A反,B,B反,C,C反,D,D反8个输出.图中每一个叉表示相连
6
21嵌入式控制科技 www.21control.com
(可编程熔丝导通),所以得到:f= f1 + f2 = (A*C*!D) + (B*C*!D) .
这样组合逻辑就实现了. 图3电路中D触发器的实现比较简单,直接利
用宏单元中的可编程D触发器来实现.时钟信号CLK由I/O脚输入后进入
芯片内部的全局时钟专用通道,直接连接到可编程触发器的时钟端.可编
程触发器的输出与I/O脚相连,把结果输出到芯片管脚.这样PLD就完成
了图1.3.3所示电路的功能.(以上这些步骤都是由软件自动完成的,不
需要人为干预).
图1.3.3的电路是一个很简单的例子,只需要一个宏单元就可以完成.
但对于一个复杂的电路,一个宏单元是不能实现的,这时就需要通过并联
扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编
程连线阵列,再做为另一个宏单元的输入.这样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等芯片的结构如下图:
7
21嵌入式控制科技 www.21control.com
图1.3.5 altera FLEX/ACEX 芯片的内部结构
逻辑单元(LE)内部结构
FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/
列连线.在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一
个LUT,一个触发器和相关的相关逻辑.LE是FLEX/ACEX芯片实现逻辑的最基
本结构(altera其他系列,如APEX,CYCLONE等的结构与此基本相同,具体请参
阅数据手册).
五.查找表结构的FPGA逻辑实现原理
我们还是以这个电路的为例:
8
21嵌入式控制科技 www.21control.com
A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线
连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找
到相应的数据然后输出,这样组合逻辑就实现了. 该电路中D触发器是
直接利用LUT后面D触发器来实现.时钟信号CLK由I/O脚输入后进入芯
片内部的时钟专用通道,直接连接到触发器的时钟端.触发器的输出与I/O
脚相连,把结果输出到芯片管脚.这样PLD就完成了图1.3.3所示电路的
功能.(以上这些步骤都是由软件自动完成的,不需要人为干预).
这个电路是一个很简单的例子,只需要一个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是可编程逻辑器件(Programable Logic Device)的简称,FPGA是现
场可编程门阵列(Field Programable Gate Array)的简称,两者的功能基本
相同,只是实现原理略有不同,所以我们有时可以忽略这两者的区别,统称为
可编程逻辑器件或PLD/FPGA.
PLD是电子设计领域中最具活力和发展前途的一项技术,它的影响丝毫不亚
于70年代单片机的发明和使用.
PLD能做什么呢 可以毫不夸张的讲,PLD能完成任何数字器件的功能,上
9
21嵌入式控制科技 www.21control.com
至高性能CPU,下至简单的74电路,都可以用PLD来实现.PLD如同一张白纸或
是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的
设计一个数字系统.通过软件仿真,我们可以事先验证设计的正确性.在PCB
完成以后,还可以利用PLD的在线修改能力,随时修改设计而不必改动硬件电
路.使用PLD来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高
系统的可靠性. PLD的这些优点使得PLD技术在90年代以后得到飞速的发展,
同时也大大推动了EDA软件和硬件描述语言(HDL)的进步.
如何使用PLD呢 其实PLD的使用很简单,学习PLD比学习单片机要简单
的多,有数字电路基础,会使用计算机,就可以进行PLD的开发.
开发PLD需要了解两个部分:1.PLD开发软件 2.PLD本身
由于PLD软件已经发展的相当完善,用户甚至可以不用详细了解PLD的内
部结构,也可以用自己熟悉的方法:如原理图输入或HDL语言来完成相当优秀
的PLD设计.所以对初学者,首先应了解PLD开发软件和开发流程.了解PLD
的内部结构,将有助于提高我们设计的效率和可靠性.
下面我们以基于Altera公司的QuantusII软件来简单说明一下FPGA的开
发流程.
下图是一个典型的基于QuantusII的FPGA开发流程.
10
21嵌入式控制科技 www.21control.com
建立工程
建立顶层图
基于QuartusII的典型FPGA设计流程
尽量采用ALTERA
提供的LPM功能
模块
用户自己建立
功能模块,并
建立Symbol
将顶层图的
各个功能模
块连起来
选择FPGA型号
,分配管脚,
配置编译选项
编译
下载到目标
器件
(1) 建立工程是每个开发过程的开始,QuantusII(以下简称Q2)以工程为单
元对设计过程进行管理.
(2) 建立顶层图.可以这样理解,顶层图是一个容器,将整个工程的各个模块
包容在里面,编译的时候就将这些模块整合在一起.也可以理解为它是一
个大元件,包含各个模块,编译的时候就是生成一个这样的大元件.
(3) 采用ALTERA公司提供的LPM功能模块.Q2软件环境里包含了大量的常用
功能模块,例如计数器,累加器,比较器,译码器等等;如果不懂得在工
程中采用这些现有的功能模块真是太浪费了.以本人的经验,一个设计中
一般只有极少部分的模块需要自己从零设计.
(4) 自己建立功能模块.当然,有些设计中现有的模块功能不能满足具体设计
的要求,那就只能自己设计啦.可以用硬件描述语言也可以用原理图的输
入方法.可以把它们独立地当作一个工程来设计,并生成模块符号
(Symbol),然后在顶层图中使用这个模块的符号,并将源文件(实现该
模块的原理图或HDL文件)拷到顶层图所在的工程目录下.这个过程好比
你要做一个电路,现在市面上没有你想要的某个芯片,你就只能自己做一
块这样的一块芯片,然后添加到你的电路板上.
11
21嵌入式控制科技 www.21control.com
(5) 将顶层图的各个功能模块用连线连起来.这个过程类似电路图设计,把各
个芯片连接起来,组成电路系统.
(6) 系统的功能原理图至此已经基本出炉了,下一步要为该设计选择芯片载
体,才能真正在物理上实现系统的功能.这一步的主要工作是:(1)选择
芯片型号;(2)为顶层图的各个输入输出信号分配芯片的管脚;(3)设置
编译选项,目的是让编译器知道更多的信息.
(7) 编译.这个过程类似软件开发里的编译,但实际上这个过程比软件的编译
要复杂得多,因为它毕竟最终要实现硬件里的物理结构,包含了优化逻辑
的组合,综合逻辑以及布线等步骤.在类似Q2这样的集成环境里面,这
些过程都可以一气呵成,集成环境帮你自动完成了几个步骤的工作.当然,
你也可以用其它工具来实现各个步骤的工作,这些内容超出了本教程陈述
的范围.
(8) 编译后会生成*.sof或*.pof文件,前者可以通过JTAG下载到FPGA内部,
设计无误的话即能实现预期的功能,但断电后FPGA里的这些信息会丢失;
后者可以下载到FPGA的配置芯片(EEPROM或FLASH芯片),掉电后这些配
置信息不会丢失,重新上电以后通过该配置芯片对FPGA的内部RAM进行
配置.
(9) 对于复杂的设计,工程编译了以后可以采用Q2的仿真功能或其它仿真软
件(如ModelSim)对设计反复进行仿真和验证,直到满足要求.
第二节 基于QuartusII的实例
(一)实验一:实验板上的KEY1按钮控制FPGA核心板上的第一个LED灯.
目的:通过该实例学习,可以了解FPGA的基本开发流程,熟识quartusII软件
基本功能的使用.
原理:利用一个常开按钮(实验板上的KEY1)作为输入(常开时输入1,闭合
时输入0),经过一个反相器后输出到核心板的第一个LED.KEY1常开时,LED
亮,按下(闭合)实验板上的KEY1,该LED熄灭.
1. 建立工程
运行QuatrusII软件(以下简称Q2),建立工程,File New Project Wizad
如下图
12
21嵌入式控制科技 www.21control.com
点击New Project Wizard 后弹出指定工程名的对话框,在Diectory, Name,
Top-Level Entity中如下图填写:
按Next按钮,出现添加工程文件的对话框:
13
21嵌入式控制科技 www.21control.com
在这里我们先不用管它,直接按Next进行下一步,选择FPGA器件的型号:
在Family下拉筐中,我们选择Cyclone系列FPGA,然后在"Available
devices:"中根据核心板的FPGA型号选择FPGA型号,注意在Filters一栏选上
"Show Advanced Devices"以显示所有的器件型号.执行下一步出现对话框:
14
21嵌入式控制科技 www.21control.com
这里是选择其它EDA工具的对话框,我们用Q2的集成环境进行开发,因
此这里不作任何改动.按Next进入工程的信息总概对话框:
按Finish按钮即建立一个空项目.
2. 建立顶层图
执行File New,弹出新建文件对话框:
15
21嵌入式控制科技 www.21control.com
选择"Block Diagram Schematic File"按OK即建立一个空的顶层图,缺省
名为"Block1.bdf",我们把它另存为(File Save as),接受默认的文件名,并
将"Add file to current project"选项选上,以使该文件添加到工程中去.如图所
示:
3. 添加逻辑元件(Symbol)
双击顶层图图纸的空白处,弹出添加元件的对话筐:
16
21嵌入式控制科技 www.21control.com
在Libraries里寻找所需要的逻辑元件,如果知道逻辑元件的名称的话,也
可以直接在Name一栏敲入名字,右边的预览图即可显示元件的外观,按OK后
鼠标旁边即拖着一个元件符号,在图纸上点击左键,元件即安放在图纸上.
在图纸上分别添加非门(not),输入(input),输出(output)三个symbol,
如图所示:
连线,将鼠标移到symbol连线端口的那里,鼠标变成图示模样:,
按下左键拖动鼠标到另一个symbol的连线端.本例中,这三个symbol的连线如
下图所示:
分别双击input和output symbol的名字"pin_name","pin_name1",将它们
的名字改为Key1,LED1:
4. 分配管脚
为芯片分配管脚可以用QuartusII软件里的"Assignments Pins"菜单,也
17
21嵌入式控制科技 www.21control.com
可以用tcl脚本文件.用Tcl文件进行配置可重用性好,易于管理,因此本文介
绍用tcl的方法.对于另一种方法,可以参考QuartusII软件的帮助文档.
在工程目录下建立一个name为Setup.tcl的file.File New,选择other files
页面: 有关tcl文件的更详尽内容可参考QuartusII的帮助文档,对于我们所选用的
学习套件来说,由于不同型号的FPGA核心板的管脚与实验板上的引脚也不同,
因此不同的核心板对应的.tcl文件也不同(关于核心板引脚与实验板引脚对应的
详细情况请参照"CT-SOPCx学习套件用户手册"或相关电路原理图).在实际
项目中,该文件也可以根据具体管脚分配要求来改写.
(1) 对应于EP1C3核心板:
#Setup.tcl
# Setup pin setting
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT
TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_6 -to LED1
set_location_assignment PIN_52 -to key1
(2) 对应于EP1C6核心板:
#Setup.tcl
# Setup pin setting
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT
TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_1 -to led1
set_location_assignment PIN_156 -to key1
18
21嵌入式控制科技 www.21control.com
保存到工程目录下,并注意在保存对话框选上"Add file to current
project"选项.然后打开Tools -> Tcl Scripts,选中刚才编辑的Script
文件:Setup,并点击Run,如下图:
注意:建立工程时如果路径名有中文字符或者路径名有空格字符,则
tcl Script文件将运行不了.比如,本例建立的工程"FPGA_led_test"
目录是: C:\altera\quartus42\myq2projects\FPGA_led_test
如果是:
C:\altera\quartus42\my q2projects\FPGA_led_test\
在该目录下运行工程里的setup.tcl就会出错.
5. 设置.在建立工程的时候我们选定了芯片型号,其实也可以在这一步设定芯
片型号,在菜单Assignments Device:
弹出设置对话框:
19
21嵌入式控制科技 www.21control.com
根据核心板的FPGA选择芯片型号,如上图所示选择EP1C3T144C8.点击
设置对话框的"Device & Pin Options"按钮弹出Device & Pin Options对话框,
并选择该对话框的Configuration标签页,如下图所示:
在Configuration标签页上,选择如上图所示内容.其余留缺省设置即可.
20
21嵌入式控制科技 www.21control.com
按确定退出该对话筐,按OK退出设置对话框,返回到顶层图界面.
6. 编译.按主工具栏上的编译按钮即开始编译:
QuartusII下面的Message 窗口会显示一些编译信息,最后编译成功弹出提示:
7. 下载.
(1) 下载设置:如果第一次使用下载线下载配置文件到FPGA,则需要在
Q2软件设置下载线的型号等信息.先将ByteBlasterII下载线的一头接到PC的
并口,执行菜单Tools Programmer(如下图)
打开下载界面,可看到No Hardware,表示还没有设置下载线,如下图:
点击Hardware Setup,弹出"Hardware Setup"对话框:
21
21嵌入式控制科技 www.21control.com
点击"Add Hardware",弹出"Add Hardware"对话筐:
在Hardware type下拉列表选择"ByteBlasterMV or ByteBlasterII",点OK返
回"Hardware Setup"对话框,从"Currently selected hardware:"下拉列表选择
ByteBlasterII[LPT1],点击"Close"返回下载界面,可看到下载线已经被添加:
(2) 将ByteBlasterII下载线一头与PC连接,另一头插入到JTAG口或EPCS1
的下载口注意:JTAG口或EPCS1下载口的Pin1必须与ByteBlasterII的10针插
头的Pin1对应.
(3) FPGA核心板接上5V电源.
(4) 如果只是调试一下设计是否成功,可通过JTAG口把芯片的配置信息
22
21嵌入式控制科技 www.21control.com
下载到FPGA芯片内,掉电后配置信息丢失.此时,下载界面的"Mode:"下拉
列表应选择"JTAG",并选择工程中.sof后缀的文件进行下载.(注意记得在
"Program/Configure"那个方框那里打上"√",其它"Verify","Blank Check"
等可根据需要选择.)
(5) 如果要下载到非易失Flash配置芯片(掉电后配置信息不丢失)里去,则
将ByteBlasterII插到EPCS1芯片的下载口.并在下载界面的"Mode:"下拉列
表应选择"Active Serial Programming",并选择工程中.pof后缀的文件进行下载.
下载完后可以发现核心板上只有第一个LED(D1)点亮,原因是我们在
Setup.tcl文件中指定没用的管脚为输入&三态(set_global_assignment -name
RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"),(注意,如果是
EP1C6核心板V2.0,请务必将未用管脚定义为"As inputs, tri-stated",因为必
须确保该核心板上当前没用到的Flash芯片与FPGA之间以高阻态相隔,否则会
发生损坏芯片的危险!)核心板上的LED是低电平点亮,第二个发光二极管(D2)
对应的FPGA管脚因为没有用而设为输入&三态,因此不亮;而由于D1的是由内
部非门控制,所以按钮1(KEY1)没按下时是亮的.
没用到的管脚定义也可以在设置项设置,菜单"Assignments->Settings":
打开"Setting"对话框:
再点击"Device & Pin Options",弹出"Device & Pin Options"对话框:
23
21嵌入式控制科技 www.21control.com
在"Unused Pins"标签页,有未用到管脚的设置选项("Reserve all unsued
pins"),用户可以根据需要选择."Device & Pin Options"对话框还有其它设置
的标签页,大家可以看看其它的吧,多熟识一下QuartusII的界面.
8. 结果.在本例的设计中,我们利用一个常开按钮(实验板上的KEY1)作为
输入(常开时输入1,闭合时输入0),经过一个反向器后输出到核心板的第一
个LED;因此按下(闭合)实验板上的KEY1,该LED灭.该设计非常简单,
并没有实际的用处,然而我们就是需要简单,目的就是为了更容易理解FPGA
的设计流程和QuartusII软件的基本用法.虽然简单,也用去了不少篇幅啊,可
能有人会略嫌罗嗦啦,呵呵,耐心点,我相信还是有不少刚接触这个软件或刚
接触FPGA设计的吧,看到自己居然能用按钮控制这个LED的亮和灭了,说不
定会激动良久呢!呵呵,两年前我就是这样啊.
(二) 实验二:实验板上的按钮控制数码管
目的:
进一步熟识利用QuartusII软件进行FPGA设计的流程;
掌握利用现有的宏功能模块进行设计;
熟识自行设计功能模块的方法.
原理:
24
21嵌入式控制科技 www.21control.com
设计一个8位的可逆计数器,利用实验板上的三个按钮开关分别作为"减
少计数值","增加计数值"和"清零计数值"的输入.计数器的8位二进制输
出用两个七段数码管来显示,其中七段数码管的译码模块由用户添加,本例中
我们用VHDL语言来设计该功能模块,并添加到设计中.
1. 建立工程.参照实验一的步骤建立一个名为"seg7led_test"的工程,并建
立顶层图.
2. 使用宏功能模块.使用Altera公司提供的宏功能模块(LPM),本例中我
们要利用计数器LPM.双击顶层图空白处,弹出symbol对话框,展开Libraries,
找到lpm_counter,如下图所示:
按OK,弹出宏模块设置对话框:
25
21嵌入式控制科技 www.21control.com
接受默认设置,并按Next,计数器的宽度设为8位,选上可逆计数选项,
如下图:
按Next,接受默认设置,如下图:
按Next,选上异步清零输入,如下图:
按Next,接受默认设置,再按Finish即完成LPM_Counter宏功能模块的设置.
在顶层图上点击鼠标即可将该计数器模块加入到工程中,如下图:
updown:计数方向控制,"1":增加
计数值,"0":减少计数值;
clock:计数脉冲输入;
aclr:异步清零,高电平清零;
q[7..0]:计数值输出.
3. 设计七段数码管的译码模块.打开File New如图:
26
21嵌入式控制科技 www.21control.com
点击OK后建立一个VHDL文件,另存为bin27seg.vhd.注意:QuartusII要求
文件名必须与代码中的实例名(entity)相同.编写七段译码模块的VHDL代码
(该文件在该例子目录中能找到):
library IEEE;
use IEEE.std_logic_1164.all;
entity bin27seg is
port (
data_in : in std_logic_vector (3 downto 0);
data_out : out std_logic_vector (6 downto 0)
);
end entity;
architecture bin27seg_arch of bin27seg is
begin
process(data_in)
begin
case data_in is
when "0000" => data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out data_out NULL;
end case;
end process;
end architecture;
输入完成后,将该文件设为顶层实体(因为Q2分析,综合和编译等都针对
顶层实体),该命令在Project Set as top-level Entity,如下图:
分析该vhd设计文件:执行工具栏处的"Start Analysis &Synthesis"命令按
钮,开始分析综合,这个步骤在这里用于检查设计错误.
分析成功后我们要生成一个七段数码管的译码元件符号(Symbol),执行
File Create/Update Create Symbol files for current file,开始建立该文件的元件
符号.
4. 设计完整的顶层图.
我们返回顶层原理图,并注意重新将顶层原理图设为顶层实体(Project Set
as top-level Entity,可以这样理解,编译操作都是针对顶层实体进行的).
双击顶层图空白的地方,弹出symbol对话框,展开Libraries栏的Project
库,我们可以看到刚才建立的七段数码管译码元件符号,如下图:
按OK,在图纸上空白地方点击即可输入七段数码管译码元件,共需在图纸
28
21嵌入式控制科技 www.21control.com
上输入两个七段数码管译码元件.
添加其它的元件,并完成如下图所示连接(如果不明白如何添加,请参考
本教程实例一):
从上图可以看出,基于原理图的设计输入类似于在protel软件中绘制电路
图,上图中粗线属于总线类型,它的宽度(例如q[3..0]标识从q3到q0共4条电
气连线)必须与元件端口的宽度一致,网络标号相同的线表示相互连接.例如
上图中,q[7..4]网络标号表示inst6元件(七段数码管)的data_in[3..0]与inst(计
数器)的高4位线相连,即q[7..4].
总线与网络标号的编辑:将鼠标移到元件的端口处,变成形状,按住
左键,拖动到所需的长度,松开鼠标,拉出来的线呈被选择的状态,此时直接
从键盘敲入网络标号即可;如果线没有呈被选择的状态,则左键点击线选上.
5. 设置芯片和管脚.参照实验一的第6点设置芯片型号,配置芯片型号等内容.
参照以下tcl script 文件配置芯片管脚,并运行该tcl脚本.
○1对于EP1C3核心板,tcl管脚配置文件为(关于核心板引脚与实验板引脚对应
的详细情况请参照"CT-SOPCx学习套件用户手册"或相关电路原理图):
#Setup.tcl
# Setup pin setting for EP1C3 main board
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT
TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_52 -to key1
set_location_assignment PIN_53 -to key2
set_location_assignment PIN_54 -to reset
set_location_assignment PIN_68 -to seg7led1\[0\]
set_location_assignment PIN_61 -to seg7led1\[1\]
set_location_assignment PIN_56 -to seg7led1\[2\]
29
21嵌入式控制科技 www.21control.com
set_location_assignment PIN_55 -to seg7led1\[3\]
set_location_assignment PIN_59 -to seg7led1\[4\]
set_location_assignment PIN_67 -to seg7led1\[5\]
set_location_assignment PIN_62 -to seg7led1\[6\]
set_location_assignment PIN_72 -to seg7led2\[0\]
set_location_assignment PIN_69 -to seg7led2\[1\]
set_location_assignment PIN_58 -to seg7led2\[2\]
set_location_assignment PIN_60 -to seg7led2\[3\]
set_location_assignment PIN_57 -to seg7led2\[4\]
set_location_assignment PIN_71 -to seg7led2\[5\]
set_location_assignment PIN_70 -to seg7led2\[6\]
○2对于EP1C6核心板,tcl管脚配置文件为:
#Setup.tcl
# Setup pin setting for EP1C6 main board
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT
TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_156 -to key1
set_location_assignment PIN_158 -to key2
set_location_assignment PIN_159 -to reset
set_location_assignment PIN_169 -to seg7led1\[0\]
set_location_assignment PIN_166 -to seg7led1\[1\]
set_location_assignment PIN_161 -to seg7led1\[2\]
set_location_assignment PIN_160 -to seg7led1\[3\]
set_location_assignment PIN_164 -to seg7led1\[4\]
set_location_assignment PIN_168 -to seg7led1\[5\]
set_location_assignment PIN_167 -to seg7led1\[6\]
set_location_assignment PIN_175 -to seg7led2\[0\]
set_location_assignment PIN_170 -to seg7led2\[1\]
set_location_assignment PIN_163 -to seg7led2\[2\]
set_location_assignment PIN_165 -to seg7led2\[3\]
set_location_assignment PIN_162 -to seg7led2\[4\]
set_location_assignment PIN_174 -to seg7led2\[5\]
set_location_assignment PIN_173 -to seg7led2\[6\]
6. 编译.注意当前顶层实体是否顶层图,否的话必须执行菜单命令Project Set
as top-level Entity将顶层图设为当前顶层实体.
7. 下载.下载完毕会看到两个七段数码管显示当前计数值"00",按实验板上的
KEY1按钮,计数值增加;按KEY2则减小;按RESET按钮则清零.
30
21嵌入式控制科技 www.21control.com
第三章SOPC的基本开发流程
第一节SOPC vs MCU,DSP和FPGA2
嵌入式系统发展朝着小体积,低功耗,高性能的趋势发展.MCU,DSP和
FPGA三种处理器在现代嵌入式系统中扮演的角色呈现三分天下的局面,它们各
自具有独特的优势而在某方面又略显不足.以51系列单片机和ARM微处理器
为代表的MCU家族因丰富的软件系统支持在控制和处理人机接口领域占据绝
对的领先地位;然而在海量数据处理方面却被DSP占尽了风头;FPGA在高速
复杂逻辑处理方面独占风骚,并且最近异军突起,凭借其超大规模的单芯片容
量和硬件电路的高速并行运算能力,在信号处理方面也显示出突出的优势. 因
而,MCU,DSP,FPGA的结合将是未来嵌入式系统发展的趋势.
SOPC = MCU + DSP + FPGA,SOPC可以将MCU,DSP和FPGA完美结
合! (1) SOPC MCU:目前,在大容量FPGA中可以嵌入16位或32位以
上的MCU.如Altera公司的FPGA可嵌入一个或多个软核CPU(Nios
或NiosII),或预嵌入ARM等微处理器;
(2) SOPC DSP:DSP对海量数据快速处理的优异性能主要在于它的
流水线计算技术,只有规律的加减乘除等运算才容易实现流水线的计
算方式.然而,这种运算方式也较容易用FPGA的硬件门电路来实现.
目前,实现各种DSP算法的IP核已经相当丰富和成熟,例如,FFT,
IIR,FIR,Codec等等.有实践证明,用FPGA实现的MPEG4压缩/
解压速度比通用DSP实现快10倍以上.利用相关工具(例如DSP
Builder)可以很方便地把现有的数字信号处理IP添加到工程中去.
(3) SOPC FPGA:SOPC一般采用大容量FPGA作为载体,除了在一
片FPGA中定制MCU处理器和DSP功能模块外,还可以设计其它
逻辑功能模块,实现MCU+DSP+FPGA在一片芯片上集成.如可采
用ALTERA公司的Cyclone,Stratix,StratixII等大容量FPGA实现
片上系统.
下图是一个典型的基于Altera公司大容量FPGA的SOPC结构图.其中
NiosII可以采用Altera公司的SOPC Builder来定制,DSP采用DSP Builder
来定制.
2 本节内容部分属作者个人观点,并不代表任何权威.
31
21嵌入式控制科技 www.21control.com
NiosII
(MCU)
FIRFFT
Codec
用户逻
辑模块1
用户逻
辑模块n
其它数
据处理
模块
DSP
SOPC
总线
相对于单片机,ARM等,SOPC的应用还不多见;然而,数年后(甚至更短),
也许SOPC的身影就像今天的单片机一样随处可见.因此,谁掌握了SOPC技术,
谁就能成为未来嵌入式系统设计的先锋.
Altera推出的Nios II系列嵌入式处理器扩展了目前世界上最流行的软核嵌
入式处理器的性能,把Nios II嵌入到Altera的所有FPGA中,例如StratixII,
Stratix,Cyclone等系列器件中,用户可以获得超过200 DMIPS的性能,用户可
以从三种处理器以及超过60个的IP核中选择所需要的,Nios II系统为用户提供
了最基本的多功能性,设计师可以以此来创建一个最适合他们需求的嵌入式系
统.
Nios II处理器的优点和特性:
使用Nios II处理器的用户可以根据他们的需要来调整嵌入式系统的特性,
性能以及成本,快速将产品推向市场,扩展产品的生命周期,并且避免由于处
理器的更新换代带来的损失.
提高系统性能:
具有一系列的处理器核可供选择,其中包括了超过200 DMIPS性能的核;
实现任何数量的处理器或将不同的处理器核组合在一起;
增加了已有的处理器,在FPGA中添加一个或更多的Nios II软核处理器;
更低的系统成本;
通过将处理器,外设,存储器和I/O接口集成到一个单一的FPGA中,从
而降低了系统成本,复杂性和功耗;
通过将NiosII处理器嵌入到低成本的Cyclone FPGA中只需花费35美分
或者更低(编者:对大多数用户而言,NiosII所占逻辑资源的成本大约是
10-20元人民币,具体取决于所选FPGA的类型和NiosII的配置).
应对产品的生命周期:
提供易用的设计工具从而快速将产品推向市场.
提供永久的,免费的许可从而使基于Nios II处理器的产品避免了处理器
32
21嵌入式控制科技 www.21control.com
的更新换代而带来的损失.
功能强大,易用的开发工具:
通过使用Nios II集成开发环境(IDE),从而加速了软件的开发;
利用Altera的强大的SOPC Builder系统开发工具和Quartus II设计软件可以
在几分钟内设计一个系统.
第二节 基于QuantusII和NiosII的SOPC基本开发流程
下图是一个简化的基于QuantusII和NiosII的SOPC开发流程.从图中可
见,SOPC开发流程比FPGA的开发流程增加了处理器及其外设接口的定制步骤以
及软件开发的步骤(阴影筐).然而,这些新增加的步骤在SOPC Buider(定制
处理器和外设接口),NiosII IDE(软件集成开发环境)工具的协助下显得相当
轻松.
建立工程
建立顶层图
编译软件
基于QuartusII和NIOS的SOPC设计流程
尽量采用ALTERA
提供的LPM功能
模块
用户自己建立
功能模块,并
建立Simbol
将顶层图的
各个功能模
块连起来
选择FPGA型号
,分配管脚,
配置编译选项
编译FPGA
下载到目标
器件
用SOPC Buider建
立NIOS处理器及
所需外设接口
用NIOS IDE开
发软件
直接编译FPGA工程
或
通
过
JTAG口
下
载
程
序
到
RAM空
间
33
21嵌入式控制科技 www.21control.com
第三节 基于QuantusII和NiosII的SOPC实例
在第二章中,我们学习了基于QuartusII的FPGA设计基本流程,在掌握了
基本的FPGA设计基础上,我们在本节中将学习基于QuartusII和NiosII的SOPC
设计流程.
实验一:核心板上的两个LED交替闪烁
目的:
(1) 掌握NiosII软核的定制流程;
(2) 掌握NiosII软件开发流程;
(3) 熟识NiosII IDE开发环境的使用;
(4) 掌握基本的软件调试方法;
(5) 学会使用Cyclone内部的PLL的使用方法.
原理:在本实验中,我们用软件来控制核心板上的两个LED交替闪烁.
2. 新建工程.新建一个工程目录"sopc_led",在此目录下建立一个名为
"sopc_led"的QuartusII工程,并新建一个顶层图,保存于工程中.
3. 用SOPC Builder定制NiosII处理器及其外设.打开Tools SOPC Builder,
要求指定系统名字,本例中我们输入niosii_c.按OK进入SOPC定制界面:
34
21嵌入式控制科技 www.21control.com
选择Target,本例选择Unspecified Board;
选择时钟频率,Clock(MHz):本例选50.0;
选择目标器件系列,Target Device Family:本例选Cyclone.
在SOPC定制界面的左边,我们可以看到有很多功能模块,这些功能模块
用户可以按照需要添加到所设计的系统中.
首先,我们需要一个CPU,双击NiosII Processor - Altera Corporation弹出
Altera NiosII对话框,我们选择一个经济型的CPU核,即NiosII/e,如下图所示:
点击JTAG Debug Module标签页,选择第一级调试支持Level1:
点击Finish完成NiosII CPU的配置工作.项目中会增加一个niosII 处理器,
名字为cpu_0,为了简便起见,没有将它改名.改名的方法是:右键 ReName,输
入名字后回车.如下图:
35
21嵌入式控制科技 www.21control.com
双击On-Chip Memory(RAM or ROM),(在Avalon Modules -> Memory ->
下),为系统添加RAM. Memory Type选择RAM;Data Width选择32bits,Total
Memory Size 可以选择4K bytes,如下图:
按Finish确认,返回SOPC Builder界面:
36
21嵌入式控制科技 www.21control.com
双击PIO(在Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出
到LED的输出接口.Width 选择2 bits,如下图:
然后点击 Finish,返回SOPC Builder界面:
37
21嵌入式控制科技 www.21control.com
然后,选择System ->Auto-Assign Base Addresses,让系统自动分配基地
址.如下图:
然后,选择Sysetm->Auto-Assign IRQs,让系统自动分配中断.如下图:
点击Nios II More "cpu_0" settings选项卡,进行处理器设定.在
该例中,无需做任何更改;Reset Address,Exceptiong Address,Break
Location默认值如下图所示:
38
21嵌入式控制科技 www.21control.com
点击System Generation选项卡,进行最后的设定并生成系统.
选中HDL.Generate system module logic in Verilog,
如果需要仿真,也请选中Simulation.Create ModelSim(tm) project files
然后点击Generate,执行系统生成的任务.如下图:
然后,耐心地等待系统的生成.一般没有问题的话,可以看到系统提
示:SUCCESS: SYSTEM GENERATION COMPLETED.如果看到此信息,恭喜恭
喜,系统被正确生成了.如果失败,请返回并检查,修改.系统成功生成
如下图所示:
39
21嵌入式控制科技 www.21control.com
点击Exit退出SOPC Builder.
4. 在QuartusII工程中添加上述niosII系统.
类似往QuartusII工程添加功能模块,将所定制的NiosII软核CPU添加到本
例工程中,即双击工程顶层图空白处,弹出Symbol对话框,在Project下面可以
找到刚才建立的niosii_c模块:
按OK将其niosii_c添加到顶层图中:
40
21嵌入式控制科技 www.21control.com
5. 添加PLL模块.从QuatusII的库中添加一个锁相环(PLL)模块,以将外部
时钟倍频后输送给CPU.打开Symbol对话框,在下图所示的目录下找到altpll
模块.
按OK进入altpll模块的设置对话框:
41
21嵌入式控制科技 www.21control.com
按Next,分别设置下列内容:
"Which Device family will you be using ":Cyclone;
"Which device speed grade will you be using":any;
"What is the frequency of the inclk0 input ":25.00MHz;(注意,该项内容最小
必须填16MHz以上,否则下图鼠标所指的地方会提示错误信息;如果板上的有
源时钟芯片的标称值小于该值,则在该栏填入大于16MHz的值,直到不会提示
错误信息.);
其它接受缺省设置,如下图所示:
42
21嵌入式控制科技 www.21control.com
按Next按钮,在进入的页面设置如下图:
按Next,进入c0输出设置界面:
选上"Use this clock"选项;
选择"Enter output clock parameters";
在"Clock multiplication factor"与"Clock division"中填入合适的倍频因子和分
频因子,倍频因子和分频因子的选择参照c0口所需要输出的频率而设置,例如
本例中我们定义CPU的时钟为50MHz,因此如果外部时钟的实际输入为
25MHz,则可以选择倍频因子为2,分频因子为1;如果实际输入时钟为10MHz,
则可以选择倍频因子为5,分频因子为1.注意:如果倍频因子和分频因子超出
altpll所能实现的范围,则会提示错误.
43
21嵌入式控制科技 www.21control.com
本例中我们没有用到c1和e0输出,因此不用对它们进行配置,直接按Finish
完成pll的配置.如果需要用到它们的话则必须对它们进行配置,过程类似于c0
输出的配置.
我们按Finish返回到QuartusII的顶层图界面,将建立好的PLL模块添加进
去,如图所示:
6. 添加其它元件模块.本例分别添加clk和reset输入,led[1..0]输出.并相互
连接.如下图所示:
44
21嵌入式控制科技 www.21control.com
7. 设置编译选项.建立并运行tcl脚本语言定义管脚.
○1对于EP1C3核心板,tcl管脚配置文件为(关于核心板引脚与实验板引脚对应
的详细情况请参照"CT-SOPCx学习套件用户手册"或相关电路原理图):
#Setup.tcl
# Setup pin setting for EP1C3 main board
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT
TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_16 -to clk
set_location_assignment PIN_54 -to reset
set_location_assignment PIN_6 -to led\[0\]
set_location_assignment PIN_7 -to led\[1\]
○2对于EP1C6核心板,tcl管脚配置文件为:
#Setup.tcl
# Setup pin setting for EP1C6 main board
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT
TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_28 -to clk
set_location_assignment PIN_159 -to reset
set_location_assignment PIN_1 -to led\[0\]
set_location_assignment PIN_2 -to led\[1\]
8. 编译该工程并通过Flash下载口下载到EPCS1芯片中.注意是下载到EPCS1
芯片,目的是在FPGA芯片中建立硬件系统,为后来的软件调试做好准备.
9. 设计该工程的软件.
接下来我们要设计该工程的软件.运行Nios IDE,在Nios II IDE中,选择
File -> New -> Project,开启New Project 对话框,选择 C/C++ Application,如下
图:
45
21嵌入式控制科技 www.21control.com
然后选择Next,进入下一步,在模板中选择Hello LED,如下图所示:
点击"SOPC Builder System"右边的"Browse"按钮打开目录对话框,从
该工程目录下找到"niosii_c.ptf",因为NiosII IDE必须从这个文件获取该系统
的相关信息.打开该文件后,界面显示如下图:
46
21嵌入式控制科技 www.21control.com
按Finish,即建立一个名为Hello_LED_0的模板,如下图所示:
打开项目中的文件:hello_led.c,根据需要进行修改,在本例中,我们模板
的程序改写为以下内容:
47
21嵌入式控制科技 www.21control.com
int alt_main (void)
{
e 0x2; alt_u8 ld =
volatile int i;
while (1)
{
for(i=0;i<300000;i++) ;
led = 0x1;
*(unsigned int *)PIO_0_BASE = led;
for(i=0;i Star Compilation,开始编译整个项目.
14. 下载.编译成功后,下载到EPCS1中,如下图:
15. 结果.下载完毕可以看到核心板上的两个LED灯交替闪烁.按实验板上
的RESET键复位程序.
(二) 实验二:LED,数码管,LCD和串口
通过实验(一)的学习,同学们已经可以基本掌握基于QuartusII和NiosII IDE
的SOPC开发流程.学习贵在实践,对于嵌入式系统设计更是如此,因此,如
果同学们想在这个领域有所作为,请多参加实践.利用我们提供的CT-SOPCx
系列FPGA/SOPC开发套件,同学们可以自行设计有趣的实验,也可以自己制作
实验板,插到我们提供的FPGA核心板上,实现更丰富有趣的功能.同时,我
们还提供了比实验一稍复杂的实验例子,同时控制核心板上的LED,实验板上
的数码管,按键开关,LCD和串口,实现的功能是:核心板上的两个LED等交
替闪烁,实验板上的KEY1按键按下,数码管显示值减1,KEY2按下,显示值
加1;同时LCD显示两行字符,串口不断往PC机发生一行字符.限于篇幅,我
们在此没有写出该实验的详细过程.下面列出该实验所定制的NiosII的处理器
以及外设的一些配置.在以上实验的基础上,我们相信同学们参照我们随光碟
给出的例子代码,很快就可以理解该例子的设计方法.
说明:该例子程序可以在学习套件附带光碟的"学习套件例子"找到.对
应于EP1C6型号和EP1C3型号的核心板,该例子的所有文件分别保存在
"EP1C6_Examples"或"EP1C3_Examples"的"all_test"子目录中.
该例子分别定制了:
1. 32位的NiosII处理器"CPU0":简约型处理器"NiosII/e",一级调试支持
"Level1";
2. 片上存储器"onchip_memory_0":32位宽,4Kbyte;
3. 串口"uart_0":波特率设为9600,无校验位,8位数据位,1位停止位;
4. 控制LED灯的IO"pio_led":2位,"Output ports only";
5. 定时器"Timer0";
6. 作为按键输入的IO"pio_key":2bits,"Input ports only";
7. LCD液晶的数据线"pio_led_data":8bits,"Bidirection (tri-state) ports";
8. LCD液晶的控制线"pio_led_ctl":3bits,"Output ports only";
9. 控制7段数码管的IO"pio_seg7led":8bits,"Output ports only".
其中,LCD液晶的接口我们没有采用SOPC Builder已有的Character LCD
(16X2 Optrex 15207)接口,因为市面上很难买得到这个型号的LCD,而
1602A型号的LCD比较常用,所以我们自己定义了它的接口,即定义8位的
53
21嵌入式控制科技 www.21control.com
三态IO作为LCD的数据总线,而另外定义3个输出IO作为LCD的三个控
制信号输出(lcd_e, lcd_rs, lcd_rw),在实际项目设计中,大家也可以自己定
义其它方式,或者修改Altera提供的Character LCD(16X2 Optrex 15207)的
驱动,实现1602A 型号LCD的驱动.
下图为本例子所定制的Nios系统的配置情况:
说明:该例子程序的串口程序的调试可利用随光碟的串口调试工具来调试,
对于实验板V1.0,该学习套件出厂的时候已经将该例子程序灌在EPCS1中,因
此连上串口线,打开串口调试工具并正确设置COM信息(波特率设为9600,无
校验位,8位数据位,1位停止位),即可收到学习套件不断发送过来的字符串.
(三) 实验三——关于实验板V2.0版本增加的USB功能的例子
实验板V2.0在V1.0版本的基础上,新增加了USB至UART桥接器
CP2102,串行E2PROM AT24C32(焊接位,EP1C3核心板对应的实验板不
含该功能),4 Pins IO引出插座,用户可配置为三线制SPI通信口或作普通IO
用(EP1C3核心板对应的实验板不含该功能).
其中串行E2PROM常用于控制系统中保存系统的状态参数以及用户设定
参数等数据;4 Pins IO引出插座,用户可配置为三线制SPI通信口或作普通IO
用.
USB至UART桥接器的设计添加,更突显了SOPC系统的精简实用精神.
我们认为,用Cyclone组建的片上系统,更适用于需要大量的逻辑电路,程
序代码不很复杂的的系统中(特别是控制系统,仪器仪表).这类系统通常
需要与上位机进行通讯,例如RS232串口,RS485,USB等.虽然RS232
之类的通讯在工控,仪器仪表系统中还占据主导地位,但由于当今USB接口
的流行,很多设备也慢慢趋向于有必要增添USB接口的功能.因此,实验板
V2.0增添了USB接口的功能.
实验板V2.0采用USB至UART桥接器设计,一方面使得USB接口设
54
21嵌入式控制科技 www.21control.com
计比较简单,开发者无需懂得USB协议和设计驱动程序,只需类似串口一样
对通讯进行操作即可,因而使得开发周期短,风险小,成本低;另一方面,
体积小,工作稳定可靠,正常工作温度范围为:-40~+85℃,特别适合工业
控制或仪器仪表使用.该芯片的通讯速度可达1Mbits/s,兼容USB1.1和
USB2.0,满足绝大多数工业控制或仪器仪表的数据传输需求.
随学习套件的光碟中,附带了该芯片的数据手册,驱动程序,以及例子
程序("\EP1C6_Examples\all_test_USB").
1. 安装USB驱动
驱动的安装方法请参照《CT-SOPCx系列FPGA/SOPC学习套件用户手册》.
2. 添加功能模块
在SOPC系统中添加一个UART功能模块,例如我们在本节的实验二的例子
的基础上添加一个"uart_usb"的UART功能模块,波特率设为115200,无校验
位,8位数据位,1位停止位;如下图:
3. 编译调试
分配好相应的管脚,以及设置好编译等信息.编译,并下载到EPCS1中去,
即可开始调试Nios的软件.
参照以上教程在NiosII IDE中建立该实验的软件工程.
将光盘上"SSCOM32.EXE"和"sscom.ini"拷贝到硬盘某个目录,去掉只
读属性.双击"SSCOM32.EXE"打开串口调试工具即可对该USB进行调试.
55
21嵌入式控制科技 www.21control.com
注:由于CP2102是一个USB到UART的桥接器,因此安装驱动后,实际
是在操作系统内会增加一个虚拟的COM口,该USB口的通讯就是通过这个虚
拟的COM口进行,所以无论是在实际应用中还是调试过程中,都是对该虚拟
COM口操作即可,非常简单易用.通讯参数设置为:波特率为115200,无校验
位,8位数据位,1位停止位.
说明:该例子程序可以在学习套件附带光碟的"学习套件例子"找到.对
应于EP1C6型号和EP1C3型号的核心板,该例子的所有文件分别保存在
"EP1C6_Examples"或"EP1C3_Examples"的"all_test_USB"子目录中.
4. 结论
在嵌入式系统中,常常少不了与上位机的通讯,其中串口,USB等是使用
最广泛的通讯方式,当数据吞吐量需求不是很高的情况下,可以采用本实验的
设计方案,简单,可靠,开发时间和风险都大大降低.
实验四——EP1C6核心板V2.0的Flash烧写例子
EP1C6核心板V2.0增加了8Mbyte SDRAM和2Mbyte Flash,可容纳更多
的用户程序和数据.如果用户程序和数据比较大,超出了EPCS1的容量,则程
序和数据可以保存在普通Flash中;如果用户程序较大,超出了EP1C6所能定
制的最大内部RAM容量,则也可以将程序放在SDRAM中运行.Flash的烧写
可以采用NiosII IDE 的"Flash Programmer"来烧写,具体操作过程请参考
56
21嵌入式控制科技 www.21control.com
/altera/kits/nios2/documents目录下的"ug_nios2_flash_programmer.pdf"或我们编
写的《Nios IDE下Flash烧写教程》(该教程包含在印刷版的用户手册中).
"\EP1C6_Examples\"目录下的"burn_flash_ep1c6"和"ucosII_test"例子
都是运行于SDRAM中的例子,同学们可以参照例子来实现更多有趣的实验.
实验五 关于uc/OS-II实时操作系统在Nios II中的运行
uc/OS-II已经在世界范围内得到广泛的使用,包括手机,路由器,集线器,
不间断电源,飞行器,医疗设备及工业控制等.实际上,uc/OS-II已经通过了非
常严格的测试,并且得到了美国航空航天管理局(FAA)的安全认证,可以用于
飞机,航天器等与人性命攸关的控制系统中3.因此,uc/OS-II在工业等实时性需
求比较强的领域应用非常广泛,我们的学习套间提供了在NiosII系统中运行
uc/OS-II的例子("\EP1C6_Examples\ucosII_test"目录下),该例子定义了两个任
务:Task1和Task2,两个任务交替执行.例子虽然简单,但可以作为uc/OS-II在
NiosII系统中运行的演示.同学们可以参考NiosII的软件开发手册以及uc/OS-II的
发明人——Jean J. Labrosse的著作"MicroC/OS-II The Real-Time Kernel"(Second
Edition)的中译本《嵌入式实时操作系统uc/OS-II》(第二版,邵贝贝等译),研究
和设计出功能更强,更符合实际应用的程序.
3 《嵌入式实时操作系统uc/OS-II》(第二版)
57
21嵌入式控制科技 www.21control.com
附录 CT-SOPCx系列FPGA/SOPC学习套件简介
关于CT-SOPCx学习套件
CT-SOPCx学习套件,针对Altera的低成本高性能Cyclone系列FPGA,
助学习者快速掌握FPGA/SOPC设计技术.
(1) 学习FPGA的设计技术;
(2) 了解NiosII可编程片上系统的设计流程,学习在FPGA上包括定制32
位的处理器,DSP处理模块,逻辑功能模块等组成的系统;学习利用
ALTERA公司提供的软件集成开发环境(NIOS IDE)设计,调试片上系
统的软件;
(3) FPGA核心板可用于系统设计前期快速评估设计方案.
CT-SOPCx学习套件有以下主要特点:
(一) 设计独特,既适合学生学习使用,也适合于实际项目设计中快速搭建系
统原型以验证设计方案.核心板(EP1C6型V2.0)实际上是一块独立的SOPC
最小系统板,SDRAM和Flash都集成在核心板上,用户甚至可以用面包板制
作特定项目所需的外围电路,并插上该核心板就构成了一个完整的项目系统
原型.另外,如果项目试验中只需用到FPGA功能(即无需定制Nios系统),
则可以将SDRAM和Flash卸下,核心板就成了一个将所有FPGA的IO管脚引
出的FPGA核心板,同样可用于快速搭建项目系统原型.
(二) 模块化结构,简单明了,有详尽文档,教程(快速入门的教程,新版本
为印刷版),真正适合初学者.经验表明,很多学生在学习FPGA,ARM,DSP
等设计技术的过程中,虽然刚开始学习热情很高,但真正能坚持下来一直到
"学会"的却只有寥寥几个.除了学生个人的毅力因素的原因外,另外一个
更主要的原因是由于所选用的学习板不适合初学者学习使用.对于初学者来
说,理解和消化开发板并不容易(事实上如果能达到这种程度的话,也就没
必要借助学习板了),再加上这些开发板在文档资料,教程上都非常欠缺,有
些几乎连说明文档都没有,这就给学生们的学习增添了更多的困难,很多学
生会因为找不到入门的口子而慢慢失去兴趣和信心.我们从初学者的角度出
发,针对学习套件编写详尽的教程,从最简单的例子出发,希望学生从简单
到深入地理解开发的过程,并能快速地跨入这个门槛,建立起学习的信息和
兴趣.
(三) 具有可持续学习性.传统的学习板将FPGA与实验电路集成一体,虽然预
留了一些FPGA的I/O给学生扩展用,但预留的I/O有限,当学生学习到一定
程度并初步具备自主设计能力的时候,这样的学习板显然已经不能满足进一
步学习的要求.我们采用FPGA核心板与实验板相分离的结构,核心板主要由
FPGA芯片和电源,配置芯片和时钟源组成,即FPGA的最小系统组成,FPGA
的所有I/O都以核心板的插针引出.当学生初步具备自主设计能力的时候,
58
21嵌入式控制科技 www.21control.com
可以自主设计实现更复杂功能的实验板,并将核心板插接到自主设计的实验
板的插座上,即可利用FPGA的所有I/O.
(四)价格低,真正面向广大学习者,特别是在校学生.
CT-SOPCx学习套件实物照片
配套教程 配套用户手册
59
21嵌入式控制科技 www.21control.com
CT-SOPCx系列FPGA/SOPC学习套件包括(实物照片如上图所示):
(1) FPGA核心板,使用高性价比Cyclone系列FPGA,EP1C3相当于5万门左右,
EP1C6相当于12万门左右;——EP1C6核心板现已升级到2.0版本,增加
8Mbyte SDRAM和2Mbyte Flash.
(2) 实验板V1.0——现已升级至实验板V2.0版本,新增加USB,串行E2PROM等
功能;
(3) ByteBlasterII下载线,使用于ALTERA公司全系列CPLD/FPGA芯片和
NiosII软件调试;
(4) USB线;
(5) 5V电源;
(6) 用户手册以及FPGA/SOPC快速教程;
(7) 相关软件资料等;
(8) 详尽电路原理图;
(9) 1602A型号LCD,(选配).
如需了解更多关于该学习套件,请登陆www.21control.com ,或联系:
电话:020-35511160,13760811768
QQ:26128396
Email:rouder@163.com
www.21control.com
注:目前我们已发现某公司盗版我们的CT-SOPCx学习套件,该公司对该产品及相应资料只是
直接抄袭和拷贝,因此无论是功能的升级还是资料的更新,都远跟不上我们的步伐.希望大
家购买时认准"CT-SOPCx",并通过我们或我们的代理商(可咨询我们来确认代理商)购买.
同时,对于每套新版本的CT-SOPCx学习套件,我们都编制了唯一的序列号,所有的售后服务
以及技术支持都以该序列号为凭证.
60
21嵌入式控制科技 www.21control.com
CT-SOPCx系列FPGA/SOPC学习套件的例子
1. FPGA例子
(1) FPGA_led_test ——最简单的FPGA例子,一个按钮控制一个LED灯
的亮或灭,带领同学们跨入FPGA设计的门槛;
(2) seg7led_test ——进一步熟悉QuartusII软件,了解用硬件描述语言设计
用户功能模块的流程;
2. SOPC(Nios II)例子
(1) sopc_led ——最简单的NiosII系统,运行于FPGA内部的软件控制两
个LED灯交替闪烁,让同学们初尝让人激动的SOPC设计;
(2) all_test ——学习套件V1.0的所有模块的测试程序,测试内容包括:
LED,串口,数码管,按键开关,LCD;
(3) all_test_USB ——学习套件V2.0所有模块的测试程序,测试内容包
括:LED,USB口,数码管,按键开关,LCD;
(4) burn_flash_ep1c6 ——用NiosII IDE的Flash Programmer烧写EP1C6
核心板V2.0上的Flash例子(EP1C3型核心板不支持该例子);
(5) my_board ——用NiosII IDE的Flash Programmer烧写EP1C6核心板
V2.0上的Flash时制作"Target Board"的例子(EP1C3型核心板不
支持该例子);
(6) ucosII_test ——在NiosII 系统中运行uc/OS-II的例子(EP1C3型
核心板不支持该例子).
我们将不断改善和升级我们的设计,努力为广大嵌入式系统学习者和工业
控制系统设计者提供更完美的方案,请关注,支持我们,QQ或E-mail给我们提
出您的宝贵建议,谢谢!
此外,由于我们的水平有限,本教程存在的错漏之处在所难免,请各位朋
友批评指出,并希望能与我联系以便更正,谢谢.
我的E-mail:rouder@163.com ,QQ:26128396
61
·上一篇:构建环境安装Oracle
·下一篇:数据库系统工程师(Oracle)
