![AMD FPGA设计优化宝典:面向Vivado/SystemVerilog](https://wfqqreader-1252317822.image.myqcloud.com/cover/811/47793811/b_47793811.jpg)
第2章 优化时钟网络
2.1 时钟资源
时钟资源主要包括全局时钟引脚、时钟缓冲器和时钟管理单元。本节重点介绍7系列FPGA、UltraScale/UltraScale+和Versal ACAP中的时钟资源。
2.1.1 7系列FPGA中的时钟资源
1.全局时钟引脚
7系列FPGA基于28nm工艺制程。在7系列FPGA中,每个输入/输出区域(I/O Bank)包含50个输入/输出引脚,其中有4对(8个)全局时钟引脚,称为CCIO(Clock-Capable IO)。每对CCIO包含一个P端和一个N端,用于构成差分I/O,从而使得输入时钟支持差分时钟。如果外部时钟是单端时钟,则需要连接到CCIO的P端。此时,相应的N端只能用作通用I/O,而不能再当作另一个全局单端时钟引脚。在这4对CCIO中,有2对MRCC(Multi-Region Clock-Capable),2对SRCC(Single-Region Clock-Capable)。当它们未被当作时钟引脚使用时,可用作通用I/O。
设计规则1:确保外部时钟是由全局时钟引脚进入FPGA内部。
2.时钟缓冲器
7系列FPGA中的时钟缓冲器分为全局时钟缓冲器(Global Clock Buffer)和区域时钟缓冲器(Regional Clock Buffer)。全局时钟缓冲器是指由BUFGCTRL配置成的BUFG、BUFGCE、BUFGMUX和BUFGMUX_CTRL。7系列FPGA有32个全局时钟缓冲器。这32个全局时钟缓冲器位于全局时钟列,不属于任何时钟区域(Clock Region)。其中有16个位于全局时钟列的上侧,另外16个位于全局时钟列的下侧,如图2-1所示。图中XmYn是时钟区域坐标,每个时钟区域的高度为50个CLB(Configurable Logic Block),宽度为整个芯片宽度的一半。同时,还可以看到全局时钟列位于芯片的中心位置,垂直时钟布线资源也位于此;水平时钟布线资源则位于每个时钟区域水平方向的中心位置。
之所以称为全局时钟缓冲器,是因为它们输出的时钟可经全局时钟树(Global Clock Tree)到达FPGA内部逻辑及输入/输出逻辑(指ILOGIC和OLOGIC,位于输入/输出区域)的时钟端口,而其输入时钟可来自与之同侧的MRCC、SRCC、CMT(Clock Management Tile:时钟管理带。一个CMT包含一个MMCM和一个PLL)、BUFG或高速收发器的输出时钟RXOUTCLK/TXOUTCLK,如图2-2所示。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_43_1.jpg?sign=1738845831-aEDHInFP8Fp2KDYaWmA5pD6XTC81Wumg-0-62eae18586ba287856e8b1d07adb569d)
图2-1
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_43_2.jpg?sign=1738845831-HIPD7lbX121oDUQfTvXWOJD5xEhN95Tb-0-21208471044c71822be18bf39519471a)
图2-2
区域缓冲器也称为局部缓冲器,包括BUFH、BUFIO、BUFR和BUFMR。之所以称为区域缓冲器,是因为它们输出的时钟经区域时钟树(Regional Clock Tree)之后可到达特定区域内的逻辑的时钟端口。区域缓冲器隶属于时钟区域。每个时钟区域包括12个BUFH、4个BUFIO、4个BUFR和2个BUFMR,如图2-3所示。
BUFH的输入时钟可来自于与之同一时钟区域或相邻水平时钟区域内的MRCC、SRCC、CMT、BUFG或高速收发器的输出时钟RXOUTCLK/TXOUTCLK。以图2-1为例,时钟区域X1Y0的BUFH可由本区域内的MRCC驱动,也可由X0Y0内的MRCC驱动,这就是相邻水平时钟区域的概念。BUFH的输出可连接到CMT的时钟端口或本时钟区域内BUFG可到达的时钟端口,如图2-4所示。相比于BUFG,BUFH具有更低的功耗,同时输出时钟抖动更小。此外,BUFH还可配置为带时钟使能的BUFHCE,从而实现门控时钟功能。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_44_1.jpg?sign=1738845831-eWbwx2f1RC4G9eQ8b9VFkq5LOfg4V5pu-0-6bfb174d281ad4bbd70ff96432e93beb)
图2-3
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_44_2.jpg?sign=1738845831-uNmapog4Io9qaycRmI9reU0W91K2JsOX-0-cf622bd6e7d8330a2fe8c56c0008cea2)
图2-4
设计规则2:使用BUFH时,要确保BUFH所驱动的逻辑资源可以放置在一个时钟区域内。
BUFIO和BUFR的输入时钟均可来自于与之同一时钟区域内的MRCC、SRCC、MMCM的输出时钟CLKOUT0~CLKOUT3、MMCM的输出反馈时钟CLKFBOUT或BUFMR。BUFIO的输出时钟只能驱动ILOGIC和OLOGIC。BUFR的输出时钟可驱动CMT或与之同一时钟区域内的逻辑资源,包括ILOGIC和OLOGIC,如图2-5所示。此外,BUFR还具备分频功能,可支持的分频因子为1~8(包含1和8)的整数。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_44_3.jpg?sign=1738845831-qDaY4liXU9tdymkifRuPUjUOMwaTtmoT-0-6168bcd3271010425851f84e00d7dae0)
图2-5
应用案例1:数据端口和时钟端口可容纳于同一输入/输出区域内的源同步设计
通常,在源同步设计中会用到OSERDES或ISERDES,它们都有时钟端口CLK和CLKDIV,其中CLKDIV是CLK的分频时钟,此时可采用如图2-6所示的时钟方案。时钟由CCIO进入,连接到同一输入/输出区域内的BUFR和BUFIO,借助BUFR的分频功能产生CLKDIV,而BUFIO的输出直接连接到CLK端口。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_45_1.jpg?sign=1738845831-Y3ux7blALeStT0jscoiG0WJmiMPe0sKV-0-c1e377a5f46650a563f57b7b687a2476)
图2-6
BUFMR的输入时钟可以是MRCC,也可以是高速收发器的输出时钟RXOUTCLK或TXOUTCLK,而其输出时钟可以是与之同一时钟区域内的BUFIO/BUFR,或与之相邻同列上方/下方的时钟区域内的BUFIO/BUFR,如图2-7所示。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_45_2.jpg?sign=1738845831-J52qPf9PDcBKK6qLhDjG6YsDd8LyhVwn-0-c7a79284b30976e0b2b616aded3b1ca4)
图2-7
所谓“相邻同列上方/下方的时钟区域”,我们结合图2-8理解。图中BUFMR位于时钟区域X0Y1,与之相邻同列上方的时钟区域是X0Y2,与之相邻同列下方的时钟区域是X0Y0,故BUFMR可驱动这3个时钟区域内的BUFIO/BUFR。此外,BUFMR还可配置为BUFMRCE,以保证提供给BUFR和BUFIO的时钟是同步且同相位的。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_45_3.jpg?sign=1738845831-nnxSJ3hzkfkeNUUyK9xgyWSt8JpVTyGt-0-eccb24372a97f98d8bc264e286d58804)
图2-8
BUFMR的输入时钟可以来自MRCC,但不能是SRCC,这正是MRCC和SRCC的区别,如图2-9所示。两者的输入时钟均来自于FPGA外部,输出时钟的差异仅在于MRCC可驱动的对象多了一个与之同一时钟区域内的2个BUFMR。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_46_1.jpg?sign=1738845831-9ambRPCntndjS2upcBTNDG7l26O3zrdn-0-c59ee56571fd6a671f862c9a506c59ba)
图2-9
设计规则3:在使用BUFMR时,如果其输入时钟来自FPGA外部,要确保该时钟由MRCC进入。
应用案例2:使用BUFMR驱动多个BUFR和BUFIO
在使用多个ISERDES/OSERDES时,例如源同步设计,如果它们不在同一个输入/输出区域,但在相邻同列的输入/输出区域,此时可行的一种时钟方案就是使用BUFMR驱动多个BUFR和BUFIO,借助BUFR的分频功能产生CLKDIV,如图2-10所示。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_46_2.jpg?sign=1738845831-GXR3mCDzhQd9tM7K6LOqWSf7c5Eb54lG-0-b6cbe4e41cbb9142537a98dc4d595c6c)
图2-10
如果设计中BUFIO不够用,此时可将BUFIO替换为BUFR,如图2-11所示。需要注意的是,连接到CLK端口的BUFR其分频因子(属性BUFR_DIVIDE)要设置为1,而不能设置为BYPASS(BUFR_DIVIDE为1~8时,对应的延迟特性是一致的,但与BYPASS对应的延迟特性不同),以保证CLK和CLKDIV相位一致。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_47_1.jpg?sign=1738845831-G0CkLDR2XaPzL6tMO0qb9EwR7xkSs7do-0-5062455440ca829d44c2b8b40a9f325c)
图2-11
7系列FPGA的每个输入/输出区域包含4个高性能时钟HPC(High Performance Clocks),它们具有最低的抖动和最小的占空比失真。这4个时钟只能由同一时钟区域内MMCM的CLKOUT0~CLKOUT3驱动,且它们与同一时钟区域内的BUFIO和BUFR之间有专用布线资源,因此,在使用MMCM生成时钟驱动BUFIO/BUFR时,要确保使用的是CLKOUT0~CLKOUT3端口输出的时钟。
3.时钟管理单元
7系列FPGA最多可包含24个时钟管理带(CMT),位于时钟管理单元列,紧邻输入/输出列。每个时钟管理带由一个MMCM(Mixed-Mode Clock Manager)和一个PLL(Phase-Locked Loop)构成,可实现大范围的频率合成、抖动过滤和改善时钟偏移的功能。两者的输入/输出端口如图2-12所示。可以看到,相比于PLL,MMCM多了PSCLK、PSEN、PSINCDEC和PSDONE 4个与动态相位调整相关的端口,这表明当使用动态相位调整功能时,只能用MMCM,而不能用PLL;同时,MMCM的输出时钟端口有CLKOUT0~CLKOUT6,且CLKOUT0~CLKOUT3还有对应的反相时钟CLKOUT0B~CLKOUT3B,PLL只有CLKOUT0~CLKOUT5这6个输出时钟端口。
就频率合成而言,两者的工作原理是一样的。其内部均包含一个压控振荡器VCO (Voltage Controlled Oscillator),用于产生高频时钟。每个输出时钟端口都有分频器,VCO的输出经分频产生各自端口需要的时钟。例如,输入时钟为100MHz,输出时钟为400MHz,采用MMCM时,其配置参数如图2-13所示。图中CLKIN1_PERIOD等于10.000,意味着输入时钟周期为10ns,对应频率为100MHz;CLKFBOUT_MULT_F等于10.000,DIVCLK_DIVIDE等于1,表明VCO的频率为100x10/1,也就是1000MHz;端口CLKOUT0分频器的分频因子为2.500,故CLKOUT0输出频率为1000/2.5即400MHz。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_48_1.jpg?sign=1738845831-bsDMCzLK12X6sWlUqbHFNQasbEt2cIKY-0-8e0f627323097fe46e81e0aa77af70ab)
图2-12
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_48_2.jpg?sign=1738845831-zWmLGegRJ2s6TlqXy2HGYkJamVYbDedU-0-ff9daea0884b7d99b20504a85a15ccbc)
图2-13
如果使用PLL,其配置如图2-14所示。图2-14与图2-13中的参数含义是一致的。因此,不难得出PLL中的VCO频率为100×12/1即1200MHz,CLKOUT0的输出频率为1200/3即400MHz。
既然在这种情况下,MMCM和PLL都可生成目标时钟,那么两者是否完全等效呢?这里我们从生成时钟的性能角度看,如图2-15所示。图中Divide Counter对应参数DIVCLK_DIVIDE,Mult Counter对应参数CLKFBOUT_MULT。不难看出,PLL输出时钟的峰峰抖动(Pk-to-Pk Jitter)和相位误差(Phase Error)更小。这是因为此时PLL的VCO为1200MHz,而MMCM的VCO为1000MHz。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_49_1.jpg?sign=1738845831-Onh045Wp8ZMhrm1C9gfgyPQaNYtgkOh9-0-c0977e565e8658cd1acff01a8ff9aa0e)
图2-14
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_49_2.jpg?sign=1738845831-UFwhBdWo7iHCNNMI6eCVDsqrP5SqBqG9-0-ae12eb1d9b95dab76b78c2370a95d30d)
图2-15
设计规则 4:在使用MMCM或PLL时,尽可能使VCO频率更高一些,这样输出时钟的抖动会更低一些,相位误差会更小一些。
图2-13和图2-14所示界面中的参数Clocking Wizard IP会自动计算得出,但这些参数也是可以手动进行修改的,如图2-16所示,只需要勾选图中方框所示选项即可。但需要注意,VCO的频率是有限制要求的。例如,对于Virtex-7 FPGA,速度等级为-1的芯片,VCO频率介于600~1200MHz;速度等级为-2的芯片,VCO频率介于600~1440MHz;速度等级为-3的芯片,VCO频率介于600~1600MHz。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_49_3.jpg?sign=1738845831-k9QAz3RP9b7SavqrvAQLQx610VSvi03v-0-68ffa08b32035e40cc3abe313b6b7587)
图2-16
设计规则5:在使用MMCM或PLL时,尽可能通过Clocking Wizard IP的方式实例化,避免使用原语(Primitive)。因为原语中有很多参数需要手工填写,极易导致出错。
应用案例3:使用MMCM生成多个时钟
外部时钟为33MHz,需要通过此时钟生成6个时钟,其频率分别为528MHz、264MHz、176MHz、132MHz、66MHz和33MHz。MMCM的参数配置如图2-17和图2-18所示。从图2-17中可以看到,CLKFBOUT_MULT_F为32.000,DIVCLK_DIVIDE为1,故VCO频率为33×32/1即1056MHz。图2-19显示了6个输出时钟的基本性能指标。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_50_1.jpg?sign=1738845831-0NQhBYgerUHQbmF1NnYnRAOG3cmdtJFZ-0-4d327253feef633a11e157f7dce737a6)
图2-17
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_50_2.jpg?sign=1738845831-2QAlKWbvRawFSPw88YCEXQcibwz1hqjw-0-897eed0ced1688dca24f32e200d70d88)
图2-18
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_50_3.jpg?sign=1738845831-cDtTElb7aPQnnPqKkBughTJ2bJskqHeb-0-0d0ecda664e5c1e808daa6e34c0d20c9)
图2-19
MMCM的CLKOUT0和CLKFBOUT端口对应的分频器可实现小数分频,分频因子的分辨率为0.125,而相应的PLL是不具备此功能的。
应用案例4:借助MMCM小数分频功能输出目标时钟
已知输入时钟为100MHz,现在需要生成320MHz和400MHz两个时钟。使用Clocking Wizard IP调用MMCM。在Output Clocks页面下,clk_out1(对应MMCM的CLKOUT0端口)输出频率填写320,clk_out2(对应MMCM的CLKOUT1端口)输出频率填写400,最终在Actual列显示实际值分别为320.00000和400.00000,达到了预期效果,如图2-20所示。此时,MMCM的参数配置情况如图2-21所示,由此可推断出VCO频率为800MHz。同时还可以看到,CLKOUT0端口的分频器其分频因子为2.500,CLKOUT1端口的分频器其分频因子为2。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_51_1.jpg?sign=1738845831-6zk7bc9ePjFbVQ2KHsuS5Fbf0F22xRDa-0-cc66db43d28123d70294bd945d773674)
图2-20
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_51_2.jpg?sign=1738845831-a0uMgv4JB4KunhH3iDE0rTsO8i32Ce4H-0-9eb792561ac85321ee79b398ea2c5258)
图2-21
如果将320和400的位置互换一下,如图2-22所示,可以看到在Actual列显示的实际输出值将分别变成400.00000和316.66667,与实际值不符。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_52_1.jpg?sign=1738845831-cvkGJY3HNGcSsxURLHPPsAsBIrb9LL2N-0-7d6c649efa07f6417c9f31fc62d39748)
图2-22
如果使用PLL,如图2-23所示,也无法达到预期效果。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_52_2.jpg?sign=1738845831-ctGPkeQGtbv6g1LcBBNhxqMUNbQ2X6wq-0-8577fad5f0357c461cbbe8009ae3e289)
图2-23
使用Clocking Wizard IP时,若勾选图2-24中的Phase Alignment,那么CLKFBOUT端口会连接BUFG,BUFG的输出会连接到CLKFBIN端口,如图2-25所示,从而使得标记①、④、⑥处的时钟相位一致,标记②、③、⑤处的时钟相位一致,但两组之间的相位是不同的。如果没有勾选Phase Alignment,那么CLKFBOUT会直接连接到CLKFBIN,所有输出端口(CLKOUT0~CLKOUT6)若使用了同类型的时钟缓冲器,则输出时钟相位一致,但与标记①、②处的相位不再一致。由此可见,选项Phase Alignment的作用是保证MMCM输出时钟与输入时钟相位一致。如果不需要此功能,MMCM反馈支路就不会插入BUFG,这样也可以节省一个BUFG。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_52_3.jpg?sign=1738845831-d9fjFe8lG50DxQ1l70pBrLYrShukFTip-0-f31bffd06c97a77a38b41af9f3a8bfd8)
图2-24
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_53_1.jpg?sign=1738845831-hf6KVtjJtVjxV5nMj6fqKlNfcDCuE9vE-0-41150d7c113dda657a692d4a515bb469)
图2-25
在芯片选型阶段,可在Vivado下借助Tcl脚本查看指定芯片中的时钟资源分布情况,如Tcl代码2-1所示。只需要打开Vivado,在Tcl Console中执行此脚本即可。
Tcl代码2-1
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_53_2.jpg?sign=1738845831-cI9eZLyg74sGtPgnO1acx5PYOt40M04q-0-582a89a02581987cbf91f455e4dd62fd)
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_54_1.jpg?sign=1738845831-Ur2qemnDR2APEUKeEoJ4qmloIb3u3EaH-0-5887e6d5cf69d96cac639cc6896aa686)
2.1.2 UlatraScale/UltraScale+中的时钟资源
UltraScale基于20nm工艺制程,而UltraScale+基于16nm工艺制程。尽管两者工艺制程不同,但内部结构是一致的。若无特殊声明,下文阐述的UltraScale架构也适用于UltraScale+。
1.全局时钟引脚
在UltraScale中,每个输入/输出区域(I/O Bank)都位于单一的时钟区域CR(Clock Region)内,且都包含52个输入/输出引脚。在这52个引脚中,有4对(8个)全局时钟引脚GC(Global Clock I/O)。其使用方法与7系列FPGA是一致的。不同之处在于,这4对GC地位是等同的,不再有MRCC和SRCC之分。UltraScale+新增了高密度输入/输出区域(High Density I/O Bank,HD I/O Bank),位于此区域内的全局时钟引脚HDGC只能通过BUFGCE连接至MMCM或PLL。
设计规则6:使用UltraScale+时,如果外部时钟需要借助MMCM生成新的时钟,应避免外部时钟由HDGC进入;如果只能由HDGC进入,则需要将属性CLOCK_DEDICATED_ROUTE的值设置为FALSE。
2.时钟缓冲器
7系列FPGA既包含全局时钟缓冲器,又包含区域时钟缓冲器。UltraScale简化了时钟缓冲器,即只有全局时钟缓冲器。包含输入/输出列的时钟区域内有24个BUFGCE、4个BUFGCE_DIV和8个BUFGCTRL,但同时只能使用其中的24个,如图2-26所示。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_55_1.jpg?sign=1738845831-sp1lsF4s2MHO64MnZz3LLq20USYo4MSd-0-6bfb6d101a7e37d6de222a2be75403d7)
图2-26
这些全局时钟缓冲器位于时钟列,可驱动水平时钟布线/分发轨道和垂直时钟布线/分发轨道,其中分发轨道是7系列FPGA所没有的。这些轨道均位于时钟区域的中心位置,如图2-27所示(有的芯片只有一侧会有高速收发器)。不难看出,每个时钟区域的宽度相比于7系列FPGA有所缩减,不再是半个芯片的宽度,高度由7系列中的50个CLB变为60个CLB。时钟区域的粒度更加细化。无论是水平时钟布线/分发轨道还是垂直时钟布线/分发轨道,都是以时钟区域作为边界,这意味着如果某个时钟区域内的资源未使用时钟,工具就会关闭相应的轨道,从而节省功耗。布线轨道可驱动相邻时钟区域内的布线轨道和分发轨道,但分发轨道只能驱动相邻时钟区域内的水平分发轨道。布线轨道的作用是将时钟从全局时钟缓冲器布线到某个中心点。在这个中心点,时钟经分发轨道连接到其负载的时钟端口。分发轨道可进一步移动这个点以改善时钟的局部偏移。这个点称为时钟根节点(Clock Root)。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_55_2.jpg?sign=1738845831-OlFR6MgURC5DSLT0GHszg3nfoXzSMWya-0-b85405bcb3f1d6e7301715df8b4a127f)
图2-27
每个时钟区域有24个水平时钟布线/分发轨道和24个垂直时钟布线/分发轨道。在水平时钟分发轨道上有32个BUFCE_LEAF,称为叶时钟缓冲器。时钟从水平时钟分发轨道上下来之后,经BUFCE_LEAF到达逻辑资源的时钟端口,如图2-28所示。BUFCE_LEAF只能由Vivado自动使用,而不能在代码中实例化。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_56_1.jpg?sign=1738845831-Fz0kBXU3IFescIue5as1qy8LJ52GKHFZ-0-14598fb868c50ed201646d9f86e6dc90)
图2-28
进一步理解水平时钟布线/分发轨道和垂直时钟布线/分发轨道,如图2-29所示。图中有两个时钟网络,左侧的时钟网络其根节点在时钟区域X0Y2,右侧的时钟网络其根节点在时钟区域X4Y1。换言之,时钟根节点其实就是时钟负载在芯片中布局的中心位置,其值为时钟区域。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_56_2.jpg?sign=1738845831-SI1MoRqsyvTC60qy3gzQ6F2r8OsAqHhL-0-8094725f69fa60f12c288113c025140c)
图2-29
UltraScale有独立的BUFGCE,无须通过BUFGCTRL配置而成。但BUFGCTRL仍是可配置的,例如,BUFGCE_1、BUFGMUX和BUFGMUX_1都是通过BUFGCTRL配置生成的。BUFGCE_DIV取代了BUFR,但比BUFR具有更强大的驱动能力,因为它已成为全局时钟缓冲器。同时,BUFGCE_DIV还具有分频功能,分频因子可以是1~8(包含1和8)之间的整数。只是当分频因子为奇数时,输出时钟的占空比将不再是50%。UltraScale新增了BUFG_GT。BUFG_GT只可以由高速收发器或RFSoC中的ADC/DAC模块驱动。BUFG_GT_SYNC是BUFG_GT的同步器,当Vivado推断出BUFG_GT时会自动在设计中插入BUFG_GT_SYNC。和BUFGCE_DIV类似,BUFG_GT也具有分频功能,可用的分频因子为1~8(包含1和8)之间的整数。分频因子由DIV端口输入。DIV位宽为3,当其为3'b000时,对应分频因子为1。在包含高速收发器的时钟区域内有24个BUFG_GT。在Zynq UltraScale+MPSoC中新增了一种全局时钟缓冲器BUFG_PS(Zynq 7000系列FPGA中是没有的)。该缓冲器位于内部ARM处理器的旁边。PS侧的输出时钟需经此缓冲器访问PL(Programmatic Logic)侧的时钟布线资源,从而驱动PL侧的逻辑资源。BUFG_PS的个数因不同的芯片而异。例如,ZU4EG有96个BUFG_PS,而ZU2CG有72个BUFG_PS。可借助Tcl代码2-2查看芯片中BUFG_PS的个数和位置。
Tcl代码2-2
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_57_1.jpg?sign=1738845831-Ds3o5Wkr0LBWAbJi7EZnJJZctfspOxww-0-fd55d4d482b5d3ed7a337aa335e721bc)
设计规则7:应由Vivado自动决定设计中全局时钟缓冲器的位置,尽量避免通过约束的方式进行干预。若需要指定设计中某些全局时钟缓冲器的位置,应使用属性CLOCK_REGION,而不要使用属性LOC。CLOCK_REGION的使用方法如Tcl代码2-3所示。
Tcl代码2-3
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_57_2.jpg?sign=1738845831-GmJ9lcv5cvCIavIsa5zJLtoZRHp4gQQA-0-3d14b5ccc7d0a4aedcaef0fdac0e5f4b)
3.时钟管理单元
和7系列FPGA一样,时钟管理单元位于CMT内。不同的是UltraScale的每个CMT内包含1个MMCM和2个PLL。就MMCM而言,其功能和7系列FPGA中的MMCM保持一致,在此基础上新增了一个特性:动态调整CLKOUT0~CLKOUT6端口的分频因子时无须复位。就PLL而言,其功能和7系列FPGA中的PLL相比更加专一,即UltraScale中的PLL主要用于给外部存储器接口逻辑提供时钟;同时,与MMCM相比,不具备改善时钟偏移和动态相位调整的功能。图2-30显示了MMCM和PLL的输入/输出端口,不难看出,PLL的输出时钟个数与7系列FPGA相比明显减少。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_58_1.jpg?sign=1738845831-HCE1qqVlIa9JfWyDyhzSRNa2D5s2oyVz-0-57480a51fc2a4411290c5059349ddc9d)
图2-30
可借助Tcl代码2-4分析UltraScale/UltraScale+芯片中的时钟资源,打开Vivado,在Tcl Console中执行此脚本即可。
Tcl代码2-4
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_58_2.jpg?sign=1738845831-IOv1iu3udA9FaVAdOMCmgEBxPbUtGWpC-0-e88f3e13dd15d7e2ffe3393798966fa8)
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_59_1.jpg?sign=1738845831-qF23YHA0GRFUtx6U94d1GIdJsnhThmWl-0-254e6c74f2a65314ce753ce782bcd930)
2.1.3 Versal ACAP中的时钟资源
1.全局时钟引脚
Versal基于7nm工艺制程,与UltraScale一样,其内部被分割为矩阵形式的时钟区域(Clock Region,CR)。不同的是,每个CR的高度由60个CLB变为96个CLB,同时,Versal中的CR还分为满CR(高度为96个CLB)和半CR(高度为48个CLB)。
Versal中的全局时钟布线轨道和分发轨道既有水平方向的也有垂直方向的,且都是以时钟区域为边界的。对于满CR,水平时钟布线和分发轨道位于CR水平方向的中心位置,对于半CR,则位于CR的底部。垂直时钟布线和分发轨道则位于两个背靠背CR的临界处,如图2-31所示。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_59_2.jpg?sign=1738845831-fls7Q16dyOgRPsQE3Po8FGAWXMgY9COb-0-d73f81405c046aeae4cdac9d1fe8a11c)
图2-31
Versal有两种输入/输出区域,分别是高性能输入/输出区域(XPIO Bank)和高密度输入/输出区域(HDIO Bank)。XPIO主要用于实现高性能接口,支持的电平范围为1.0~1.5V,同时硬核存储单元控制器也在其中;HDIO可实现的接口速率较XPIO会低一些,可支持的电平范围为1.8~3.3V。XPIO和HDIO支持的电平标准是没有重叠的。每个XPIO有54个引脚,其中有4对(8个)全局时钟引脚GCIO;每个 HDIO有24个引脚,其中有2对(4个)全局时钟引脚HDGC。这些全局时钟引脚的用法与UltraScale中的保持一致。
2.时钟缓冲器
与UltraScale一样,Versal中的时钟缓冲器均为全局时钟缓冲器。在XPIO对应的CR中,每个CR有24个BUFGCE、8个BUFGCTRL和4个BUFGCE_DIV,但同时只能使用其中的24个;在HDIO对应的CR中,每个CR只有4个BUFGCE。紧邻高速收发器的CR会分布一些BUFG_GT,紧邻PS的CR会分布一些BUFG_PS。这些时钟缓冲器的功能和UltraScale中的保持一致。Versal中还新增了一种全局时钟缓冲器BUFG_FABRIC,紧邻垂直方向的NoC(Network on Chip)。时钟缓冲器在芯片中的分布情况如图2-32所示,同时还可借助Tcl代码2-5进行分析。
设计规则 8:尽管BUFG_FABRIC是全局时钟缓冲器,但仅用于驱动设计中的高扇出网线,而不能用于驱动时钟信号。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_60_1.jpg?sign=1738845831-KBbghZ1UsWBCTL4hHrCCoIe9AJw2pHIx-0-f063fc36cba19586bae8772e8c2e5872)
图2-32
Tcl代码2-5
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_60_2.jpg?sign=1738845831-Igle6dbgmPXcLWhWlfj9UuxhpIhW079E-0-9a0e77bfbdae0599b88c619a4f461522)
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_61_1.jpg?sign=1738845831-kUHTT3QJgKbBqM2twESk5GQ5MWIAMgEn-0-04dacff285b52bc61c40f6a345606c47)
在Versal中也有叶时钟缓冲器BUFDIV_LEAF,取代了UltraScale中的BUFCE_LEAF,其功能更加丰富,支持静态分频(分频因子由属性BUFLEAF_DIVIDE确定,一旦设定不可动态更改),可支持的分频因子为1、2、4和8。借助BUFDIV_LEAF,可形成5种MBUFG(Multi-Clock Buffer):
MBUFGCTRL(BUFGCTRL+BUFDIV_LEAF)
MBUFGCE(BUFGCE+BUFDIV_LEAF)
MBUFGCE_DIV(BUFGCE_DIV+BUFDIV_LEAF)
MBUFG_PS(BUFG_PS+BUFDIV_LEAF)
MBUFG_GT(BUFG_GT+BUFDIV_LEAF)
由此可见,MBUFG并非物理存在,而是逻辑存在。MBUFG有4个输出端口O1~O4,两种工作模式,由模式控制字MODE设定。MODE与输出时钟频率的关系如表2-1所示,其中FIN为MBUFG的输入时钟频率。
表2-1
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_62_1.jpg?sign=1738845831-5R7lhGlYZOwk1ZR8KnEMHuteN9Bo8Uko-0-092c397f60db8ad9d1e27c844e5fdf58)
3.时钟管理单元
Versal中的时钟管理单元带分三种:只有1个XPLL;有1个MMCM和1个DPLL;只有1个DPLL。MMCM的功能和UltraScale中的保持一致,即在模拟锁相环的基础上增加了通用时钟功能。XPLL是Versal中新增的时钟管理单元,其主要功能是给XPHY提供时钟,故其时钟输出个数会比MMCM少一些。DPLL是数字锁相环,可看作轻量版的MMCM。三者的端口如图2-33所示。
XPLL位于XPIO内。每个XPIO内有2个XPLL。MMCM和DPLL分布在紧邻XPIO的水平时钟布线和分发轨道上,与其在同一时钟区域内的全局时钟引脚可直接连接至这些位置上的MMCM和DPLL。同时,在紧邻高速收发器的时钟区域内还分布了一些DPLL,位于HDIO的全局时引管脚可与之直接连接,但如果需要连接XPIO的MMCM,就需要先将其连接到BUFGCE上,再由BUFGCE的输出连接至MMCM。XPLL、MMCM和DPLL的分布状况也可查看图2-32。借助 Tcl代码2-6可查看指定芯片中的时钟管理单元。
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_62_2.jpg?sign=1738845831-W4Ic5Z8rNIULWpB7NYmhnP8n0g4qmigy-0-930792245348a4b5af2126b46d8c7f64)
图2-33
Tcl代码2-6
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_63_1.jpg?sign=1738845831-NPrkDseaU2W8bqh0TTRv86L9aV6nczbu-0-d18c09d81df03f30e9839d741388c755)
从28nm工艺制程的7系列FPGA到20nm的UltraScale/16nm的UltraScale+,再到7nm工艺制程的Versal ACAP,芯片架构发生了很大的变化。表2-2从时钟资源的角度对三者进行了对比。可以看到,时钟区域的规模越来越大,时钟缓冲器趋向单一。
表2-2
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_63_2.jpg?sign=1738845831-yTyBq1MhrQ6SCEF9j3jstNZSg4r2M2t4-0-68fa96f01b76118a4dc4e2630762a3ae)
续表
![](https://epubservercos.yuewen.com/23E432/27210676502898006/epubprivate/OEBPS/Images/45725_64_1.jpg?sign=1738845831-V1C6bq4H8kjt9qVxzlNU0XVYjj1zRX1X-0-cbbb9824b0570c96a604fb9fd1655d70)