FPGA基础知识
FPGA介绍
数字集成电路分类
- 通用集成电路:比如单片机,74系列IC
- 专用集成电路ASIC(Application Specific Integrated Circuit):为某种专门用途而设计的集成电路称为专用集成电路,逻辑功能是固定不变的;用量不大时ASIC的优势体现不出来,成本高,周期长,所以有了PLD。
- 可编程逻辑器件PLD(Programmable Logic Device):逻辑功能由用户通过对器件进行编程来设定,即内部电路结构可以通过写入编程数据来设置,且可以擦除多次重写。可以通过编程将一个数字系统集成在一片PLD上,即片上系统SoC(System on Chip)
PLD
PLD分类:
SPLD(simple PLD,简单 PLD)
CPLD(complex PLD,复杂 PLD)
FPGA(field-programmable gate array,现场可编程门阵列)
常用的就是CPLD和FPGA,二者的本质差异就是电路结构不同。CPLD是基于乘积项的与或逻辑阵列,而FPGA是基于查找表的CLB阵列。
PLD原理
1.SPLD: 任何逻辑函数都可以化为最简与或式,CPLD就是通过编程将输入input变成所需的与函数项,再通过后面的或逻辑就得到功能输出;之后可以送给寄存器存储或同步,也可以直接输出。这叫做PAL
2.CPLD: 将多个PAL通过PIA(Programmable Interconnect Array,可编程互联阵列)连接起来,就是CPLD。如下图
每个LAB(Logic Array Block)相当于一个 PAL 电路。
在 PAL 中,I/O 直接连接到逻辑的。而 CPLD中I/O 通过 PIA 从器件的主要逻辑中分离出来,I/O 有它自己的控制逻辑,I/O 控制单元可以根据需要将相应的引脚设置成输入、输出或双向工作模式。
- LAB 逻辑和 PIA是完全可编程的,所以具有更多的逻辑资源和布线可能。
3.FPGA: FPGA 由CLB (Configurable Logic Block,可配置逻辑模块)、IOB(I/O Block,输入/输出单元) 和PIM(Programmable Interconnection Matrix,分布式的可编程互联矩阵)组成。可编程的布线资源分为行互联和列互联,分布在 CLB 与 CLB 之间,可以是整个器件的,也可以是局部的。
FPGA 基本结构 6 部分:可编程输入/输出单元、基本可编程逻辑单元、嵌入式块 RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。
(1)可编程输入/输出单元:
I/O 单元为可编程模式,通过软件配置,来适配不同的电气标准与 I/O 物理特性,可以调整匹配阻抗特性、上下拉电阻、以及调整驱动电流的大小等。Spartan6的电气标准为LVCMOS3.3V
(2) 基本可编程逻辑单元:
由查找表(LUT,Look Up Table)和寄存器(Register)组成。Spartan-6中每个CLB由两个slices组成,并排排列成两个垂直列的一部分。Spartan-6 体系结构中有三种类型的 CLB Slices:SLICEM,SLICEL 和 SLICEX。 每个切片包含四个 LUT,八个触发器和其他逻辑。LUT 用于通用组合和顺序逻辑支持。
(3) 嵌入式块 RAM:
(4) 丰富的布线资源:
全局布线资源、长线资源、短线资源、分布式的布线资源。实际设计中不需要我们选择用哪种布线资源,内置布局布线器会自动地依据输入逻辑网表的拓扑结构和约束条件选择布线资源连通各个模块单元。
(5) 底层嵌入功能单元:
通用程度较高的嵌入式功能模块,比如 PLL(Phase Locked Loop)、DLL(Delay Locked Loop)以及DSP、CPU 等硬核。
HDL
数字系统设计
1.逻辑设计(前端):
利用HDL(Hardware Description Language)描述电路的结构和功能。
2.电路实现(后端):
利用 综合工具 将HDL描述的电路转换为门级电路网表,将其与某种工艺的基本元件逐一对应,通过布局布线工具转换为电路布线结构。
3.系统验证
Verilog与C的区别:
- Verilog是硬件描述语言,在编译下载到FPGA之后,会生一个电路,是并行执行的;
- C语言是软件编程语言,编译下载到单片机之后,是存储器中的一组指令,单片机处理这些软件指令需要取指令、译码、执行,这个过程是串行执行的。