FPGA基础学习(7) -- 内部结构之CLB-程序员宅基地

技术标签: 人工智能  

一直以来,觉得自己关于FPGA方面,摸不到“低”——对底层架构认识不清,够不着“高”——没真正独立做过NB的应用,如高速、复杂协议或算法、神经网络加速等高大上的应用,所以能力和认识水平都处于中间水平。这段时间做时序优化,感觉心有余而力不足了,可能要触及手动布局布线了,打开Device布局图才开始有兴趣探究一些底层结构的东西。

966190-20181128141053679-982772209.png
看吧,资源已经用了80%的A7 200芯片

可能翻开任何一本有关FPGA的书籍,上来就会介绍FPGA的历史,原理,内部结构什么的,大部分人看着都极其枯燥,常常要么直接略过,要么就看一遍,久了也就忘记了(部分靠翻译文档的书作者该好好反思)。我硬着头皮去弥补之前缺失的一些基础知识,结合Xilinx A7 芯片,总结一下自己的收获。

1. 总览

平台:Vivado

芯片:XC7A200

FPGA主要有六部分组成:可编程输入输出单元、可编程逻辑单元、完整的时钟管理、嵌入块状RAM、布线资源、内嵌的底层功能单元和内嵌专用硬件模块。其中最为主要的是可编程输出输出单元、可编程逻辑单元和布线资源

966190-20181128141104298-130153820.png

放大,这些就是内部资源,主要是逻辑单元和块状RAM及一些内嵌功能单元

966190-20181128141110308-1550967187.png

再放大,这些逻辑单元的内部结构也出来了,像大型“停车场”

2. 可配置逻辑单元

可配置逻辑单元(Configurable Logic Block,CLB)在FPGA中最为丰富,由两个SLICE组成。由于SLICE有SLICEL(L:Logic)和SLICEM(M:Memory)之分,因此CLB可分为CLBLL和CLBLM两类。

966190-20181128141119904-1895760515.png

966190-20181128141125988-195419079.png

点击内部的逻辑单元,通过阴影区别包含的范围,你可以清晰的看到结构划分的层级。在旁边窗口可以清晰的看到选中部分的属性(Properties)。

来,再放大,放大到一个SLICEL,如下图所示。

966190-20181128141132233-743230001.png

SLICEL和SLICEM内部都包含4个6输入查找表(Look-Up-Table,LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop),下面分部分介绍的时候,时不时可以再回头看这张结构图。

2.1 6输入查找表(LUT6)

虽然SLICEL和SLICEM的结构组成一样,但两者更细化的结构上略有不同,区别在于LUT6上(如下图所示),从而导致LUT6的功能有所不同(如下表格所示)。

966190-20181128141139455-1285360947.png

LUT功能 SLICEL SLICEM
逻辑函数发生器 v v
ROM v v
分布式RAM v
移位寄存器 v

上边的功能可以看到,不论是SLICEL还是SLICEM,他们的LUT6都可以作为ROM使用,配置为64x1(占用1个LUT6,64代表深度,1代表宽度)、128x1(占用2个LUT6)和256(占用4个LUT6)的ROM。

另外既然SLICEM中的M代表memory的意思,所以增加了更多存储功能。可以配置为RAM,尤其指分布式RAM。其中RAM的写操作为同步,而读操作是异步的,即与时钟信号无关。如果要实现同步读操作,则要额外占用一个触发器,从而增加了意识时钟的延迟(Latency),但提升了系统的性能。这就解释了为什么我们实现RAM同步读写的时候,读出输出要延迟一个clk。一个LUT6可配置64x1的RAM,当RAM的深度大于64时,会占用额外的MUX(F7AMUX,F7BMUX,F8MUX,即一个SLICE中的那3个MUX)。

SLICEM中的LUT还可以配置为移位寄存器,每个LUT6可实现深度为32的移位寄存器,且同一个SLICEM中的LUT6(4个)可级联实现128深度的移位寄存器。

2.2 选择器(MUX)

SLICE中的三个MUX(Multiplexer:F7AMUX,F7BMUX和F8MUX)可以和LUT6联合共同实现更大的MUX。事实上,一个LUT6可实现4选1的MUX。

SLICE中的F7MUX(F7AMUX和F7BMUX)的输入数据来自于相邻的两个LUT6的O6端口。

一个F7MUX和相邻的两个LUT6可实现一个8选1的MUX。因此,一个SLICE可实现2个8选1的MUX。

4个LUT6、F7AMUX、F7BMUX和F8MUX可实现一个16选1的MUX。因此,一个SLICE可实现一个16选1的MUX。

2.3 进位链(Carry Chain)

进位链用于实现加法和减法运行。就是结构图中,中间那个大的部分,可以看到它内部实际还包含4个MUX和4个2输入异或门(XOR)。

异或运算是加法运算中必不可少的运算。

2.4 触发器(Flip-Flop)

每个SLICE中有8个触发器。这个8个触发器可分为两大类:4个只能配置为边沿敏感的D触发器(Flip-Flop)和4个即可配置为边沿敏感的D触发器又可配置为电平敏感的锁存器(Flop&Latch)。当后者被用作锁存器的时候,前者将无法使用。

966190-20181128141156105-1742557697.png

当这8个触发器都用作D触发器时,他们的控制端口包括使能端CE、置位/复位端口S/R和时钟端口CLK是对应共享的,也就是就是说共用的。{CE,S/R,CLK}称为触发器的控制集。显然,在具体的设计中,控制集种类越少越好,这样可以提高触发器的利用率。那么怎样减少控制集种类呢?我的理解是:

  • 减少时钟种类,即频率越少越好;
  • 统一规范的设计逻辑,如复位。

S/R端口可配置为同步/异步置位或同步/异步复位,且高有效,因此可形成4种D触发器,如下表所示。

原语(Primitive) 功能描述 原语(Primitive) 功能描述
FDCE 同步使能,异步复位 FDRE 同步使能,同步复位
FDPE 同步使能,异步置位 FDSE 同步使能,同步置位

在我们的常规设计中,FDCE和FDPE占了绝大多数。

说到高有效,让我想起了一个大家习以为常,但很少深究的问题:为什么一开始接触FPGA的时候,都告诉我们低电平复位?后来查了一些资料,有说从功耗、噪声可靠性方面考虑等等,但是偶然看到Xilinx和Altera两家芯片的触发器不一样!如下图所示,Xilinx的触发器是高电平复位,而Altera的触发器时低电平复位。所以这也是需要考虑的一点吗?

966190-20181128141202955-2012459688.png

参考文献:

  1. 《7 Series FPGAs Configurable Logic Block》(UG474)
  2. 《VIVADO从此开始》——高亚军著(强烈推荐此书!!!!本博客论述部分大多来自高老师的书)

转载于:https://www.cnblogs.com/rouwawa/p/10031833.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30384217/article/details/95809956

智能推荐

php将浮点型转换成整型,php怎样将浮点数转为整数-程序员宅基地

文章浏览阅读183次。php将浮点数转为整数的方法:可以利用php内置函数intval()来实现。intval()函数用于获取变量的整数值,成功时返回interger值,失败时返回0。intval()函数不能用于object。php中的内置函数intval()用于获取变量的整数值。成功时返回var的integer值,失败时返回0。空的array返回0,非空的array返回1。(推荐教程:php视频教程)intval()..._php 浮点型改成整形

九九乘法表(python)_99乘法表循环编辑-程序员宅基地

文章浏览阅读418次。使用while循环写九九乘法表。使用for循环写九九乘法表。_99乘法表循环编辑

浅谈对Spring的理解_介绍下你对spring的理解-程序员宅基地

文章浏览阅读624次。Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring是一个十分庞大的体系,具体可以访问它的官网https://spring.io/projects进行详细了解。Spring体系里的常用到的项目:1.SpringFramework2.SpringData3.SpringSecurity4.SpringBoot5.SpringCloud..._介绍下你对spring的理解

mysql5.7 geometry算法_MySQL-程序员宅基地

文章浏览阅读290次。19.2.1.Geometry类的层次几何类定义了下述层次:·Geometry(非实例化)oPoint(可实例化的)oCurve(非实例化)§LineString(可实例化的)·Line·LinearRingoSurface(非实例化)§Polygon(可实例化的)oGeometryCollection(可实例化的)§MultiPoint(可实例化的)§MultiCurve(非实例化)·Mult..._mysql5.7中定义geometry字段时指定srid参考系

SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)_orb 轮廓定位-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏11次。1.ORB特征简介ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称,ORB的名字已经说明了其来源,其实ORB特征是采用FAST方法来检测提取特征,但FAST特征本身是不具有方向性的,所以在ORB特征中添加对特征方向的计算;另外,ORB采用BRIEF方法计算特征描述子,BRIEF的优点在于速度,但是缺点也很明显:不具备旋转不变性,对噪..._orb 轮廓定位

Mysql断流_彻底解决ROS网页断流问题-程序员宅基地

文章浏览阅读210次。首先,检查你的ROS,确定他本身没有任何问题。然后,打开你的WINBOX登陆进去,打开防火墙规则,IP-FIREWALL-CONNECTIONS-TRACKING好了。打开TRACKING后,将里面的时间设置稍微大点。具体多大,没有确切数字,不过一定要大。最少也得30秒以上。你按照里面的默认,成倍数增加,慢慢试。下面是我自己的设置。已经没有问题了,具体什么原因,慢慢去体会。这个设置不是固定的。因为..._ros wan口断流

随便推点

Neo4j图数据库:Not all return nodes are being displayed due to Initial Node Display setting. Only 300...-程序员宅基地

文章浏览阅读1.6k次。问题Not all return nodes are being displayed due to Initial Node Display setting. Only 300 of 300 nodes are being displayed解决办法在设置里修改一下Graph Visualization就可以啦_not all return nodes are being displayed due to initial node display setting

从关系数据库中选择非重复值_navicat16怎么设置字段值不能重复-程序员宅基地

文章浏览阅读507次。在这篇文章中,我们学习了如何使用 SQL DISTINCT 子句,它从 SELECT 语句的结果集中删除重复项,只留下唯一值。正如我们所见,它可以处理一个或多个列以及 NULL 值。但是,如果你需要在一个或多个列上应用聚合函数,就应该改用 GROUP BY 子句。_navicat16怎么设置字段值不能重复

python使用imblearn进行采样时报错No module named sklearn.neighbors._base_no module named 'sklearn.neighbors.base-程序员宅基地

文章浏览阅读3.7k次。“No module named 'sklearn.neighbors._base”。这个问题很坑,查了好久都没有发现解决方法,最后终于找到了。其实就是需要将环境重启一下就可以了。_no module named 'sklearn.neighbors.base

APDU SW应答码处理,错误应答码解释_apdu sw 6108-程序员宅基地

文章浏览阅读3k次。摘自: 中国金融集成电路(IC)卡规范第 1 部分:电子钱包电子存折 应用卡片规范 表 A.1 指令状态字列表1SW1SW2_apdu sw 6108

CentOS-消除未被及时释放的TIME_WAIT状态的TCP连接_centos连接不释放-程序员宅基地

文章浏览阅读6.8k次。CentOS_消除未被及时释放的TIME_WAIT状态的TCP连接如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,vim /etc/sysctl.conf编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_..._centos连接不释放

[附源码]JAVA毕业设计家政服务网站(系统+LW)_家政服务网站毕设-程序员宅基地

文章浏览阅读233次。[附源码]JAVA毕业设计家政服务网站(系统+LW)目运行环境项配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:JAVA + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,E_家政服务网站毕设