如何学习FPGA中提到第一步:学习、了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。既然要开始学习FPGA,那么就应该从其基本结构开始。以下内容是我学习过程中的整理的一些东西。主要来自:Xilinx中文网站,博客LAY Trust Jesus,博文FPGA学习笔记 ,博文FPGA基本结构

1.可编程逻辑器件

从PLD的发展历程来看,按照结构区分,前后共有4种可编程逻辑器件类型:PLA、PAL、CPLD和FPGA。PLA——PAL——CPLD是继承的关系,然而FPGA是相对独立的,采用了截然不同的设计方法。

复杂可编程逻辑器件 (CPLD )由完全可编程与/或阵列以及宏单元库构成。 与/或阵列可重编程,能够执行众多逻辑功能。宏单元是执行组合逻辑或时序逻辑的功能块,同时还提供了真值或补码输出和以不同的路径反馈等更高灵活性。CPLD的块结构如下所示

FPGA是由通过可编程互连连接的可配置逻辑块 (CLB) 矩阵构成的可编程半导体器件。相对于专为特定设计定制构建的专用集成电路 (ASIC)而言,FPGA 能通过编程来满足应用和功能要求。 虽然市面上也有一次性可编程 (OTP) FPGA,但绝大多数是基于 SRAM 的类型,可随着设计的演化进行重编程。

CPLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,PLD适合用于设计译码等复杂组合逻辑。 但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,PLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于PLD。 所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好选择。

2.FPGA和ASIC

3.FPGA结构及相关知识

SRAM

SRAM是一种可编程技术,与之类似的还有Flash/E2PROM 编程技术,反熔丝编程技术(军品和宇航级可能会用)。在FPGA中,SRAM是主流。

最基本的5管SRAM单元结构如图所示,通过传输管控制存储信息的读写。当传输管导通时,SRAM单元内存储的信息可由数据端读取或改写;当传输管截止时,存储的信息被首尾相连的两个反相器锁定,由Q和Q'端输出。理论上,SARM单元可被配置无数次。

FPGA中的SRAM单元主要实现以下功能:作为多路开关、交叉开关、互连通道等可编程结构的控制端,对信号的传输路径进行编程;对片内相对独立的逻辑功能模块(如可编程触发器、用户可编程I/O)进行配置;作为查找表(LookUp-Table,LUT)的存储单元,用来实现FPGA的逻辑功能;使用SRAM存储阵列作为嵌入式存储器,实现复杂的数字信号处理和存储功能。

SRAM的缺点主要在于断电后信息丢失,上电后需要重新配置。这个过程通过外部存储进行,信息可能会被截取。同时,传输管是非理想的。

CLB

CLB 是 FPGA 的基本逻辑单元。实际数量和特性会依器件的不同而改变,但是每个 CLB 都包含一个由 4 或 6 个输入、一些选择电路(多路复用器等)和触发器组成的可配置开关矩阵。开关矩阵具有高度的灵活性,经配置可以处理组合型逻辑、移位寄存器或 RAM。

CLB由Slices组成,Slices包含LUT,触发器和相关逻辑。LUT即查找表本质上可以看成是一个RAM,对应于实现的不同逻辑功能,LUT有相应的输入地址和存储的数值。CLB可以配置为相应的逻辑模块,也可以用来构成分布式RAM和ROM。

IOB

目前的 FPGA 可支持许多种 I/O 标准,因而为您的系统提供了理想的接口桥接。FPGA 内的 I/O 按 bank 分组 (见下图) ,每个 bank 能独立支持不同的 I/O 标准。目前最先进的 FPGA 提供了十多个 I/O bank,能够提供灵活的 I/O 支持。

可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求,其示意结构如下图所示。

外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA 内部。当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(Hold Time)的要求可以降低,通常默认为0。

互连

CLB 提供了逻辑性能,灵活的互连布线则负责在 CLB 和 I/O 之间传递信号。布线有几种类型,从设计用于专门实现 CLB 互连、到器件内的高速水平和垂直长线、再到时钟与其它全局信号的全局低歪斜布线。除非另行说明,否则设计软件会将互连布线任务隐藏起来,用户根本看不到,从而大幅降低了设计复杂性。也就是说这个基本不用管。

存储器,时钟管理

   此外,大部分FPGA内部嵌入了块RAM用来实现片上存储;大多数 FPGA 都提供数字时钟管理(所有 Xilinx FPGA 都具有此特性)。FPGA 提供了数字时钟管理和锁相环锁定功能(DCM或PLL),不仅提供了精确时钟综合功能,而且能够降低抖动和实现过滤。

4.Xilinx的FPGA

5.总结

遇事多问几个为什么,就会发现自己还有很多东西不懂,继续努力!看到了一则新闻

深度学习算法有望在FPGA和超级计算机上运行,和我前段时间想的一样,FPGA是很有很好的发明,学好FPGA是很有意义的!

FPGA学习之基本结构的更多相关文章

  1. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  2. FPGA学习的一些误区

    转载自网络,作者不详. 我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新入群的菜鸟们总是在重复的问一些非常简单但是又让新手困惑不解的问题.作为管理员经常要给这些菜鸟们普及基础知识,但是 ...

  3. [整理]FPGA学习资料汇总

    01.特权同学倾情奉献海量FPGA学习资料 http://pan.baidu.com/s/1pJIb32F

  4. 芯航线FPGA学习套件之4*4矩阵键盘模块测试手册

    芯航线FPGA学习套件之4*4矩阵键盘模块测试手册   本手册以简明扼要的方式介绍芯航线FPGA学习套件提供的矩阵键盘模块的测试方法:   连接开发板,如下所示: 2.将矩阵键盘模块与开发板按如下图所 ...

  5. 芯航线FPGA学习套件之多通道串行ADDA(TLV1544,TLC5620)模块测试手册

    芯航线FPGA学习套件之多通道串行ADDA模块测试手册   本手册以简明扼要的方式介绍芯航线FPGA学习套件提供的ADDA模块的测试方法:   连接开发板,如下所示: 2.将ADDA V1.1模块与开 ...

  6. 第二篇-FPGA学习之RoadMap

    古语云:知己知彼,百战不殆.那么既然选择了FPGA之路,欲练此功,必先-- 必先了解清楚,FPGA的特点,FPGA善于/不善于解决什么类型问题,以及FPGA应用的方向,FPGA学习的要素等等. 一.F ...

  7. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  8. node-webkit学习(2)基本结构和配置

    node-webkit学习(2)基本结构和配置 文/玄魂 目录 node webkit学习(2)基本结构和配置 前言 2.1  基本程序结构 2.2  package.json 2.2.1 必须的配置 ...

  9. FPGA学习网站

    1.  OPENCORES.ORG这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到.进入后,选择project或者由 http//www.opencores.org/browse.c ...

随机推荐

  1. C++静态计算的例子

    写一个函数,用递归函数完成以下运算: sum(n) =  1 – 1/2 + 1/3 – 1/4 + … -(1/n)*(-1)n        (其中n>0) 函数原型:         fl ...

  2. Effective Java 50 Avoid strings where other types are more appropriate

    Principle Strings are poor substitutes for other value types. Such as int, float or BigInteger. Stri ...

  3. redis客户端--jedis

    一.jedis jedis 是 redis推荐的java客户端.通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作.jedis使用起来比较简单,它的操作方法与redis命令相类 ...

  4. 版本控制工具VSS使用介绍

    什么是版本控制? 1.怎样对研发项目进行整体管理 2.项目开发小组的成员之间如何以一种有效的机制进行协调 3.如何进行对小组成员各自承担的子项目的统一管理 4.如何对研发小组各成员所作的修改进行统一汇 ...

  5. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

    运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...

  6. JS键盘事件监听

    window.onload=function(){ var keyword = document.getElementById("keyword"); keyword.onkeyu ...

  7. ubuntu更新删除旧内核的shell脚本

    ubuntu经常提示要更新内核,更新几次后 /boot目录就满了,再更新就提示目录没空间了,这时候就需要删除不用的老旧内核,之前都是uname, grep, dpkg之类的命令一条条敲,然后用眼睛看需 ...

  8. hdu1047 Integer Inquiry

    /* Integer Inquiry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  9. 边工作边刷题:70天一遍leetcode: day 89-1

    Smallest Rectangle Enclosing Black Pixels 要点:记题:这题有两个限制条件:所有black pixel是连通的(所以可以用binary search)以及给了一 ...

  10. 迷你DVD管理器项目

    package chapter5; import java.util.*; public class MiniDVD { public static void main(String[] args){ ...