关键词不能为空

当前您在: 主页 > 英语 >

Xilinx FPGA 内部结构深入分析

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-02 20:54
tags:

-

2021年3月2日发(作者:刷子)


Xilinx FPGA


内部结构深入分析




作者



:< /p>


fpga001




论坛



:芯片动力(

< br>SocVista





网页地址




/bbs/?tid=3443&extra=page%3D2&page=7



发表时间




2009.12



IOB


的结构



请大家看到手册的第


1


页,这是


IO B



review


部分。




IO block


是 高手的领地,一般接触


FPGA


第一年都不会太关心到这个部分 。




注意看,


IOB


有三个数据通道:输入、输出、三态控制。



每个通道都有一对存储器件,他们可以当做寄存器或者锁存起来使用,视乎你的设置。

< p>


输入通道有可编程的延迟模块,


可以确保


hold time


为零。


(这是在什么场合 使用?请达人补


充!




另外可以看到输入输出通道都有完备的


DDR


支持, 这个在后面可以看到。



所有图都请参考


PDF


原文,这里就不再粘贴了。





可编程输入延迟


< br>看到手册第


3


页,这个像两根鱼骨似的构造就是输入延迟 了。




输入延迟一共


16


节,每节


250ps


,所 以总共的延迟在


0~4ns


之间。


< /p>


这个鱼骨的构造非常巧妙,前面


8


节直接 级联,只有一个输出。



这样


8


节以内的调整就跳过这根长鱼骨;


而超过


8< /p>


节的调整就直接利用第一根鱼骨,


然后在


后面的


8


节中进行微调。




调整的输出分别供给


IOB


中的异步和同步单元,异步就是直接穿过


IOB


,同步则是经由存


储单元流出


IOB




异步单元精度较高,可以单节调整,所以精度为


250ps




同步单元精 度稍低,两个节为单位调整,所以精度只有


500ps




上述内容看图便知





可编程输入延迟的设置



输入延迟的设 置只能在


Image


配置的时候建立,在设备工作期间无法改变 。



我想有两种方法可以改变输入延迟的设置:



1.


通过延迟原语在代码中设置;



2.


通过


FPGA editor< /p>



P&R


完成后在


ngc


文件中修改。





存储单元



存储单元可以配置为


D


触发器,就是我们常说的


FF



Xilinx


称之为< /p>


FD




也可以 配置为锁存器,


Xilinx


称之为


L D





输出 和三态通路各有一对寄存器外加一个


MUX


< br>


利用这种


2+1


的组合可以产 生


DDR


操作,


Xilinx


称之为


ODDR2





每个存储单元都有


6


个接口信号:



时钟


+


时钟时能,数据输入


+


输出,置位复位


+


翻转输入




除了这些信号,存储单元还有一些属性设置:



- FF/Latch


可以用来配置存储单元的类型;



- Sync/Async


配置置位复位的方式;



- SRHIGH/SRLOW


配置是置位


(1)


还是复位


(0)




INIT1/INIT0


配置置位复位的初始值,一般置位< /p>


(1)


复位


(0)






DDR


支持



输入、输出、三态。这三个


IOB


通道都可以实现


DDR


支持。




输出和三态通道可以实现


ODDR2


原语,这个 原语的实现原理可以参考


p5


的图


3.


两个相差


180


度的时钟和两路信号进 入一对寄存器并通过


DDR


专用


MUX


输出,即可得到


DDR


数据输出。



实现相差


180


度,有两种方法。



一种是通过


DCM


直接产生这两个信号。



另外的方法是 同一时钟,但是连入寄存器的时钟端口时,一路取反。




输入通道则实现



IDDR2


原语。


< br>如果输出、三态通路实现的是


DDR


的调制的话,这一路 其实就是


DDR


的解调,也就是


1


分为


2




当然,这里需要提供两路相差


180


度的时钟 。




另外


O DDR2


还有一个重要用途,就是用于产生随路时钟。



只要把两路数据固定为


1


< br>0


,这样产生的


DDR


数据其实 就是


0/1


交叉的时钟信号了,这


个一 想就明白了吧。



这样做的好处是:数据和时钟都经过


IOB


寄存器处理,具有相同的延迟特性,从而实现了

< br>所谓的


源同步






级联


”< /p>


重定时特性


——


提高

DDR


的性能




IDDR2



ODDR2


的典 型实现(图


4



6

)中,存在一个问题


....




IDDR2


为例,



我们可以发现,在经典实现中,输出的两路数据分别与时钟的两个边沿对齐。



但是,强调一下,后端的系统中往往只有一个时钟,工作在上升沿。


那么对于下降沿对齐输出的数据,


从下降沿开始到上升沿 被采样,


只有半个时钟的余量来稳


定输出并满足


setup




由于


FPGA


系统比较复杂从


IOB


出来的数据要进入到下一个存储单元可能会经历非常漫长


的逻辑和路由延迟。< /p>



要在半个时钟内完成,有很大的挑战性,尤其是在高速系统中, 往往有很大的困难。




Sparta n3E


的解决办法是,


利用相邻从属


I OB


的存储单元


,对下降沿输出的数据马上做一次


上升沿抽样。



由于两个


I OB


相邻,不存在复杂的逻辑和路由延迟,因此虽然余量也是半个时钟,但一般


情况下甚至高速系统下也可以成功实现。



这样数据就回到了上升沿时钟域。



到 了上升沿时钟域,则数据有一个时钟的时间余量,处理起来就和普通的情况一样了。




以上是关于


IDDR2


的讨论,对于


ODDR2


有着类似的情况,大家可以 自己理解一下。参考



6


< p>
7


即可。




想到一个资源守恒的公理,就是自然界普遍存在的


trade off


现象。



如果添加一个寄存器 抽样,


则系统负担降低;


反之如果想少使用资源,


不使用这个抽样寄存


器,则全系统的负担会提高。



这个例子告诉我们两个道理



1. trade off


普遍存在



2.


四两可以拨千斤





SelectIO


信号标准



S3E

可以支持很多接口信号标准,比如最常见的



LVTTL< /p>



LVCMOS


系列、

< br>PCI


系列。



此外,还支持差 分信号标准,典型的比如


LVDS


系列。




要实现指定的信号标准有两个必要条件:



1.


内在设置:在


UCF

< p>
文件中对指定


pin


设置


IOSTANDARD


属性,这样


FPGA

会自动切换


指定


IOB


的信号标准 ;



2.


外在设置:每个信号标准都 要求指定的


Vcco


(有些还要求指定的


Vref



,因此要在


PCB


板上提供相应的


Vcco


支持。




再来说说差分信号,


他 的优点是差分信号固有的噪声消除特性来提高数据的可靠性,


从而提

高单路数据的传输速率。



差分信号的命名有套规则,比如:



I O_L43P_3



IO_L43N_3


就表示



Bank3


里面第


43


对差分线的正负两根线。





差分信号的


termination


差分信号一般传输速率较高,因此对信号的完整性有严格要求。



方法之一就是使用


termination

来防止信号反射。



为了减少用户的外部负担,

< p>
S3E


实现了内部的差分


termination




使用方法就是在

< br>UCF


中加入下列语句。




INST


DIFF_TERM =




上拉下拉电阻



pullup



pulldown


的主要目的就是将悬空的管 脚引导到确定的状态,避免未知的干扰。



所以在悬空的管脚, 确定输入的管脚以及三态管脚上用的比较多。



要修改管脚的< /p>


pullup



pulldown



float


属性,


可以在


BitGen


的时候从


Gen erate Programming


File


的属性中选择





保持电路



三态信号在没有驱动的时候悬空,


为了防止悬空,


有一个保持电路可以帮助信号保持在前一


逻辑状态。



具体使用方法



-


使用



KEEPER


属性



-


使用



KEEPER


库原语




注 意,


如果使用了上下拉电阻,


则该属性被重置,


因为实现的功能是类似的。差异是上下拉


将悬空信号拉回确定值,而

< p>
KEEPER


是保持回前一逻辑值。





电平转换速率



SlewRate < /p>


SlewRate


用于设置


IOB


输出电平的切换速率。



速率太低则很多接口 时序得不到保障,因此有时候需要使用高速的切换速率。



实现 的方法就是加大驱动电流,从


2mA



16mA


,每


2mA


有一个选择。



电流越大,当然驱动能力越强,相应的电平切换速率也更快。




但是高速的切换会导致


PCB


电路的传输线效应,所以只要能满足应用,尽量采用低速的


SlewR ate





Bank


内的


IOB


组织



S3E


的四边各有一个


IOB



BanK




每个


Bank


可以有自己独立的


Vcco



Vref


,所以一般的,每个


bank


可以有自己独立的电平

< p>
标准。



有些电平标准有相同的

< br>Vcco


,则在该


Bank


内可 以支持多个电平标准。




对于差分信 号,每个


Bank


都可以支持下面三个差分标准中的任意两个< /p>



- LVDS_25


- MINI_LVDS_25


- RSDS_25


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





Bank


内部电平标准的规则



Vcco


规则:



-


所有


Vcco

必须连接,即使不使用某个


bank



-


同属于某个


Bank


的所有


Vcco


必须设置为相同的电平



-


所有


Vcco


必须和指定的电平标准电压相符



-


如果某个


bank


没有指定电平标准, 则将其连接到任意电平,比如


2.5


或者


3.3V



Vref


规则:


(前提是该电平标准要求使用


Vref




-


所有


Vre f


必须连接,即使不使用某个


bank




-


同属于某个

< br>Bank


的所有


Vref


必须设 置为相同的电平



-


所有

< p>
Vref


必须和指定的电平标准电压相符




如果某个


bank

< br>对应的电平标准不需要


Vref


来偏置输入切换门限,< /p>


则该


Vref


管脚可以用做用

< p>


IO


或者输入管脚。





专用的输入管脚



专用输入管脚一般用


IP_Lxxx_x


表示。



对于专用输入管脚,没有差分


termination






静电保护



在每个


IO


上都有静电保护,大家看文 档的图


1


就明白了。




pad-->Vcco


之间有


P-N


偏置保护。




pad-->GND


之间有


N-P

< br>偏置保护。



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





IOB


的电源支持



Vcco


用于对驱动输出的支持。



Vccint


用于驱动内部逻辑。


< /p>


Vccaux


是辅助电源,用于优化


FP GA


性能(这个谁有补充?)





在上电、配置、用户模式下,


IO< /p>


的行为分析



-


上电状态




首先,电源稳定。



Vcco



Vccint



Vc caux


作为内部



上电复位电路< /p>



的必要电源输入,必须达到稳定状态。



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




其次,


IO

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



HSW


AP


管脚被施加一个低电平。注意,这个低电平会维持到配置结束。

< br>


这个低电平的作用是将用户


IO


全部上拉。



我想这样做的目的是令所有

IO


进入确定状态,避免对配置操作的干扰。




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



FPGA


内部设置



全局置位复位< /p>



,异步方式将所有


IOB


存储单元清零



-


配置阶段




首先,确定配置模式




INIT_B


高电平,并抽样


M0, M1,M2


的值,据此确定配置模式。




然后,下载数据到


FPGA




注意,整个配置期间,

IO


继续保持高阻上拉状态。




最后,释放


GSR


< br>


释放全局


GSR


< p>
IOB


寄存器回到默认的


Low

< br>状态,



除非设计中改变了


SR


输入的极性,否则都是


Low


状态。< /p>




- Design Operation


阶段




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



GTS


释放,令所有


IO


都进入活跃 状态,未使用的



IO


则被弱下拉。


< br>通过在


BitGen


中设置属性,可以修改


GTS


释放后未使用


IO


的 状态设置,比如上拉、下拉、


悬空。




其次,



全局写使能,打通内部存储通道。



在 一个时钟后,


GWE


全局写使能被释放。



这样


RAM


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




注意,在该阶段


HSW


AP


释放,所以 他也可以被用作普通的


GPIO



< /p>


【上面的这个内容是写到现在最重要的一部分,对于理解整个


FP GA


的启动过程非常有帮助。






CLB


概览



CLB


是可配置逻辑块的简称。



这是


FPGA


整个矩形配置结构中的基本单 元。



1CLB = 2X2 Slice


1Slice = 2 (LUT+FF) +


其他运算、 进位、


MUX


资源


< br>每个


CLB


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


CLB






Slice

上面讲到了一个


CLB



2*2< /p>



Slice




这个


4



sl ice


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



左边的是


SLICE-M


,带有存储增强功能 (分布式存储器,移位寄存器等)




右边的是


SLICE-L


,没有存储增强功能。




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



我认为, 提供


SLICE-M


的目的就是为了让通用

FPGA


能够对存储应用有更多支持。



那为什么右边的没有存储增强呢?



最 重要的原因是减小


CLB


右侧的面积,从而降低整个芯片的价格 成本。



同时,纯粹的


logic


设计可以提供比混杂设计的


SLICE-M


更优的性能。





Logic Cell


的概念



经常有人混淆


CLB


LC


的概念。这里就给大家澄清一下。


< br>CLB


就不用讲了,就是上面说到的


2*2 slice


阵列构成的可配置逻辑块。




LC


则比


C LB


要小多了。如果给个公式就是:



Logic Cell = 1LUT + 1FF


(存储单元)




那么一个


Slice


等价于多少


LC


呢?



看到后面的内容你会知道,一个


Slice

< br>里面有两个


LUT


和两个


FF< /p>


,但是除此之外,还有一


些运算增强单元。



所以


Xilinx


给出的


S3E



slice


等 价


LC


个数为:



2.25




Slice


结构概览



终于讲到


Slice


了。



这个是研究


FPGA


的重中之重。



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


14


页的图


12.

< br>这个图是


Slice-M


的结构图,注意里面的虚线部分 是


SliceM


专有结构,在


slic e-L


中并不存


在。



通过比较,


SliceL


的结构也就非常清晰了。





逻辑通路与


bypass


通路


< br>一个


slice


可以简单分成上下两部分,两部分的结构 基本一致,有着近乎相同的元素。



下半部分一般冠以前缀或者 后缀


“F”


,上半部分则冠以前缀或者后缀

“G”




现在以


F


为例,来研究一下主要的数据通路。参考的图片主要还是

14


页的图


12


,这个图太


经典了。




先来说 明一下逻辑路径,这个路径必然经过


LUT


,否则就不能成为逻 辑路径,而只能成为


旁路路径。



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


5


个:



1.



LUT


输出后,再通过


X


口,离开


CLB


2.



LUT


输出后再经过


XOR


运算(加法或乘法应用)


,再通过


X


口,离开


CLB


3.



LUT


输出后再经过


F5MUX


(等价于


L UT-5


扩展)


,在通过


X

< p>
口或者


F5


,离开


CLB


4.


上述三种情况中,不从


X


口输出,而是经由


FF


输出,通过

< p>
XQ


,离开


CLB


5.



LUT


输出后再经过


CYMUX


,参与到加法运算的进位链中




大家有兴趣的话,可以自己用笔标示一下这些通路,非常清晰。



如果要记忆的话,其实也很简单,



一是逻辑运算后的直接输出和寄存器输出;



二是加法、乘法的直接输出和寄存器输出;


< br>三是


LUT4



LUT5


甚至更多级的运算扩展输出。



< p>
资料中还提到了旁路


bypass


通路,这个通路 的特点是必然不经过


LUT


,所以称为旁路。

< br>


旁路的应用比较多,但是为了集中精力,这里不再展开,大家自己研究吧。





LUT


查找表



LUT


就是



lookup table


的简称,可以称为查找表。



因为一个逻辑运算的与非门实现和


ROM


形式的查找表实现是 完全等价的,


这个在数电知识


里学过的。




FPGA


中,逻辑电路的实现, 主要就是依靠


LUT





当然在


SliceM


中,


LUT


的能力更强,可以被配置成为



Distributed


RAM


或者



16


位 移位寄


存器。



此外,在


Spartan3E


中,所有的

< br>LUT


都是


LUT-4


也就是< /p>


4


输入的,但是他们可以扩展为


LUT- 5/6/7/8


,方法就是我们接下来要介绍的


wide MUX




Wide Multip lexers


——


构造高阶


LUTi< /p>


的神兵利器



有了


LUT4


,如何实现


LUT5




这个问题的答案其实很简答。




对于


4


位输 入的逻辑可以用


LUT


实现,那么对于一个

5


位输入的实现,就可以这样来做。


首先假设第


5


比特为


0

< p>
,在这个前提下,


5


位逻辑就变成了


4


位逻辑,用一个


LUT4



F


)实


现。



然后假设第


5


比特为

< br>1


,在这个前提下,


5


位逻辑也 变成了


4


位逻辑,用另一个


LUT4< /p>



G



实现。< /p>



最后,我们把这两个


LUT4


的输出值用一个


MUX


连接,当第


5


比特为


0


,我们就选通< /p>


F




1


则选通


G




这样通过整合两个


LUT4


和一个

< p>
MUX


,另外用第


5


比特 作为选通信号,我们得到了一个等


价的


LUT5




循环使用上述方法,我们可以进一步得到


LUT-6/7/8....

-


-


-


-


-


-


-


-



本文更新与2021-03-02 20:54,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/693062.html

Xilinx FPGA 内部结构深入分析的相关文章