在設(shè)計中,經(jīng)常遇到需要將PLL的輸出時鐘通過FPGA的管腳輸出到外部供外部器件使用,例如SDRAM的同步時鐘腳,千兆以太網(wǎng)的GTXCLK時鐘。在大多數(shù)的情況下,我們隨便選擇一個腳將該時鐘引出,不會有任何問題,但是,在全編譯的時候,會報一個15064的警告,例如在千兆以太網(wǎng)系統(tǒng)中,輸出到千兆PHY的GMII接口發(fā)送時鐘的PLL1的C0就會報出如下警告.(看不清可以點(diǎn)擊圖片,查看高清大圖哦)。
Warning (15064): PLL "pll:pll|altpll:altpll_component|pll_altpll:auto_generated|pll1" output port clk[0] feeds output pin "GMII_GTXC~output" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance
先給這句話翻譯一下吧:
警告(15064): "pll:pll|altpll:altpll_component|pll_altpll:auto_generated|pll1" (這是一個PLL的名字)的輸出端口clk[0] 驅(qū)動"GMII_GTXC~output"腳是通過非非專用的布線路徑,其抖動程度(時鐘抖動概念可以某度)取決于其他設(shè)計單元的翻轉(zhuǎn)速度,使用專用的PLL時鐘輸出腳來保證抖動的程度(盡量小)
那么好,現(xiàn)在的問題來了,怎樣知道哪個引腳才是哪個PLL的對應(yīng)的專用輸出IO呢?挺簡單的。
在Quartus II軟件中引腳分配的時候,找以L標(biāo)識的引腳,然后把鼠標(biāo)光標(biāo)移到該引腳上,就會彈出該引腳信息,在彈出的信息框中,就會標(biāo)明該引腳是屬于哪個PLL的CLKOUTn或者CLKOUTp,例如,在EP4CE30中,AA3腳就是標(biāo)識為L的腳,其引腳信息顯示,其為PLL1的CLKOUTp管腳(PLL1_CLKOUTp),同樣的,AB3引腳的標(biāo)識符也為L,如果把光標(biāo)移動到AB3引腳上,可以看到該引腳信息為(PLL1_CLKOUTn)。如果是使用單端時鐘輸出,那么就應(yīng)該將PLL的這個輸出分配到CLKOUTp引腳上。如果是差分時鐘輸出,那么就應(yīng)該將PLL的時鐘以差分模式分別分配到CLKOUTp和CLKOUTn上。
例如上述千兆網(wǎng)例子中,將GMII_GTXC信號分配到AA3管腳后,報錯信息就消失了。(當(dāng)然,由于硬件板卡上以太網(wǎng)PHY芯片的GMII_GTX中信號并沒有連接到該引腳,這樣改,警告是沒了,但是功能怕也是沒咯)。要兩者都能保證,只能改硬件板卡了耶。不過根據(jù)Intel官網(wǎng)上一些工程師的說法,這個警告其實(shí)一般可以不用太在意。
還有一個糾結(jié)的事情就是,一個PLL雖然最多可以產(chǎn)生5路輸出,但是每個PLL卻只對應(yīng)有一個專用時鐘輸出管腳,意思也就是,如果你用一個PLL產(chǎn)生多個輸出,還都需要通過IO輸出到外部器件,那么總會只有一時鐘能享受該專用輸出腳,其他的幾個時鐘信號還是只能走通用IO。
上述所述的情況其實(shí)非常的常見,典型的如圖像采集顯示系統(tǒng)—— CMOS攝像頭采集圖像存儲到SDRAM中,然后再由VGA接口輸出。
該系統(tǒng)中,需要使用PLL產(chǎn)生3個時鐘輸出到外部器件,一個CMOS_XCLK用以給CMOS攝像頭提供基本參考時鐘,一個SDRAM_CLK用來作為SDRAM器件的同步時鐘,一個VGA_CLK用來驅(qū)動VGA數(shù)模轉(zhuǎn)換器。
所以,針對這個警告,我們也就只能佛系對待了,本身影響不是十分大,要解決的代價卻還比較大,因此,阿彌陀佛。