CCIO 到各种时钟缓冲器(BUFR,BUFG,BUFMR,MMCM等等)之间,存在时钟专用布线。但是GPIO到这些BUF,是没有时钟专用布线的。这些GPIO只能连接到Fabric,如果程序中配置了GPIO输入的信号作为时钟使用,那么只能通过GPIO->Fabric->BUFG来实现。此时,我们要加上熟悉的CLOCK_DEDICATED_ROUTE=FALSE。同时我们也知道,Fabric的延迟是比较大的,同时也不确定,对于高速应用,尤其是相位严格的应用,这是有风险的。因为每次综合和布线,都会改变Fabric的延迟。
VIVADO会默认插入BUFG给CCIO,但是如果想利用BUFR,需要在代码里手工例化BUFR,并连接网络。
MMCM是推荐的生成CLK的方式。因为直接从CCIO连接到BUFG,作为时钟来使用,是没有延迟补偿的。而且很容易时序违例,但是如果是MMCM管理的时钟,那么时序违例的风险会小很多。
最好不要使用GPIO来输入时钟。尽量使用CCIO来输入时钟。
允许的时钟布线路径:
-
CCIO->BUFG->GCLKTREE
-
CCIO->BUFR->RCLKTREE
-
CCIO->BUFIO->IOCLKTREE
-
CCIO->BUFH->HCLKLINE
-
CCIO->CMT->BUFG->GCLKTREE
或CCIO->CMT->BUFR->RCLKLINE
或CCIO->CMT ->BUFH->HCLKLINE -
CCIO->BUFMRCE->BUFR->RCLKTREE
-
CCIO->BUFMRCE->BUFIO->IOCLKTREE
-
GPIO->Fabric->BUFG->GCLKTREE
-
GPIO->Fabric->BUFG->CMT