目录
这些是对之前的笔记做了个总结,主要是了解FPGA的内部结构,开发流程以及常用的工具等知识。了解FPGA的内部结构对以后开发来说还是很重要的。下面的话就是安装一下vivado软件,然后多看看document navigation,多学习官方文档,示例,多写写小的项目,培养硬件编程的思维。
1. PLD的发展历程
PLD是Programmable Logic Device的缩写,表示可编程逻辑器件。
- PROM,EPROM(紫外线擦除),EEPROM(电擦除)
- PAL(Programmable Array Logic),GAL(General Array Logic)
- FPGA(Field Programmable Gate Array),CPLD(Complex Programmable Logic Device)
- SOPC,SOC(System On Chip)片上系统
2. 半导体存储器的分类
3. PLD的分类
- 按照内部结构分类:分为基于乘积项结构(Product-Term)和基于查找表(LUT:Look Up Table)结构的PLD器件
- 按集成度分类:简单的可编程逻辑器件(SPLD)(包括PROM,PLA,PAL,GAL)和高密度可编程逻辑器(HDPLD)(包括CPLD和FPGA)
- 按编程次数分类:一次性编程器件和可多次编程器件
- 按不同的编程元件和编程工艺分类:熔丝(Fuse);反熔丝(Antifuse);紫外线擦除,电编程(EPROM);闪速存储器(Falsh);静态存储器(SRAM)。
大多数的FPGA采用SRAM查找表结构的器件。
4. FPGA厂商
主要生产商有Xilinx、Intel、Lattice三家。
Altera的FPGA产品:Stratix(高端)、Arria(中端)、Cyclone(低成本);CPLD产品:MAX ii 、MAX10;
Xilinx产品:Spartan(低成本)、Virtex(高性能)。
5. FPGA的结构
FPGA包含的部分
- CLB(Configurable Logic Block):其基本结构是由某种存储器(SRAM,Flash)制成的4输入1输出的“真值表”(对应组合逻辑)和一个D触发器组成(对应时序逻辑)。下图就是FPGA中CLB示意图(包含LUT和触发器)。CLB还可以配置成加法器模块或者存储器模块。
- IOB(Input Output Block)
- Interconnect : 连线上有很多用存储器控制的链接点,通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。
- 内嵌RAM
- 底层嵌入功能单元
- 内嵌专用单元
查找表 (Look-Up-Table) 简称为 LUT,LUT 本质上就是一个 RAM。目前 FPGA 中多使用 4 输入的 LUT,所以每一个 LUT 可以看成一个有 4 位地址线的 的 RAM。一个N输入查找表需要用2^N位容量的SRAM存储单元。显然N不可能很大,否则LUT的效率很低。一般N取4,5,6。当用户通过原理图或 HDL 语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能结果,并把真值表 ( 即结果 ) 事先写入 RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
器件内部的延时与器件的结构和布线有关,延时是不确定的,也是不可预测的。
硬件设计也是有不同的抽象层次,每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路,那么用HDL描述以后转化为文本的形式,剩下的向更低层次的转换就可以让EDA工具去做了,这就大大的降低了工作量。这就是可综合的概念,也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具理解并转化为底层的门级电路或其他结构的电路。
HDL也可以描述更高的抽象层级如算法级或者是体系结构级,但目前受限于EDA软件的发展,EDA软件还无法理解这么高的抽象层次。
5.1 Altera Cyclone IV为例
Altera Cyclone IV器件的体系结构主要包含:FPGA核心架构;IO特性;时钟管理;外部存储器接口高速收发器(Cyclone IV GX)。FPGA核心架构包括4输入查找表构成的LE,M9K存储器模块(9Kbit的SRAM存储器)和乘法器(18*18或两个9*9)。
LE的结构如下图所示。LE可以工作在普通模式和动态算术模式。
5.2 Xilinx XC4000为例
Xilinx XC4000器件内部主要由可配置逻辑块(CLB)、输入输出模块(I/O Block)和布线通道(Routing Channels)。其中CLB由函数发生器、数据选择器、触发器和信号变换电路等组成。每个CLB包含三个查找表。CLB的结构图如下所示
CLB也能配置成加法器模块。4输入的查找表能同时实现一个全加器的求和和进位两个函数。CLB还能配置成存储器模块。4输入的查找表可以作为16*1的存储器块。
CLB是如何和周边的资源互联的???
6. 设计流程和工具
6.1 设计流程
- 输入:原理图输入,代码输入(Verilog和VHDL),联合输入;
- 功能验证(前仿真) 目的:验证模块的基本功能是否符合设计;工具:Modelsim
- 综合:把输入翻译成与、或、非门、RAM、触发器等基本逻辑单元组成的网表 工具:Symplify
- 综合后仿真
- 实现
- 布线后仿真
- 下板调试:将配置文件固化到实验板上,达到脱机运行的目的:将.sof转换成.jic文件(配置文件从PC传输到FPGA,再从FPGA转给配置芯片,FPGA起到中转的作用)
6.2 设计工具
按照功能分类(只列出了比较常用的一些)
- 集成的FPGA开发工具: ISE、Vivado、Quartus
- 逻辑综合器: Symplify
- 仿真器:ModelSim
- 其他的EDA专用工具:DSP Builder
6.3 开发语言
- Verilog/VHDL
- System Verilog /System C
- C/Python
7. 学习路线
结合网上的学习经验以及网课的课程体系,可以将FPGA的学习分为四个主线。扎实的数字电路(学好数电会事半功倍)、Verilog HDL语法(西南交大的FPGA课程讲解的就是Verilog语法的进阶知识)、开发工具Vivado的使用(熟能生巧吧)、以及工程的历练(理论最终还是要经过实践检验)。学习一个知识之前先搞清楚它的学习路线,这样学起来才有的放矢。多看看网上的学习路线,不要一叶障目。