在工程中,發現有編譯的警告,如下:
PLL "<name>" output port <name> feeds output pin "<name>" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance。
初步斷定是PLL的輸出引腳不在特定的走線上造成的,於是決定研究一下EP3C40的時鍾資源。

圖一
從圖一可知,EP3C40上下左右各有4個專用時鍾引腳CLK[..],其中上下四個布置緊湊。兩用時鍾引腳DPCLK有12個。CPDCLK較為特殊一點,,它們首先通過選擇器再接入時鍾控制模塊,共有8個。這20個兩用時鍾引腳通常用於接入時鍾或者異步控制信號,比如異步復位信號。
我們還可以在圖中看到GCLK,這個就是全局時鍾數,它的概念很重要,全局時鍾數就是一個網絡,它能為FPGA內部的所有資源提供時鍾信號,為什么要它來運作時鍾信號呢?一句話,它能保證到達各種資源的時鍾沿同步,skew非常小。
上圖中我們還可以看出,EP3C40包含了四個鎖相環(PLL),鎖相環支持單端的時鍾輸入和差分的時鍾輸入兩種輸入方式,值得注意的是,只有使用專用的時鍾輸入管腳的時鍾信號才能驅動鎖相環。
如圖一所示的CLK[0..15]就是特定的時鍾腳。不但PLL有特定的輸入引腳,而且如果PKK供給外部時鍾的話,那么這個外部時鍾引腳也是需要特定的,當然,這只是要求,用其他普通引腳也行,但是會產生…. jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance這樣的報警。
從何區分這些引腳了呢?我們來看芯片引腳鳥瞰圖:

圖二
圖二中的
表示的就是專用時鍾輸入引腳,共有16個CLK專用腳。(里面的顏色代表着引腳划分的Bank,這里附帶說一下,做原理圖時,最好把同一功能模塊的用腳划分到一個Bank內,這樣減少布線長度,有利於時序達成)
表示的就是專用PLL供給外部時鍾引腳,這里成對出現,就是時鍾的PLLx_CLKOUTp & PLLx_CLKOUTn差分信號。具體哪個是p哪個是n可在手冊里查找:(如下圖三)

圖三
除了專用的輸出引腳,需要注意的是只有C0才能不使用全局時鍾數GCLK來供給專用的外圍時鍾引腳,其它輸出(C1-C4)需要通過全局時鍾樹GCLK來驅動外圍IO。

圖四
圖四所示,全局時鍾數資源有限,在一個大系統里為了利用好它,C0供給外部器件的時鍾是一個可用的辦法。
還有個需要提醒的是,實踐證明:PLLx_CLKOUTp & PLLx_CLKOUTn這兩者,如果只用一端的話,應該取用PLLx_CLKOUTp,配置成PLLx_CLKOUTn警告還是無法消除。
最后一個疑問:我們在系統中隨意創建的一個PLL,到底是哪一個呢(PLL1-PLL4),本質上來說這和編譯器有關,編譯器會自動優化,但是影響它的比較重要的因素還是引腳位置,經過我的工程實踐,輸入引腳和輸出引腳會很大程度上影響PLL分配,

圖五
假設AB11引腳供給系統時鍾的話,經過鎖相環PLL輸出到T16(可參考圖二鳥瞰圖),編譯器會把這個PLL優化成PLL4。而在圖三中已經顯示了F484系列的PLL4專用輸出引腳是T16,正是因為工程中沒有把T16分配給PLL輸出時鍾腳,所以才產生...jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance的報警。
(歡迎轉載,請注明出處---憤怒de狂奔)
