目录
简介
Clock Region详解
MRCC和SRCC的区别
BUFGs
时钟资源总结
简介
7系列FPGA的时钟结构图:
Clock Region:时钟区域,下图中有6个时钟区域,用不同的颜色加以区分出来
Clock Backbone:从名字也能看出来,这个一个纵向贯穿整个FPGA的时钟资源,把FPGA的clock region分成了两个部分,所有的全局时钟都要从这经过。可以看到BUFG都在Clock Backbone上。Clocking Center就是Backbone中间的分割线。
Horizontal Center:水平分割线,将FPGA的BUFG分割成上下相等的两部分,像下图中,上下各有16个BUFG。需要注意的是,BUFG不属于任何的clock region,并且BUFG可以到底FPGA的任一个时钟角落。
HROW:Horizontal Clock Row, 将每一个clock region分成上下两部分,全局时钟进入每个clock region时,需要要经过HROW,有点类似于Clock Backbone在FPGA中的作用。
CMT Backbone:Clock Backbone是整个FPGA的Backbone,是很珍贵的资源,而如果是上下相邻的clock region,可以通过CMT Backbone互连。
CMT Column:每个Cloumn包含一个MMCM和一个PLL。
GT Column:高速收发器的column。
有同学可能有疑惑,为什么要分Clock Region,用一个Clock Region不是更简单么?
答:为了适用更多的时钟,假如没有Clock Region,那就全部是Global Clock,如果有16个时钟网络,那最多就支持16个时钟。而分成了Clock Region后,如果该区域的时钟资源恰好可以布局到对应的region,则只使用该region的时钟网络资源。也就是说,如果有16个时钟网络资源,那么极限情况下,两个region就可以使用32个时钟。
Clock Region详解
7系列FPGA的Clock Region的结构图:
首先我们来明确几个Buffer的含义(我们后面会有一篇文章专门来讲这几个buffer)
BUFG:Global Clock Buffer
BUFH:Horizontal Clock Buffer,可驱动左右相邻的两个Region
BUFR:Regional Clock Buffer,从名字就可以看出来,只能驱动当前Region
BUFIO:I/O Buffer,位于IO BANK中,只能用于驱动IO
BUFMR:Multi-Clock Region Buffer,它可以驱动本BANK和上下相邻BANK的BUFIO和BUFR,起到了扩展连接的作用
CC:Clock Capable
下图是Clock Region更详细的内部结构图:
可以看到:
每个IO BANK的4个cc管脚可以驱动CMT中的PLL/MMCM,也可以驱动BUFH;
HROW中有12个routing track,BUFG和BUFH共享12个track;
GT Quad有10个专门的track用于驱动CMT和Clock Backbone中的BUFFER;
BUFR有4个track驱动逻辑资源、CMT和BUFG;
CMT在一定条件下可以通过CMT Backbone驱动上下相邻的CMT;
一个Region中的时钟资源可以驱动本Region或者水平临近Region的时钟BUFFER;
CMT、CC管脚和GT时钟可以通过BUFH来驱动左右相邻Region
下图是BUFR/BUFMR/BUFIO的详细结构图:
可以看出:
每个IO BANK都含有4个BUFIO和BUFR;
Clock Buffer都可以被CC管脚或者MMCM来驱动;
图中可以看到CC又分了MRCC和SRCC,从MMCM输出到BUFR和BUFIO之间有一条专门的高性能差分路径;并且,不是所有的7系列FPGA的时钟结构都像上面的图中所画,比如包含不同数量的GT可能会导致时钟结构位置不太一样,但这并不妨碍上面这些图对7系列FPGA时钟结构的说明。
MRCC和SRCC的区别
只有7系列的FPGA中才有MRCC和SRCC的说法,到了UltraScale系列,都是叫GC。
根据前面的解释,MRCC就是Multi Region的CC,从该管脚输入的时钟可以access到不同的Clock Region,而SRCC就是Single Region的CC,从该管脚输入的时钟只能access当前Clock Region。
所以有同学就会觉得,如果想使用全局时钟,就必须将时钟接到MRCC,而不能是SRCC。但这种理解是错误的,下面我们会详细解释。
手册中对MRCC驱动多个Clock Region的说明如下:
MRCCs can access multiple clock regions and the global clock tree. MRCCs function the same as SRCCs and can additionally drive multi-clock region buffers (BUFMR) to access up to three clock region.
MRCC通过BUFMR来access最多三个clock region,从下面的图也可以看出,已经用红色的线将MRCC的路径都标出来,可以看到,MRCC通过了BUFMR到达了CMT Backbone,然后就可以access其他的Clock Region了。
从上面这个图可以看出,MRCC可以直接驱动BUFR和BUFIO,也可以先经过BUFMR后再驱动BUFIO和BUFR。
SRCC的路径在下面的图中用红色的线标识出来,可看到,它的路径只在当前的Clock Region里面。
An MRCC pin pair can drive a specific BUFMR, which in turn can drive BUFIOs and BUFRs in the same and adjacent regions facilitating multi-region/BANK interfaces. Similarly, a GT quad can also drive the BUFMRs
下面这个表格解释的就更加清晰了,MRCC和SRCC都是由外部的时钟驱动,而且MRCC和SRCC的区别就在于MRCC可以驱动BUFMR,SRCC不行。其他基本都一样,它们都可以驱动四个BUFIO、四个BUFR、一个CMT、上下相邻的CMT、16个BUFG和BUFH。
其中有一点很关键,就是它们都可以驱动BUFG和BUFH,这就意味着,从MRCC和SRCC进来的时钟都可以access全局时钟树,也就都可以当做全局时钟。
Clock-capable inputs are organized as 2 MRCC and 2 SRCC pairs in each I/O BANK. SRCCs access a single clock region and the global clock tree, as well as other CMTs above and below in the same column. SRCCs can drive:
• Regional clocks lines (BUFR, BUFH, BUFIO) within the same clock region
• CMTs in the same clock region and adjacent clock regions.
• Global clocks lines (BUFG) in the same top/bottom half of the device.
MRCCs can access multiple clock regions and the global clock tree. MRCCs function the same as SRCCs and can additionally drive multi-clock region buffers (BUFMR) to access up to three clock regions.
所以,SRCC进来的时钟,虽然不能直接驱动其他Clock Region,但接到BUFG上之后,仍然可以通过BUFG来驱动其他的Clock Region。
MRCCs that are located in the same clock region and on the same left/right side of the device drive:
同一个Clock Region里的MRCC可以驱动下面那些模块,那为什么区分the same left/right side呢?因为FPGA里面有个纵向的Clock Backbone,以这个为间隔分成了左右两部分,所有的全局时钟都在这个Clock Backbone里面。
这个表里面还提到一句:
MRCCs within the same half top/bottom drive:
BUFGs
这里为什么又要求是上下了呢?这个问题的答案还是在第一篇文章,FPGA里面有个Horizontal Center,将FPGA的BUFG分割成上下相等的两部分,上下各有16个BUFG。
时钟资源总结
Virtex-5带GC的引脚为全局时钟,CC为局部时钟,Kinkex-7的全局时钟为MRCC,SRCC为局部时钟,并且MRCC和SRCC的区别是BUFIO部分,MRCC可以采样包括自己和相邻BANK在内的3个BANK的,SRCC用BUFIO的时候只能采样自己的BANK,但是这两个都可以接到BUFG来使用。