1.原语
大型设计一般推荐使用同步时序电路。同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时和抖动提出了更高的要求. 为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟.
FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小.
全局时钟资源必须满足的重要原则是:当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。
为了适应复杂设计的需要,Xilinx的FPGA中集成的专用时钟资源与数字延迟锁相环(DLL)的数目不断增加, 与全局时钟资源相关的原语常用的包括:
BUFG、IBUFG、IBUFGDS、BUFGP、BUFGCE、BUFGMUX、DCM等;
1.BUFG、BUFR、BUFH
理解:BUFG是全局时钟网络了,它可以驱动所有的IO和逻辑,并且可以被Transceiver所驱动。
BUFR是区域时钟缓冲器,要进入区域时钟网络,必须例化BUFR,BUFR相比BUFG的最大优势是skew和功耗都比较小
BUFH即为水平时钟缓冲器,它相当于一个功能受限的BUFG,其输出时钟只能通过HROW在左右相邻的时钟区域内工作。
2.IBUFG
理解:从板子上给的输入时钟,必须分配在全局时钟输入管脚上,而且要经过IBUFG单元进行缓冲,IBUFG与IBUF区别:IBUFG可以认为是IBUF后接了一个BUFG。
3.IBUFGDS
理解:IBUFDS差分转单端后进BUFG(整体叫IBUFGDS),再进PLL/DCM。
4.BUFGP
理解:BUFGP=IBUFG+BUFG,最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法
5.BUFGCE
理解:带有时钟使能端(CE)的全局缓冲
6.BUFGMUX
理解:带有时钟选择(控制端口S)的全局缓冲
7.DCM
理解:数字时钟管理单元
使用方法:
1.IBUFG+BUFG=BUFGP
2.IBUFG+ BUFG + DCM 的使用方法
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。
3.Logic + BUFG
BUFG不但可以驱动IBUFG的输出,还可以驱动其它普通信号的输出。当某个信号(时钟、使能、快速路径)的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。但需要注意的是,普通IO和普通片内信号从输入到BUFG输出有一个约10ns左右的固有延时,但是BUFG的输出到片内所有单元(IOB、CLB、选择性块RAM)的延时可以忽略不计为“0”ns。
4.Logic + DCM + BUFG的使用方法:
DCM可以是普通信号的输入
//LVDS_25标准的差分输入ADC数据
IBUFDS#(
.DIFF_TERM("TRUE"),
.IOSTANDARD("LVDS_25")
)IBUFDS_ADC(
.O(ADC_D[i]),
.I(ADC_P_D[i]),
.IB(ADC_N_D[i])
);
//差分输入芯片输入100M时钟,作为FPGA的全局时钟
IBUFGDS #(
.DIFF_TERM ("TRUE"),
.IBUF_LOW_PWR ("FALSE")
) u_ibufg_clk_100 (
.I (FPGA_CLK_100M_P),
.IB (FPGA_CLK_100M_N),
.O (clk_100m)
);
//差分输出缓冲器
OBUFDS#(
.IOSTANDARD("DEFAULT")
)OBUFDS_inst(
.O(O),
.OB(OB),
.I(I)
);
// 低成本项目output buffering
// BUFG从16降到12的方法
// BUFG drpclk_bufr_inst
// (.O (drpclk),
// .I (clkout1));
BUFH drpclk_bufr_inst
(.O (drpclk),
.I (clkout1));
BUFG gt_clk_bufg_inst
(.O (gt_clk),
.I (clkout0));
BUFG gt_pcs_clk_bufg_inst
(.O (gt_pcs_clk),
.I (clkout2));
BUFGMUX phy_clk_bufg_inst
(.O (phy_clk),
.I0(clkout0),
.I1(clkout1),
.S (mode_1x));
// Note that this bufg is a duplicate of the gt_clk bufg, and is not necessary if BUFG resources are limited.
// (* DONT_TOUCH = "true" *) BUFG log_clk_bufg_inst
// (.O (log_clk),
// .I (clkout0));
// End output buffering
//______________________________________________________________________________
assign log_clk = gt_clk;
2.时钟
下图1-1是7系列fpga时钟架构的高层次视图:
一个时钟区域总是每列包含50个clb、10个36K块RAM(除非5个36K块被PCIE的集成块替代),每列包含20个DSP Slice和12个BUFH。一个时钟区域包含一个CMT (PLL/ MMCM),一个50个IO BANK,一个由四个串行收发器组成的GT Quad,以及在块RAM列中为PCIe的半列。
时钟主要由三个部分组成:全局时钟、局部时钟和I/O时钟。
- BUFG即为全局时钟缓冲,Backbone是时钟布线的主干道,BUFG通过它可以到达任意一个时钟区域,而且BUFG通过HROW到达时钟区域内部的每个逻辑单元。
- BUFH即为水平时钟缓冲器,它相当于一个功能受限的BUFG,其输出时钟只能通过HROW在左右相邻的时钟区域内工作。
- BUFIO即为IO时钟缓冲,其输出时钟只能作用在一个时钟区域的IO寄存器处,无法在FPGA内部逻辑使用。
- BUFR即为区域时钟缓冲,其输出只能作用在一个时钟区域。
- BUFMR即为多区域时钟缓冲器,其输出作用在本时钟区域,还可以通过CMT Backbone作用在上下相邻两个时钟区域。
- MMCM、PLL即时钟管理模块,用来消除时钟的延迟、抖动以及产生各种不同频率的时钟。
- CC即为外部时钟输入管脚,其管脚在内部可以连接到BUFG、BUFR、BUFIO、BUFH、MMCM、PLL等,看具体的应用具体连接。一个时钟区域有4对CC管脚,其中2对SRCC,2对MRCC。SRCC作为区域时钟使用时,只能连接本时钟区域的BUFR和BUFIO。而MRCC则还可以通过BUFMR作用在上下相邻的时钟区域
图1-2是一个时钟区域内可用时钟资源的高层次概览,以及它们的基本连接。全局时钟缓冲器可以通过HROW驱动到每个区域,即使再物理空间上不位于那里。水平时钟缓冲器(BUFH)通过HROW驱动到区域中的每个时钟点。BUFG和BUFH在HROW中共享路由通道。I/O缓冲区(BUFIO)和区域时钟缓冲区(BUFR)位于I/O BANK内部。BUFIO只驱动I/O时钟资源,BUFR驱动I/O资源和逻辑资源。BUFMR支持BUFIO和BUFR的多区域链接。具有时钟能力的输入将外部时钟连接到设备上的时钟资源。某些资源可以通过CMT主干道连接到上面和下面的区域。
图1-3为设备右侧单个时钟区域的时钟详细图:
图1-4显示了全局BUFG和区域BUFH/CMT/ CC管脚连接性的详细图,以及区域中可用资源的数量(显示为右侧区域)。
4个时钟输入引脚中的任何一个都可以驱动CMT中的的PLL/MMCM和BUFH。BUFG显示在该区域中,但在物理空间上可以位于时钟主干道中的其他物理位置。BUFG和BUFH共享HROW中的12个路由轨道,可以驱动该区域内的所有时钟点。BUFG也可以驱动BUFH(图1-4中没有显示)。这允许在其他全局时钟分布上单独启用时钟(CE)。一个GT Quad有10条专用路径来驱动CMT和时钟主干道中的时钟缓冲器。位于I/O BANK的BUFR在逻辑、CMT和BUFG中有四个驱动时钟点。CMT可以使用CMT主干道驱动相邻区域的其他CMT,但有一定的局限性。类似地,具有支持时钟的引脚可以在相同的限制下驱动相邻区域的CMT。具有支持时钟的引脚可以驱动BUFG在设备相同的顶部/底部的任何位置。在CMT主干道中有四个通道支持垂直区域之间的连接。来自一个区域的时钟源可以驱动其自身区域内的时钟缓冲区资源,也可以驱动水平相邻区域内的时钟缓冲区资源。CMT、支持时钟引脚和串行收发器可以通过BUFH将时钟驱动到水平相邻区域,也可以连接到设备相同的顶部/底部的BUFG。
图1-5更详细地展示了I/O时钟资源和互联性。
每个I/O BANK包含4个BUFIO和4个BUFR。每个时钟缓冲器可以被一个特定的具有支持时钟管脚对的输入时钟驱动,也可以由MMCM的特定输出时钟直接驱动。两个支持时钟的输入管脚对,被称为MRCC,支持多区域时钟方案。一个MRCC管脚对可以驱动特定的BUFMR,而BUFMR又可以驱动相同和相邻区域中的BUFIO和BUFR,从而促进多区域/BANK接口。同样,GT Quad也可以驱动BUFMR。
尽管所有7系列设备具有相同的基本架构,但在不同的系列和系列内的设备之间存在一些架构差异。每个7系列FPGA在设备的左侧边缘至少有一个完整的I/O列。GT可以是7系列fpga 支持的任意一个串行收发器(GTP、GTX或GTH)。带有GT的设备在设备的右边缘有一个GT和I/O的混合列(某些Artix-7和Kintex-7设备),或者设备的右边缘有一个完整的GT列(某些Virtex-7和Kintex-7设备)。其他Virtex-7器件的左右边缘都有完整的GT列,左右两侧都有完整的I/O列侧面。文章来源:https://www.toymoban.com/news/detail-753781.html
3.总结
- FPGA由多个BANK组成,每个BANK是一个独立的时钟域。
- 每个BANK有一对MRCC和一对SRCC用来外接外部的晶振,MRCC比SRCC多一个驱动BUFMR功能。
- BUFG是全局时钟,通过clock backbone时钟主干道到达每一个时钟域,然后通过HROW水平主干道到达每一个点。
- BUFR可以驱动所在的时钟区域内的所有时钟,BUFMR还可以驱动上下相邻两个时钟域的时钟。
- BUFIO是I/O区域内的时钟缓冲,只能驱动I/O资源,不能驱动内部逻辑。
一个比喻:7系列的时钟资源就像城市内的车辆,而时钟布线资源就像是城市内的干道。有些车比较牛(BUFG),可以通过主干道(时钟主干道)到达每一个区域(时钟区域),然后通过个别几个区域内的次干道(HROW)到达每一个地点;有一些车没那么牛(BUFH),只能通过个别几个区域内的次干道(HROW)到达每一个地点;有些车就更差了(BUFR),只能在自己的小区内开开。文章来源地址https://www.toymoban.com/news/detail-753781.html
到了这里,关于FPGA时钟和原语的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!