時鐘功能輸入(CCIO)
每個Bank內都有自己的Clock輸入引腳,每個Bank有4個,可配置爲單端或差分時鐘;
這些引腳直接與Bank內的CMT連接,而不用作時鐘輸入時的時候就是一般的IO;
其中,2個IO具有多時鐘域時鐘功能(Muti-Region Clock Capability, MRCC),而另2個IO則只有單時鐘域時鐘功能(Single Region Clock Capability, SRCC)。
-----------------------------------------------------------------------------------------------------------------------------
時鐘網絡
7系列芯片layout
在新的7系列FPGA中,CMT列緊靠IO列排布(而6系列則是位於芯片中心),這是爲了獲得最短的寫入延時,從而在Gigabit Transiever和高速串行通信等應用中獲得最優化的IO性能。
6系列芯片layout
BUFMR是少數的專門用於跨越相鄰時鐘域提供時鐘的buffer。
全局時鐘由BUFGCTRL驅動,BUFGCTRL位於芯片的中心位置;
大多數7系列芯片都有32根垂直全局時鐘線(Vertical Spine),每根都由一個BUFGCTRL驅動;
BUFGCTRL可通過原語調用,可被配置爲多路時鐘複用器、時鐘使能器。
時鐘域
每個時鐘域高度爲50個CLBs(不是僅含50個)或50個IOBs(含兩側?以及GT口),通過12個BUFH(Horizontal)引入12根橫向全局時鐘線(Horizontal Spine),通過4個BUFIO驅動IO bank時鐘線,2個BUFR驅動域內時鐘線,以及2個BUFMR驅動跨時鐘域時鐘線。
當用戶在一個時鐘域內實用全局時鐘時,BUFH會被Vivado軟件自動調用(而不需要由用戶調用原語來實現)。
域內時鐘線也是沿橫向佈置的,並由BUFR驅動。
BUFR可以作爲分頻器使用。
上述由BUFH驅動的12根橫向全局時鐘線和由BUFR驅動的4根域內時鐘線都可爲時鐘域內的資源提供時鐘。
但要注意的是,從中部的橫向時鐘軸向上下兩側各列CLB列引出的時鐘線均只有12根。
也就是說,雖然有16根全域(注意不是全局)可用的時鐘線,但是隻有其中的12根(全局線或域內線)可以進入上下兩側的CLB列併爲之提供時鐘。
實際上,在正常設計中都不會在一個CLB列中用到12根以上的時鐘線。
IO時鐘網絡
每個時鐘域有4個IO時鐘網,均由BUFIO驅動,只能驅動IO Bank上的時鐘引腳,可提供最高質量的時鐘,具有最小的延遲,適用於時鐘源同步高速應用。但只具有低的扇出數。
7系列芯片的IO口、域內時鐘網絡緩衝器、IO口串行並行轉換器(I/OSERDES)等資源都高度集中於IOB列內,爲高速時鐘源同步接口(Source-Synchronous Interface)的搭建提供了強大的保障。
最高可實現1066Gb/s的傳輸速度。
作爲單數據率(SDR)接口時,BUFR可被配置爲/N;
作爲雙數據率(DDR)接口時,BUFR則被配置爲/(N/2)。
每個IO Bank內有兩個BUFMR。
BUFMR可將其所在時鐘域內由“MRCC引腳輸入的時鐘信號”和“CT時鐘信號”發送到上下相鄰的時鐘域的BUFR上,從而實現類似“局部時鐘域擴張”的效果,最多可實現3個IO Bank共150個IO口的時鐘同步。
使用xilinx提供的原語可構建出如上圖所示的,跨時鐘域同步系統。
每個Bank內存在2塊MMCM,每個MMCM可通過4根高性能時鐘線爲IOB列提供高性能時鐘源。
該時鐘線可直接驅動BUFIO、BUFR和OSERDES的時鐘。
高性能時鐘線具有最短的路徑、最低的延時和抖動。
當用戶爲某些功能的佈局設置了嚴格的時序約束時,Vivado軟件將自動使用這些時鐘線。
至此,我們可見:
> 驅動全局時鐘線的BUFGCTRL和BUFH均位於芯片的中心列;
> 驅動局域時鐘和IO口時鐘的CCIO、BUFIO、BUFR等均位於IO列;
> MMCM和PLL則位於緊鄰IO列的CMT列;
> GT時鐘源位於GT列。
對於某些需要用到多個上述資源的應用,就有可能需要連接這些資源。
爲此,FPGA內還在HCLK行內提供了專用的佈線資源(Routing Path),專門用於在這些器件之間傳導時鐘信號(可由Vivado軟件自動實現)。
SLR(Super Logic Region)
某些大規模的7系列芯片採用了Xilinx的堆疊硅片互聯(SSI)技術製造,實現了異構3D FPGA。
SSI技術可將多個芯片整合爲單個芯片,同時與多芯片方法相比,其每瓦特的晶片間帶寬增加了100 倍,時延減至五分之一,而且不會佔用任何高速串行或並行 I/O 資源。。
SSI利用無源(無晶體管)65nm 硅中介層上的與大節距硅通孔(TSV)技術整合在一起的業經驗證的微凸塊技術,在單個FPGA 器件上提供了高可靠性的互連,同時性能沒有絲毫降低。
這一突破性技術爲需要高邏輯密度和巨大計算性能的應用提供了更緊密的高級系統集成。
微凸塊並非直接連接於封裝,而是互聯到無源硅中介層,進而連接到相鄰的芯片。這種設置方法能夠避免微凸塊受到靜電放電的影響,從而帶來巨大優勢。
通過芯片彼此相鄰,並連接至球形柵格陣列,該器件避免了採用單純的垂直硅片堆疊方法出現的熱通量、信號完整性和設計工具流問題。
而此類FPGA芯片中的每一個Die就是一個“超級邏輯域塊(SLR Block)”,SLR的邊界位於時鐘域的邊界。
在這些FPGA中,垂直全局時鐘線跨越了多個SLRs。
使用多個SLR來完成同步應用時,時鐘延遲將會增加,Vivado軟件將會考慮到這個延遲。
實際上,對於具有嚴格時序要求的高速應用而言,並不建議跨SLR實現;
而建議通過合理的功能模塊劃分和區域約束(Area Constrain),將一個功能模塊限制在一個SLR(Die)內部。
BUFMR驅動的時鐘線無法跨越SLR。
時鐘網絡小結
-----------------------------------------------------------------------------------------------------------------------------
CMT(Clock Management Title)
7系列FPGA的CMT內沒有DCM,其功能被集成到了PLL;並加入了MMCM(Mixed-Mode Clock Manager)與PLL共同組成CMT。
每個芯片中含有24個CMT,用戶均可通過原語“*_BASE”和“*_ADV”調用,前者提供CMT的基本端口,後者則提供所有端口。
PLL主要用於與IO相位器一起,驅動高速存儲控制器;而MMCM主要用於爲用戶的應用模塊提供時鐘源。
PLL結構
PLL和MMCM共有功能
PLL和MMCM均會將其PFD(鑑頻鑑相器)的頻率與反饋時鐘CLKFB的時鐘頻率鎖定;而將反饋時鐘CLKFB的時鐘相位和輸入時鐘CLKIN的相位鎖定。
可見PLL僅提供分辨率爲1/8 VCO週期的靜態相位偏置功能。這是與MMCM最大的區別。
MMCM特有功能
如上圖所示,爲了實現鎖相,VCO(壓控頻振盪器)必須工作在“M/D”倍的CLKIN頻率,而各個通道的輸出時鐘頻率則爲“M/(D*O)”倍的CLKIN頻率。
可見,D和M決定了PLL的性能表現:
選用過高的D值,PFD的性能將變差,此時PLL的輸出抖動將會增大,因此應該儘可能使用較小的D值;
同時,較小的D值也意味着VCO將工作在更高的頻率,而使用戶擁有更多的頻率選擇;
但是,過高的VCO頻率也將導致更高的功耗(和發熱),因此還需要選用儘可能小的M值來降低VCO的工作頻率;
但是過小的M值實際上又降低了時鐘反饋的採樣頻率,這也會降低PLL的動態性能,導致抖動增大。
通常情況下PFD和VCO的工作頻率越高,PLL消除抖動的效果就越好。因此我們應該儘可能提高VCO的工作頻率。
爲了更合理得配置PLL或MMCM的D、M、O參數,用戶可以使用Vivado軟件中的Core Generator工具,並在創建CMT時關注其Jitter計算器的抖動分析結果,從而使CMT在滿足應用頻率需求的同時保證信號的完整性。
-----------------------------------------------------------------------------------------------------------------------------
CMT的使用【32:56】
CMT常用於驅動BUFG和BUFH,而MMCM的O0~O3輸出還可以驅動所在時鐘域內的BUFIO、BUFR和OSERDES的時鐘。
在設計高速時鐘源同步IO接口時,對時鐘的同步性具有很高的要求,此類應用對時鐘樹延遲(Clock Insertion Delay,見後文)非常的敏感,不能使用過長的時鐘線,因此最好選用以下時鐘源來爲此類應用的PLL/MMCM提供時鐘:
> 當前時鐘域內的CCIO引腳;
> 上下兩側相鄰時鐘域內的CCIO引腳;
> BUFG;
> BUFH;
> BUFR;
> GT時鐘。
上述時鐘源中,只有GT時鐘線不能作爲PLL/MMCM的CLKFB端口的輸入。
MMCM的插補精密移相(Interpolated Fine Phase Shift, IFPS)功能
除了靜態移相功能外,MMCM還提供了插補的精密移相功能,VCO的輸出可以以1/56週期爲單次相位增量來進行相位的動態或靜態的插補變化。且移相範圍爲0°~ 360°。
時鐘樹延遲/時鐘嵌套延遲(Clock Insertion Delay)【39:27】
由於時鐘樹上的BUF的串聯,而在時鐘線的末梢造成很大的時鐘延遲。
在全局時鐘線上尤爲明顯,因此,對於高速應用而言,不建議採用全局時鐘線來提供時鐘源。
用PLL/MMCM的外部閉環消除時鐘樹延遲
Vivado軟件會根據用戶的區域約束和時鐘約束自動完成該功能的佈局(通過將COMPENSATION自動設置爲ZHOLD模式)。
復位後,需要給PLL/MMCM一定的時間,它們才能完成穩定的鎖相。
經過PLL/MMCM消除時鐘樹延遲後,使用同一個時鐘源的器件之間,就可以通過非常簡單的通訊接口實現互聯。
需要注意的是,內部PLL/MMCM僅僅消除了從器件的全局時鐘引腳到該器件的任意一個IO Bank上的時鐘樹延遲;但是其並不能消除由器件外部的時鐘線在PCB上的佈線距離差異所造成的延遲(相位偏差),這個延遲只能通過更合理地設計PCB上的全局時鐘線來保證。
用PLL/MMCM內部閉環消除輸入時鐘抖動【41:40】
用PLL/MMCM實現內部多時鐘
Vivado軟件會根據用戶的描述,智能自動地完成很多CMT配置,以保證用戶功能的實現。
用PLL/MMCM實現時鐘鏡像
該應用需要用戶將COMPENSATION設置爲EXTERNAL模式。
採用該設計可用FPGA爲其他芯片提供同步時鐘。
綜合上述應用可見,CMT可大幅降低用戶爲不同邏輯芯片/電路配備不同時鐘源電流的開支,非常便於實現可靈活配置的時鐘系統。
時鐘資源的使用
可見,Vivado軟件只能推導(調用)和全局時鐘線相關的BUFG原語和BUFH原語來搭建(綜合)整個時鐘網絡;但是並不會主動推導BUFIO、BUFR、BUFMR和CMT原語來滿足用戶的高速應用需求。
在高速應用設計中,用戶必須自己調用這些高速時鐘資源(可使用Core Generator工具進行),然後軟件纔會將其納入綜合和自動優化配置的過程(並且會自主修復很多配置上的錯誤)。
-----------------------------------------------------------------------------------------------------------------------------