Xilinx FPGA 内部结构深入分析(2)

2018-12-04 22:12

这些基本电源稳定了才能实现上电复位,芯片才能进入配置状态。

其次,IO高阻上拉,切断外部接口。

HSWAP管脚被施加一个低电平。注意,这个低电平会维持到配置结束。 这个低电平的作用是将用户IO全部上拉。

我想这样做的目的是令所有IO进入确定状态,避免对配置操作的干扰。

最后,全局复位,切断边缘存储通道。

FPGA内部设置“全局置位复位”,异步方式将所有IOB存储单元清零 - 配置阶段

首先,确定配置模式。

INIT_B 高电平,并抽样M0,M1,M2的值,据此确定配置模式。

然后,下载数据到FPGA。

注意,整个配置期间,IO继续保持高阻上拉状态。

最后,释放GSR。

释放全局GSR,IOB寄存器回到默认的Low状态,

除非设计中改变了SR输入的极性,否则都是Low状态。

- Design Operation阶段

首先,全局三态释放,打通外部接口。

GTS释放,令所有IO都进入活跃状态,未使用的 IO则被弱下拉。

通过在BitGen中设置属性,可以修改GTS释放后未使用IO的状态设置,比如上拉、下拉、悬空。

其次, 全局写使能,打通内部存储通道。 在一个时钟后,GWE全局写使能被释放。

这样RAM和寄存器就都可以写入了,也就是设计可以动作起来了。

注意,在该阶段HSWAP释放,所以他也可以被用作普通的GPIO。

【上面的这个内容是写到现在最重要的一部分,对于理解整个FPGA的启动过程非常有帮助。】

CLB概览

CLB是可配置逻辑块的简称。

这是FPGA整个矩形配置结构中的基本单元。 1CLB = 2X2 Slice

1Slice = 2 (LUT+FF) + 其他运算、进位、MUX资源

每个CLB都是相同的,所以知道一个就知道了全部。接下来重点研究CLB。

Slice

上面讲到了一个CLB有2*2个Slice。

这个4个slice可以分成左右两对,我们来看他们的主要区别。

左边的是SLICE-M,带有存储增强功能(分布式存储器,移位寄存器等)。 右边的是SLICE-L,没有存储增强功能。

那么为什么左右不一样呢?

我认为,提供SLICE-M的目的就是为了让通用FPGA能够对存储应用有更多支持。 那为什么右边的没有存储增强呢?

最重要的原因是减小CLB右侧的面积,从而降低整个芯片的价格成本。 同时,纯粹的logic设计可以提供比混杂设计的SLICE-M更优的性能。

Logic Cell 的概念

经常有人混淆CLB和LC的概念。这里就给大家澄清一下。

CLB就不用讲了,就是上面说到的2*2 slice阵列构成的可配置逻辑块。

LC则比CLB要小多了。如果给个公式就是: Logic Cell = 1LUT + 1FF (存储单元)

那么一个Slice 等价于多少LC呢?

看到后面的内容你会知道,一个Slice 里面有两个LUT和两个FF,但是除此之外,还有一些运算增强单元。

所以Xilinx给出的S3E的slice等价LC个数为: 2.25

Slice 结构概览 终于讲到Slice了。

这个是研究FPGA的重中之重。

接下来要分成若干小点分别讲述,如果要观察全部结构则最好参考14页的图12.

这个图是Slice-M的结构图,注意里面的虚线部分是SliceM专有结构,在slice-L中并不存在。

通过比较,SliceL的结构也就非常清晰了。

逻辑通路与bypass通路

一个slice可以简单分成上下两部分,两部分的结构基本一致,有着近乎相同的元素。 下半部分一般冠以前缀或者后缀“F”,上半部分则冠以前缀或者后缀“G”。

现在以F为例,来研究一下主要的数据通路。参考的图片主要还是14页的图12,这个图太经典了。

先来说明一下逻辑路径,这个路径必然经过LUT,否则就不能成为逻辑路径,而只能成为旁路路径。

总结一下,主要的逻辑路径是5个:

1. 从LUT输出后,再通过X口,离开CLB

2. 从LUT输出后再经过XOR运算(加法或乘法应用),再通过X口,离开CLB 3. 从LUT输出后再经过F5MUX(等价于LUT-5扩展),在通过X口或者F5,离开CLB 4. 上述三种情况中,不从X口输出,而是经由FF输出,通过XQ,离开CLB 5. 从LUT输出后再经过CYMUX,参与到加法运算的进位链中

大家有兴趣的话,可以自己用笔标示一下这些通路,非常清晰。 如果要记忆的话,其实也很简单,

一是逻辑运算后的直接输出和寄存器输出; 二是加法、乘法的直接输出和寄存器输出;

三是LUT4到LUT5甚至更多级的运算扩展输出。

资料中还提到了旁路bypass通路,这个通路的特点是必然不经过LUT,所以称为旁路。 旁路的应用比较多,但是为了集中精力,这里不再展开,大家自己研究吧。

LUT 查找表

LUT就是 lookup table的简称,可以称为查找表。

因为一个逻辑运算的与非门实现和ROM形式的查找表实现是完全等价的,这个在数电知识里学过的。

在FPGA中,逻辑电路的实现,主要就是依靠LUT。

当然在SliceM中,LUT的能力更强,可以被配置成为 Distributed RAM 或者 16位移位寄存器。

此外,在Spartan3E中,所有的LUT都是LUT-4也就是4输入的,但是他们可以扩展为LUT-5/6/7/8,方法就是我们接下来要介绍的wide MUX

Wide Multiplexers——构造高阶LUTi的神兵利器 有了LUT4,如何实现LUT5? 这个问题的答案其实很简答。

对于4位输入的逻辑可以用LUT实现,那么对于一个5位输入的实现,就可以这样来做。 首先假设第5比特为0,在这个前提下,5位逻辑就变成了4位逻辑,用一个LUT4(F)实现。

然后假设第5比特为1,在这个前提下,5位逻辑也变成了4位逻辑,用另一个LUT4(G)实现。

最后,我们把这两个LUT4的输出值用一个MUX连接,当第5比特为0,我们就选通F,为1则选通G。

这样通过整合两个LUT4和一个MUX,另外用第5比特作为选通信号,我们得到了一个等价的LUT5。

循环使用上述方法,我们可以进一步得到LUT-6/7/8....

可以发现这里非常重要的一个资源就是MUX,Spartan3E称为wide multiplexer。 在一个Slice中,下半部分只提供F5MUX,也就是用于构造LUT5的MUX。

而在上半部分中则没有F5MUX,因为一个slice刚好两个LUT4,有一个F5MUX就够了。 但是上半部分提供了一个FiMUX,这个i可以是6、7、8。

这样,上半部的FiMUX就为扩展更大规模的LUT-i提供了物质基础。

如果要细究一下哪些slice提供F6/7/8 MUX,可以这样来归纳。 一个CLB中的下面两个slice,只能提供F6MUX。

上面的两个slice中,SliceM提供F7MUX,SliceL提供F8MUX。

另外,LUT作为4比特逻辑能够实现2:1MUX功能,因此借助wide MUX可以实现更高阶的MUX。

最后重点关注一下F5MUX中提高性能的一个细节。

F5MUX的选通输出,如果要构造LUT-6,就可以直接将输出绕回本Slice的F6MUX。 为此,F5MUX特意创建了两个输出口,一个输出到CLB外,一个则利用本地反馈电路快速绕回到FiMUX进行级联。

进位与算术逻辑

这是Slice结构部分的高阶知识。

Slice的主角是LUT,他有个缺陷,就是比较适合完成普通的逻辑设计,也就是单比特输出的运算。

但是在设计中,大量用到算术逻辑,最常见的就是乘法和加法,这些运算的特点就是多个输出。

比如带进位的1比特加法运算,结果有两个比特,一个是部分和,一个是进位。

如果用LUT来实现的话,这么一个简单的运算都至少需要两个LUT来完成,非常浪费。 为了避免这种浪费,Xilinx想出了妙计,就是在Slice中添加几个简单的XOR和AND门。 这些门数量极少,但是画龙点睛,把算术逻辑激活了。

比如上面的单比特加法,只使用一个LUT,然后搭配简单的几个门就搞定了,大大节省资源。

我们看以参考经典的图12和图20、21,我们发现,支持算术逻辑的单元并不多。 在slice的上下两侧各有这样一套资源。

每套资源都是一个三元组:{AND、XOR、CYMUX}。

结合图20、21,我们可以领悟到,这些资源其实就是为了实现“部分和”运算和“部分积”运算而实现的。

从而构造出一个完整的、高效的算术逻辑运算通道。

对于加法和乘法,产生部分和以及部分积是在横向完成的,并且没有积累,所以时序上没有问题。

但是进位链由于具有累积效应,因此必须有专门的针对性设计。

我们可以看到Spartan3E里面就有这样的一条进位链自下往上,通过一堆级联的MUX快速

输出。

这个就是Xilinx的进位链优化电路。 赞!

存储单元

存储单元是通用的设计,可以配置成为FF,也可以配置成为Latch。 关于两者的差异,请自己查阅手册。

基本上存储单元的输入数据来自两个部分: 1. LUT组合逻辑输出; 2. 旁路数据

一个存储单元有12个输入输出口,当然配置在不同的类型下,会使用到不同的接口。 D-Q 是输入输出数据信号,我给他列成一对; C-CE 是时钟和时钟使能,也是一对;

G-GE 是配置为latch时的门和门使能信号,又是一对;

S-R 是同步set/reset信号,两者取反,所以等效于一个信号;

PRE-CLR 是异步set/reset信号,两者取反,所以等效于一个信号; SR-REV 和S-R以及PRE-CLR是一个系列,只不过他们是CLB的输入信号,在Slice内部,他们化身成了S-R以及PRE-CLR。

注意SR是一个通用用法,你可以通过SRLOW和SRHIGH属性来将其设置为SET用途还是Reset用途。

提一下REV,这个信号和SR同时作用,当他有效时,set/reset的值就取反。 感觉很全面,不过又感觉好无聊,尽整一些没用的东西。

分布式存储 Distributed RAM

一个SliceM LUT 存储16位数据 (RAM 16)。

通过多个LUT的组合,可以对宽度和深度进行扩展,比如 16x4,32x2,64x1。

要提高地址空间就需要有地址线的扩展,LUT4只接收4位地址,扩展的地址由BX、BY两个旁路信号提供。

有了这两个信号,地址就是6位的,深度就是64。

写操作是同步的,也就是和写时钟(SliceM的CLK)同步。 读操作则是异步的,随时反映当前读地址的内容。

接下来重点研究一下SliceM如何构造dual port RAM。这个非常巧妙。 建议大家对照图12、23进行研究。

注意SliceM中上面的LUT可以同时读写,而下面的是只读的。

这和dual port的定义有关,dual port是一侧只读、一侧只写,所以有一个LUT完全可以只读,来减小控制逻辑。

由于在逻辑上只有一个存储空间,所以两块LUT的内容必须一致。


Xilinx FPGA 内部结构深入分析(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:部编版版一年级下册道德与法治《家人的爱》说课稿

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: