Xilinx FPGA 内部结构深入分析 下载本文

- MINI_LVDS_25 - RSDS_25

但是不能做到同时支持这三个标准

Bank内部电平标准的规则 Vcco规则:

- 所有Vcco必须连接,即使不使用某个bank;

- 同属于某个Bank的所有Vcco必须设置为相同的电平 - 所有Vcco必须和指定的电平标准电压相符

- 如果某个bank没有指定电平标准,则将其连接到任意电平,比如2.5或者3.3V

Vref规则:(前提是该电平标准要求使用Vref) - 所有Vref必须连接,即使不使用某个bank;

- 同属于某个Bank的所有Vref必须设置为相同的电平 - 所有Vref必须和指定的电平标准电压相符

如果某个bank对应的电平标准不需要Vref来偏置输入切换门限,则该Vref管脚可以用做用户IO或者输入管脚。

专用的输入管脚

专用输入管脚一般用IP_Lxxx_x 表示。 对于专用输入管脚,没有差分termination。

静电保护

在每个IO上都有静电保护,大家看文档的图1就明白了。 在pad-->Vcco之间有P-N偏置保护。 在pad-->GND之间有N-P偏置保护。

在静电过大的时候,通过这两个保护二极管可以直接将电流泄洪到电源与地

IOB的电源支持

Vcco用于对驱动输出的支持。 Vccint用于驱动内部逻辑。

Vccaux是辅助电源,用于优化FPGA性能(这个谁有补充?)

在上电、配置、用户模式下,IO的行为分析 - 上电状态

首先,电源稳定。

Vcco、Vccint、Vccaux 作为内部“上电复位电路”的必要电源输入,必须达到稳定状态。

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

其次,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....