第1页:第13章可编程逻辑器件FPGA原理
硬件描述语言和数字系统设计
第2页:第13章主要内容
- 主要内容
- 13.1可编程逻辑器件FPGA原理13.2基于可编程逻辑器件FPGA设计
第3页:可编程逻辑器件FPGA原理
- 13.1.1
- FPGA概述
- 13.1.2
- FPGA组成
- 13.1.3
- FPGA特点
- 13.1.4
- 电路结构
- 13.1.5
- 基于乘积项的PLD结构
- 13.1.6
- 乘积项结构PLD的逻辑实现原理
- 13.1.7
- 查找表的原理与结构
- 13.1.8
- 基于查找表(LUT)的FPGA的结构
- 13.1.9
- 查找表结构的FPGA逻辑实现原理
第4页:FPGA概述
概述
- FPGA(Field Programable Gate Array):现场可编程门阵列
- CPLD(Complex Programable Logic Device):复杂可编程逻辑器件
- FPGA/CPLD是在PAL、GAL等逻辑器件的基础之上发展起来的,规模比较大
- Altera和Xilinx公司占有全球PLD/FPGA产品60%以上的份额
第5页:FPGA组成
组成
- FPGA,CPLD和其它类型PLD的结构概括起来都由三大部分构成:
- 一个二维的逻辑块阵列,构成了PLD器件的逻辑组成核心
- 输入/输出块
- 连接逻辑块的互连资源
第6页:蓝色:逻辑单元 红色:连线资源 黄色
- 蓝色:逻辑单元
- 红色:连线资源
- 黄色:输入输出块图1 典型的PLD框图
第7页:FPGA特点
特点
- FPGA/CPLD芯片都是特殊的ASIC芯片,具有一般ASIC的特点
- FPGA/CPLD芯片规模已达上百万门,所能实现的功能也越来越强,同时支持系统集成
- FPGA/CPLD芯片在出厂之前都做过测试,不需要设计人员承担投片的风险和费用,所以资金投入小,节省了许多潜在的花费
- 用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。用FPGA/PLD试制样片,能以最快的速度占领市场
第8页:电路结构
电路结构
- 乘积项(Product-Term)结构(PLD多采用该结构)
- Altera的MAX7000,MAX3000系列(EEPROM工艺),Xilinx的XC9500系列(Flash工艺)和Lattice,Cypress的大部分产品(EEPROM工艺)
- 查找表(Look-Up-Table)结构(FPGA多采用该结构)
- altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等
第9页:基于乘积项的PLD结构
基于乘积项(Product-Term)的PLD结构
图2 基于乘积项的PLD内部结构
- 这种PLD可分为三块结构:宏单元(Marocell)、可编程连线(PIA)和I/O控制块。
第10页:宏单元是PLD的基本结构
- 由它来实现基本的逻辑功能。
- 图1 中蓝色部分是多个宏单元的集合。可编程连线负责信号传递,连接所有的宏单元。I/O控制块负责输入输出的电气特性控制。
- 图2 左上的INPUT/GCLK1,INPUT /GCLRn,INPUT/OE1, INPUT/OE2是全局时钟、清零和输出使能信号,这几个信号有专用连线与PLD中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。
- 宏单元的具体结构见图3 所示。
第11页:PLD宏单元结构
图3 PLD宏单元结构
第12页:乘积项结构PLD的逻辑实现原理
图4 CMOS工艺实现电路
第13页:PLD的逻辑实现方法
图5 PLD的逻辑实现方法
第14页:PLD将以下面的方式来实现组合逻辑f
- A,B,C,D由PLD芯片的管脚输入后进入可编程连线阵列(PIA),在内部会产生A,A反,B,B反,C,C反,D,D反8个输出。图5 中每一个叉表示相连(可编程熔丝导通)
- 对于一个复杂的电路,就需要通过并联扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编程连线阵列,再做为另一个宏单元的输入。这样PLD就可以实现更复杂逻辑。
- 基于乘积项的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无需其他芯片配合。
第15页:查找表的原理与
查找表(Look-Up-Table)的原理与结构
- 采用这种结构的PLD芯片我们也可以称之为FPGA
- 查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM
- 目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM
- 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM
- 每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可
第16页:4输入与门的实际电路和LUT实现形式比较
输入与门的实际电路和LUT实现形式比较LUT的实现方式实际逻辑电路RAM中存储的内容地址逻辑输出a,b,c,d输入000000000000001000010...0....1111111111
第17页:基于查找表
(LUT)的FPGA的结构
- Xilinx公司的Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。Slices可以看成是SpartanII实现逻辑的最基本结构。
第18页:xilinx Spartan-II芯片内
图6 xilinx Spartan-II芯片内部结构
图7 Slices结构
第19页:Altera FLEX/ACEX芯片结构
- Altera公司的FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE,如图9 所示),每个LE包括一个LUT,一个触发器和相关的相关逻辑。LE是FLEX/ACEX芯片实现逻辑的最基本结构。
第20页:altera FLEX/ACEX芯片的内
图8 altera FLEX/ACEX芯片的内部结构
第21页:逻辑单元
图9 逻辑单元(LE)内部结构
第22页:查找表结构的FPGA逻辑实现原理
查找表结构的FPGA逻辑实现原理
- 以图4 电路为例。A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。
- 该电路中D触发器是直接利用LUT后面D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片管脚。这样PLD就完成了图4 所示电路的功能。(以上这些步骤都是由软件自动完成的,不需要人为干预)
第23页:这个电路是一个很简单
- 的例子,只需要一个LUT加上一个触发器就可以完成。对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。
- 由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。
第24页:基于可编程逻辑器件FPGA设计
可编程逻辑器件FPGA设计知识点:13.2.1 PLD与FPGA的选择13.2.2 FPGA设计流程(以4位加法器为例)13.2.3 FPGA管脚约束文件
第25页:PLD与FPGA的选择
选择PLD还是FPGA?
- PLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,PLD适合用于设计译码等复杂组合逻辑。但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,PLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于PLD。所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好的选择。
第26页:FPGA软件平台:Xilinx公司
FPGA软件平台:
- Xilinx公司的ISE 6.2 Altera公司的QartusII
- 是一个以FPGA实现为目的的全流程平台,集成了仿真工具Modelsim、综合工具XST或synplify以及版图工具
- 可实现从源码编写、仿真、综合、版图布局直到最后生成可下载到FPGA器件去的*.bit位流文件
- 以4位加法器为例演示整个操作过程
第27页:基于可编程逻辑器件FPGA设计(续1)
以4位加法器为例module adder( A, B, SUM);input [3:0] A;//四位加法器的加数输入线input [3:0] B;//四位加法器的被加数输入线output [4:0] SUM;//包括进位的四位加法器输出//利用Verilog HDL加法运算子设计出的加法器assign SUM = A + B;endmodule
第28页:FPGA管脚约束文件
位加法器的FPGA管脚约束文件#PACE: Start of Constraints generated by PACE#PACE: Start of PACE I/O Pin AssignmentsNET"A<0>"LOC = "p163" ;NET"A<1>"LOC = "p161" ;NET"A<2>"LOC = "p109" ;NET"A<3>"LOC = "p111" ;NET"B<0>"LOC = "p113" ;NET"B<1>"LOC = "p115" ;NET"B<2>"LOC = "p120" ;NET"B<3>"LOC = "p122" ;NET"SUM<0>"LOC = "p33" ;NET"SUM<1>"LOC = "p30" ;NET"SUM<2>"LOC = "p27" ;NET"SUM<3>"LOC = "p23" ;NET"SUM<4>"LOC = "p21" ;#PACE: Start of PACE Area Constraints#PACE: Start of PACE Prohibit Constraints#PACE: End of Constraints generated by PACE
第29页:按照使用说明运行ISE的Project
Navigator软件新建project并向工程中加入源码adder.v文件和管脚约束文件adder.ucf文件后
- FPGA器件选择device family: spartan2device: xc2s200package: pq208在左上角的module view窗口中选中源码顶层文件adder.v在左下角的process view窗口可进行全流程操作,重要步骤如下:
第30页:查看综合报告
.选择综合synthesize可查看view synthesis report,可看代码对应的电路规模、所占资源等信息2.双击Implement Design可完成综合的translate、map、place&Route等步骤操作3.点开步骤2的子栏place&Route,可进行静态时序分析Post-Place&Route Static Timing Report,看看是否有建立时间违背;可进行FPGA布局布线后仿真网表和延时文件生成Post-Place&Route Simulation Model;还可进行功耗分析Analyze Power(xpower)
第31页:选择产生可下载到FPGA器件去
.选择产生可下载到FPGA器件去的位流文件GenerateProgramming File,于是在当前工程路径下生成了如adder.bit的位流文件5.然后选择Configure Device(iMPACT),就可把位流文件下载到FPGA器件中,选择run,FPGA器件里就有相应的电路了,通过管脚约束文件中的相应FPGA管脚,就可以对输入端口写入数据,观察输出端口的信号了
第32页:FPGA的管脚约束文件*.ucf文件中
- FPGA的管脚约束文件*.ucf文件中:
- 复位信号rst可用普通I/O接口来映射如(spartan ii中用p163);也可以用全局时钟端口如(spartan ii中用p182),一般普通I/O端口的延时比全局时钟端口大,所以在规模比较大的设计中就要用全局时钟端口。
- 时钟信号clk一般用全局时钟端口(spartan ii中用p80)。
第33页:复位信号rst在用全局时钟端口后
通常在用ISE map的时候会报端口错误map error,通常会这样修改源码:1.在源码中,输入端口为rst,再新定义一信号如wiret_rst2.例化BUFGP b(.I((rst),.O(t_rst));3.在源码的逻辑描述中,rst用t_rst替换。4.同理,如果时钟信号出现map error,说明fanout能力不够,也需要这样处理。
第34页:相关练习-常见公司数字IC设计招聘-题目
1.可编程逻辑器件在现代电子设计中越来越重要,请问:a)你所知道的可编程逻辑器件有哪些?b)试用VHDL或VERILOG、描述8位D触发器逻辑。(汉王)