FPGA的時鍾資源介紹主要分為三部分。第一部分是區域結構,第二部分是元件功能,第三部分是實現方式。
首先FPGA的時鍾資源負責驅動所有的時序邏輯,生產商盡力使得時鍾資源充分,可靠,為了達成這一目的,xilinx采取了結構化的時鍾資源布局方式。
首先將整個板子分為左右兩部分,寬度完全一致,中間是大動脈。也就是下圖中的Clocking Center位置的Clocking Backbone,所有的BUFG(Global Clock buffers)也是包含在這里面。
顧名思義,BUFG是全局的Clock buffer。
BUFG能
1.作為時鍾使能控制跨越了數個時鍾域的時鍾
2.作為無毛刺的多路復用器進行時鍾二選一亦或是切換掉失效的時鍾
3.被CMT驅動來消除時鍾分發延遲,調整相對另一個時鍾的延遲
以上是來自UG的翻譯,不必深究,我們只需要知道它的驅動范圍最廣,分布位置在中間的大動脈里就行了。
一條動脈顯然無法給整個人體供血,有限個數(7系列有32條布線資源)的BUFG也無法直接驅動所有的邏輯資源。雖然BUFG的驅動范圍最廣,但是所有資源都使用BUFG也不能獲得最好的效果。(為什么?)
所以我們還需要橫向的血管,也就是HROW(Horizontal Clock Row),它們等距水平分布,非常像模擬城市里建造道路時的棋盤式布局。但是HROW不同於Clock Backbone,它們主要負責相鄰上下兩個部分的時序邏輯資源驅動,具體實現則通過BUFH,BUFH相當於作用范圍閹割版的BUFG。每個時鍾域內有12條BUFH的布線資源,也就是說,一個時鍾域最多能用12條BUFH布線資源引入12個BUFG的時鍾。
在這里還要強調一點,所有的全局時鍾信號線布線時都必須經過Clock Backbone,而當全局時鍾信號線從Clock Backbone出來之后,要進入具體的時鍾區域時,則必須通過HROW。那么我們可以這么總結,所有的全局時鍾線布線時都必須經過Clock Backbone和HROW,BUFG和BUFH共享HROW中的布線資源。一條進入某個時鍾域內的路徑可以是一條BUFG的信號線從Clock Backbone中引出,再接到BUFH上,總共使用了一條BUFG的布線資源(1/32)和(1/12),當然,信號線是可以復用的。
時鍾區域是什么?時鍾區域是板子的划分,它的上下界限在兩條HROW的中間處,也就是說,每個時鍾區域的中間都有一條HROW橫穿而過。而它的左右界限則是兩條CMT Backbone的中間處,同理,每個時鍾區域的中間都有一條CMT Backbone豎穿過去。根據板子的大小不同,時鍾域數量從1到24不等。一個時鍾域包括了所有的同步組件(CLB, I/O, serial transceivers, DSP, block RAM, CMT)。每個時鍾域包括了50個CLB和1個I/O bank(50 I/Os)。
在橫向的血管之外,我們還需要小血管和毛細血管,對應BUFMR和BUFR。BUFMR可以驅動本時鍾域內所有的時序資源以及上下相鄰的兩個時鍾域。當它驅動相鄰時鍾域時,布線需要經過CMT Backbone。而BUFR只能驅動本時鍾域內的時序資源。
而BUFIO只能驅動本時鍾域/本I/O域內的I/O部件。
至此,基本的結構就介紹完了,除此之外還有I/O Column和GT column,我們稍后介紹。