FPGA内部硬件结构简介
我们知道FPGA内部有很多可供用户任意配置的资源,其中包括:可编程逻辑、可编程I/O、互连线、IP核等资源,很多学过数字电路的人都知道与或非门可以构成几乎所有的数字电路,但是FPGA内部最基本的主要单元并不是这些与或非门,而是由无数个查找表(Look Up Tabe,简称为LUT)和寄存器构成。
虽然FPGA的内部结构对于初学者来说是云里雾里,一头雾水,但是了解FPGA的内部结构能让我们更好的理解FPGA设计过程中我们所编写的代码和硬件是怎样的一个映射关系,从而更深刻理解FPGA和单片机、ARM的不同。当我们对FPGA内部结构了解透彻后,就可以把FPGA的设计了如指掌,才能有助于进一步优化我们的设计,优化好的设计能使我们设计的整个系统跑的更快、更加节省资源、功耗更低,稳定性更好。
我们选用的是CycloneIV系列的EP4CE10F17C8,很多入门开发板一般都配置的这款芯片,其主要资源如下图所示。

首先我们来认识一下FPGA内部的一些资源。点击下图所示图标打开Chip Planner来查看这款FPGA芯片的版图模型。

打开后的版图模型如下图所示,第一张图是未进行布局不线的图,因为资源未被使用所以都是浅色。第二张图是已经布局布线后的图,也就是已经将使用的资源映射到了版图模型上(只有全编译后才能看到映射效果),其中深色表示该资源已经被使用,而颜色越深的地方表示资源利用率越高。黑色区域为一些固定功能的资源或没有资源,用户不可对其进行任意配置。


①逻辑阵列块(Logic Array Block,也简称为LAB):每个LAB由16个LE(Logic Element)组成,下图是两个已经映射资源后的LAB,资源利用率不同的LAB其颜色深浅也有所差异(左边使用的资源少,颜色就浅;右边使用的资源多,颜色就深)。

放大后的LE如下图所示,每个LE由左边一个蓝色LUT和右边一个红色寄存器组成。整个芯片中共有10320个LE。

双击其中一个LE可以观察到其大致的内部结构(内部结构只有被使用才能够双击打开查看),我们可以看到主要的两个部分,一是左边的4输入LUT,另一个是可编程寄存器,还包括一些选择器、与门等辅助逻辑电路。(蓝色高亮的部分是已经使用的资源,未高亮灰色的部分是未被使用的资源)。

②用户可编程I/O(User I/Os,也被称为IOE):可编程I/O资源分布在整个芯片的四周。该芯片共有256个管脚,除去一些固定功能的管脚,可供用户任意配置的管脚资源只有180个,下图是其中一个可编程I/O单元,里面又包含三个最小单元(每个可编程I/O单元中的最小单元个数不固定,有的包含两个,也有的包含四个)。

下图是可编程I/O最小单元内部结构图,包括双向I/O缓冲器、OE寄存器、对齐寄存器、同步寄存器、DDR输出寄存器、三态门、延时模块等组成。

③嵌入式存储单元(Memory Bits,也被称为Block RAM或简称为BRAM):该部分资源主要用于生成RAM、ROM、FIFO、移位寄存器,在存储较多数据或作跨时钟域处理时常用到。该芯片共有423936bit存储单元,并以每9Kbit容量为一个块,共有46个,下图所示为一个M9K的RAM块。相对于LUT构成的分布式RAM(Distribute RAM,简称为DRAM),这种专门的存储单元容量更大,从而避免LUT资源的浪费。

下图是一个M9K内部结构图。由输入输出寄存器和一个RAM块构成。

④嵌入式乘法单元(Embedded multiPlier 9-bit elements,也称为DSP块):该单元主要用于各种复杂的数学运算,乘法、除法以及常用的功能函数如:有限冲激响应滤波器(FIR),无限冲击响应滤波器(IIR),快速傅里叶变换(FFT),离散余弦变换(DCT)等时会消耗很多逻辑资源,而FPGA中的LUT和寄存器资源有限,这时候使用嵌入式乘法单元这部分资源就不会造成逻辑资源的浪费。该芯片共有46个DSP块,成列式分布在芯片的中间位置,下图为一对DSP块资源。

下图是嵌入式乘法器单元DSP块的内部结构图。包含输入输出寄存器和一个乘数块。
⑤锁相环(Phase Lock Loop,也简称为PLL):该芯片一共有两个锁相环,一个在右上角处附近,一个在左下角附近。PLL的参考时钟输入都是由专用时钟管脚上的晶振进来的,用于时钟的倍频、分频,以及相位、占空比调制。PLL出来的时钟都会连接到全局时钟网络上,以保证时钟的质量,减小时钟偏斜(Skew)和抖动(Jitter)。

下图是锁相环内部的结构图,每个锁相环可以分出五个同源时钟信号。

FPGA内部硬件结构简介的更多相关文章
- 硬盘内部硬件结构和工作原理详解[zz]
一般硬盘正面贴有产品标签,主要包括厂家信息和产品信息,如商标.型号.序列号.生产日期.容量.参数和主从设置方法等.这些信息是正确使用硬盘的基本依据,下面将逐步介绍它们的含义. 硬盘主要由盘体.控制电路 ...
- FPGA芯片内部硬件介绍
FPGA芯片内部硬件介绍 FPGA(Filed programmable gate device):现场可编程逻辑器件 FPGA基于查找表加触发器的结构,采用SRAM工艺,也有采用flash或者反熔丝 ...
- 关于 FPGA 内部信号扇入扇出
扇入.扇出系数 扇入系数是指门电路允许的输入端数目.一般门电路的扇入系数为1—5,最多不超过8.扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力.一般门电路的扇出系数为8,驱动器的扇出系数 ...
- 论山寨手机与Android联姻 【9】SmartPhone的硬件结构
如何区别智能手机(SmartPhone)与功能手机(FeaturePhone)? 有一种观点认为,智能手机本质上是功能手机与便携式电脑(Laptop PC)的结合.功能手机的功能受限于制造厂商的预制, ...
- CPU的硬件结构和汇编语言
(已更正) 这个问题包括CPU的硬件结构和汇编语言的范畴. 这里梳理一下. 首先, 题主"李建国"自问自答的部分说的是正确的, CPU的指令集是软件与CPU这两个层级之间的接口, ...
- FPGA内部动态可重置PLL讲解(一)
SDRAM驱动需要两个时钟,一个是控制时钟,一个是驱动时钟,这两个时钟有一个相位差,如何产生高精度的时钟是SDRAM能够正常工作的关键,采用FPGA内部动态可重置PLL生成SDRAM所需要的时钟频率. ...
- FPGA 内部详细架构你明白了吗?
FPGA 芯片整体架构如下所示,大体按照时钟域划分的,即根据不同的工艺.器件速度和对应的时钟进行划分: FPGA 内部详细架构又细分为如下六大模块: 1.可编程输入输出单元(IOB)(Input Ou ...
- 【转】FPGA内部小数计算
FPGA内部计算小数 [转载] 谓定点小数,就是小数点的位置是固定的.我们是要用整数来表示定点小数,由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了).既然没有 ...
- 【CUDA学习】GPU硬件结构
GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor 最 ...
随机推荐
- ELK收集日志到mysql数据库
场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ...
- 图论--网络流--最大流 HDU 2883 kebab(离散化)
Problem Description Almost everyone likes kebabs nowadays (Here a kebab means pieces of meat grilled ...
- TCP的三次握手四次挥手理解及面试题
一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到 ...
- JavaSpring中级联查询
一对一级联查询映射文件PersonMapper.xml代码: <?xml version="1.0" encoding="UTF-8"?> < ...
- 搜索+简单dp
前言:即使是简单的递归,在复杂度过高时也可以使用简单的dp. 一般有两种情况,一是利用dp思想求最优子结构进行搜索剪枝,二是利用搜索进行dp数组的填充. 例题一.hdu1978 题目大意:这是一个简单 ...
- python学习之循环语句的使用
循环语句主要有while和for循环两大类,接下来先看下while循环 1.while循环(python里没有do while循环语句) while 条件: 代码块 执行程序 2.for循环(可以取二 ...
- 武装你的WEBAPI-OData入门
本文属于OData系列 目录(可能会有后续修改) 武装你的WEBAPI-OData入门 武装你的WEBAPI-OData便捷查询 武装你的WEBAPI-OData分页查询 武装你的WEBAPI-ODa ...
- [hdu5379 Mahjong tree]dfs计数
题意:给n个节点的树编号1-n,一个节点唯一对应一种编号,要求编完号的树满足如下性质:所有节点的儿子的编号是连续的,对一棵子树,它包含的所有节点的编号也是连续的.连续的意思是把所有数排序后是一段连续的 ...
- Zookeeper入门一篇就够了
谈点分布式 什么是分布式呢? 起初,我们的应用流量比较小,所有东西全部部署在一个服务器,比如全部丢给一个tomcat来处理,顶多做一个tomcat的多节点部署多分,再挂一台Nginx做一下负载均衡就O ...
- CompletableFuture的使用例子
1. CompletableFuture的介绍 在Java8时被引入,在包java.util.concurrent下,是Java多线程编程中的一个类,扩展了Future中很多功能,Completabl ...