Altera FPGA/CPLD 学习笔记
Xilinx,Altera,Lattice是可编程器件的主要三个生产厂家。最近领导安排叫我学习Altera的FPGA,以前主要接触的Xilinx的东西多一些。所以一上手感觉生疏,特别是QuartusII软件。
Quartus II是Altera公司新一代的FPGA/CPLD开发环境。前一代Max+plusII开发环境Altera公司已经不再提供新的版本。所以今后学习还是应用尽可能使用Quartus II。以前Max+plusII的工程文件也可以导入QuartusII中。熟悉MaxplusII的也可以将QuartusII的界面转换成MaxplusII。
一. 基础知识
1. FPGA/CPLD的区别与联系
项目 |
FPGA |
CPLD |
备注 |
结构工艺 |
多为LUT加寄存器结构,实现工艺多为SRAM,也包含Flash,Anti-Fuse等工艺 |
多为乘积项,工艺多为E2CMOS,也包含EEPROM,Flash,Anti-Fuse等不同工艺 |
|
触发器数量 |
多 |
少 |
FPGA更适合实现时序逻辑,CPLD多用于组合逻辑 |
Pin to pin延时 |
不可预测 |
固定 |
对FPGA而言,时序约束和仿真非常重要 |
规模与逻辑复杂度 |
规模大,逻辑复杂度高,新型器件高达千万门级 |
规模小,逻辑复杂度低 |
|
成本与价格 |
成本高,价格高 |
成本低,价格低 |
|
编程与配置 |
一般包含2种,外挂BootRom和通过MCU或DSP等在线编程。多数基本属于RAM型。掉电后程序丢失 |
有两种编程方式,一种是通过编程器烧写ROM,另一种较方便的方式是通过ISP模式。一般为ROM型,掉电后程序不丢失。 |
FPGA掉电后一般将丢失原有逻辑配置,而反熔丝工艺的FPGA,如Actel的某些器件族和目前内嵌Flash或EECMOS的FPGA,如Lattice的XP器件族,可以实现非易失配置方式 |
保密性 |
一般保密性较差 |
好 |
一般的fpga不容易实现加密,但是目前的一些采用flash加sram工艺的新型器件(如littice的xp系列等)在内部嵌入了加载flash,能提供更高的保密性 |
互联结构,连线资源 |
分布式,丰富的布线资源 |
集总式,相对布线资源有限 |
Fpga布线灵活,但是时序更难规划,一般需要通过时序约束,静态时序分析,时序仿真等手段提高并验证时序性能 |
适用的设计类型 |
复杂的时序功能 |
简单的逻辑功能 |
|
表1-1
2. 逻辑电路概念
① 组合逻辑
电路的输出信号只与该时刻的输入信号有关,而与电路原来所处的状态无关。
② 时序逻辑
任何一个时刻的输出状态不仅取决于当时的输入信号,还与电路的原状态有关。
时序电路的特点是具有记忆元件(最常见的是触发器),具有反馈通道。包括各类触发器、寄存器、各类计数器和顺序脉冲发生器,各类存储器。
二. Quartus II安装破解
这里以Quartus II 5.1为例。Quartus II对PC机硬件要求较高,尽可能采用高配置的PC机。安装一路next就可以了。主要是破解,一般的配套光盘都有license文件,但需要自己修改HOSTID,也就是你的网卡的物理地址,介绍一下流程。
1.安装完毕Quartus II后,将sys_cpy.dll文件复制copy到C:/altera/quartus50/bin,将原来的文件覆盖。
2.在C盘新建文件夹flexlm,将光盘中的license.dat 拷贝到c:/flexlm中。同时将只读属性去掉。
3.打开“开始”->运行 输入cmd 进入dos模式。然后输入ipconfig /all 然后记下physical address,也就是hostid。
4.将c:/flexlm/license.dat打开 将HOSTID=后面的id改为你的physical address(去掉中间的-号)保存即可。
5.打开Quartus II,选择最下面的选项,进入注册界面,选择c:/flexlm/license.dat就可以。
三. maxplusII工程转换
打开file->Convert Max+plus II Project 命令将MaxplusII配置文件(.acf)转换为QuartusII工程,并自动为新转化的工程建立配置文件和相关的一些设置。
四. QuartusII文件后缀名及一些时序参数
1.Quartus II有很多文件,涉及到很多后缀名。这个表格只列举部分,以及文件代表的含义。见表3-1
文件后缀名 |
描述 |
*.vhd |
vhdl语言文件 |
*.v |
verilog hdl语言文件 |
*.pof |
编程对象文件 |
*.sof |
SRAM对象文件 |
*.vwf |
波形仿真文件 |
*.bdf |
原理图文件 |
表3-1
2.FPGA/CPLD设计涉及几个时序参数。可以在Quartus的时序分析器(timer analyzer)功能里看到这些参数,时序分析器可以帮助用户分析设计中所有的逻辑性能,并协助引导fitter满足设计中的时序分析要求。参数见表3-2
时序设置参数 |
描述 |
Fmax(最大时钟频率) |
在不违反内部建立时间(tsu)时间(th)要求下可以达到的最大时钟频率 |
Tsu(时钟建立时间) |
在触发寄存器计时的时钟信号已经在时钟引脚建立之前,通过数据输入或使能输入进入寄存器的数据必须在输入引脚处出现的时间长度 |
Th(时钟保持时间) |
在触发寄存器计时的时钟信号已经在时钟引脚建立之后,通过数据输入或使能输入进入寄存器的数据必须在输入引脚处出现的时间长度 |
Tco(时钟到输出延时) |
时钟信号在触发寄存器的输入引脚上发生转换后,再由寄存器馈送信号的输出引脚上获得有效输出所需的时间 |
Tpd(引脚到引脚延时) |
输入引脚处的信号经过组合逻辑进行传输,出现在外部输出引脚上时所需的时间 |
最小tco |
|
最小tpd |
|
表3-2
五. 硬件描述语言的学习与比较
项目 |
VHDL |
Verilog HDL |
|
|
VHDL |
Verilog |
|||
开发者 |
美国军方 |
|
|
|
标准 |
Ieee 1076(1987,1993) |
Ieee 1364(1995) |
|
|
语言基础 |
Pascal,ada |
C语言 |
|
|
功能 |
门级需要VITAL模型,更适合抽象建模 |
抽象硬件建模可能需要使用PLI,有内建的门级建模 |
= |
= |
编译 |
每个文件只能有一个实体(entity) |
编译依赖代码的顺序 |
+ |
|
数据类型 |
许多自带和用户定义的数据类型,严格类型检查(导致硬件建模比较麻烦),易于查出错误 |
数据类型简单,便于硬件建模;弱类型检查;用户无法定义数据类型 |
|
+ |
设计重用 |
用Package来共享函数、过程、类型和组件 |
函数和过程必须在同一module,可使用include |
|
|
易学性 |
不易学,同一电路有多种建模方式 |
很容易掌握,编译器的directive和PLI会增加复杂性 |
|
+ |
返标 |
在很多商用工具中都可以使用SDF |
本身就支持SDF |
= |
= |
与其他语言的接口 |
使用属性foreign |
在Verilog hdl和Verilog hdl软件工具之间使用PLI |
|
|
库 |
存储编译过的entity、architecture、package和configuration |
没有库的概念 |
|
|
底层结构 |
没有门级原型(primitive);用vital语言来定义原型 |
门级原型、采用udp和specify对原型道建模 |
|
+ |
大型设计能力 |
Package,configuration,generate,generic |
无 |
+ |
|
操作符 |
没有缩减运算符 |
有缩减运算符 |
|
+ |
参数化模型 |
宽度,延迟等 |
宽度,延迟等 |
= |
= |
过程与任务 |
允许并发过程调用 |
无 |
+ |
|
可读性 |
繁琐。更像句子 |
简练,熟悉C的人喜欢 |
|
+ |
结构重复 |
使用generate |
无 |
+ |
|
测试平台 |
类属(generic)很有用,configuration语句很有用 |
文件访问类似硬件操作 |
+ |
|
表6-1
选择VHDL还是Verilog HDL?这是一个初学者最常见的问题。其实两种语言的差别并不大,它们的描述能力也类似。掌握其中一种语言以后,可以通过短期的学习,较快的学会另外一种语言。选择何种语言主要还是看周围的人群的使用习惯,这样便于日后的学习和交流。当然,如果是集成电路(ASIC)设计人员,则必须首先掌握Verilog HDL,因为在IC设计领域,90%以上的公司都是采用Verilog HDL进行IC设计的。对于FPGA/CPLD设计者而言,两种语言可以自由选择。
学习HDL语言的时候有以下几点提示
1. 了解HDL的可综合性问题。HDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的程序是用于硬件实现,那么我们就必须保证程序的可综合(程序的功能可以用硬件电路实现)。我们应该牢记一点:所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现。
2. 用硬件电路设计的思想来编写HDL。学好HDL的关键是充分理解HDL语句和硬件电路的关系。编写HDL,就是在描述一个电路,不能用纯软件的设计思路来编写硬件描述语言。
3. 语法掌握贵在精,不在多。30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,程序移植或者更换平台的时,容易产生兼容性问题,也不利于他人阅读和修改。
4. HDL语言与原理图输入法的关系。HDL和传统原理图输入法的关系就好比高级语言与汇编语言的关系。HDL语言可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好、效率高、比较直观,但设计大规模CPLD/FPGA时显得繁琐,移植性差,在真正CPLD/FPGA设计中,通常建议采用原理图和HDL相结合的方法来设计。
六. 程序下载与配置
1. Quartus II支持ByteBlaster MV,ByteBlaster II 两种常见的并口JTAG电缆。也支持USB接口的USB Blaster。ByteBlaser II和USB Blaster可以对串行配置器件编程。这几种下载线在Win2000下都需要安装驱动。驱动程序在Quartus安装目录下的drivers下。
2. FPGA的配置和编程方式
配置,又称加载或下载,是对FPGA的内容进行编程的一个过程。每次上电后需要进行配置是基于SRAM工艺FPGA的一个特点,也可以说是一个缺点。
① FPGA 主动(Active)方式
在FPGA主动方式下,有目标FPGA来主动输出控制和同步信号(包括配置时钟)给Altera专用的配置芯片(EPCS1和EPCS4等)在配置芯片收到命令后,就把配置数据发给FPGA,完成配置过程。
Altera的FPGA所支持的主动方式,只能够与Altera公司提供的主动串行配置芯片(EPCS系列)配合使用,因此Altera公司将这种方式称为主动串行AS(Active Serial)模式。AS模式只有在Stratix II系列和Cyclone系列的器件中支持。
② FPGA 被动(Passive)方式
在被动模式下,由系统中的其他设备发起并控制配置过程,这些设备可以是Altera的配置芯片(EPC系列),或者是单板上的微处理器、CPLD等设备。FPGA在配置过程中完全处于被动地位,只是输出一些状态信号来配合配置过程。
被动模式具体细分下来,有许多种模式,包括被动串行PS(Passive Serial),快速被动并行FPP(Fast Passive Parallel) 、被动并行同步PPS(Passive Parallel Synchronous)、被动并行异步PPA(Passive Parallel Asynchronous)、已经被动串行异步PSA(Passive Serial Asynchronous)。
PS(被动串行):所有的Altera的FPGA都支持这种配置方式。可以由Altera的下载电缆、Altera的增强型配置器件(EPC4,EPC8和EPC16)和配置器件(EPC1441,EPC1,EPC2)或者智能主机来配置。在做PS配置时,FPGA配置数据从存储器中读出,写入到FPGA的DATAa0接口上。这些存储器可以是Altera配置器件或者单板机上的其他flash器件。
被动方式的其他几种模式的介绍参考《Altera FPGA/CPLD设计 基础篇》的第6章。
③ JTAG方式
Altera FPGA基本都可以支持由JTAG命令来配置FPGA的方式,而且FPGA配置方式比其他任何一种配置方式的优先级都高。JTAG配置方式支持菊花链方式,级联多片FPGA。
3. 配置芯片
Altera FPGA的配置芯片可以分为3种
① 增强型配置器件:EPC16、EPC8、EPC4;
可以支持对大容量FPGA的单片配置,可以由JTAG接口进行在系统编程(ISP),而且支持FPP快速配置方式。
② AS串行配置器件:EPCS64、EPCS16、EPCS4和EPCS1
专门为Stratix II、Cyclone II和Cyclone器件设计的单片、低成本的配置芯片。AS芯片可以由下载电缆或其他设备进行重复编程。
③ 普通配置器件:EPC2、EPC1和EPC1441。
容量相对较小,其中只有EPC2可以重复编程。要支持大容量FPGA的配置,可以将多片级联起来。
七. 参考书籍及开发试验工具
1. 《基于Quartus II的FPGA/CPLD设计》
2. 《Altera FPGA/CPLD设计(基础篇)》
3. 《FPGA/CPLD最新实用技术指南》
4. Altera公司MaxII,Cyclone系列数据手册
5. 某公司试验箱
八. 归纳总结
Altera的Quartus II开发环境感觉比XILINX的ISE开发环境要复杂一些,功能方面要多一下。学习起来不是很轻松。要全面掌握其功能需要花费不少时间,也需要在实战中不断摸索学习。
注意:本贴为转发贴如有意见我将删除或修改!