【分享】 MPSoC的VCU超頻
1. 超頻介紹
很多晶片可以暫時超頻使用。 當然,出於良品率、長期可靠性考慮,廠家官方都不建議超頻使用。
Xilinx的器件質也能超頻。幾年前,當Zynq-7000剛面世時,通過修改PLL的設定,7020的A9的頻率被超頻到1GHz後,也能正常執行。
最近有人問到MPSoC的VCU能不能超頻。檢查Vivado裡的VCU設計後,確認通過簡單步驟,VCU也能超頻。這是黑客操作。請確保電源有足夠的供電、單板有足夠的散熱能力。超頻後,VCU已經工作在產品規格之外,工程師需要承擔器件可能損壞的責任。如果在產品中使用,一定要注意在高溫、低溫等極端情況下,是否能正常工作。
2. VCU正常設計
2.1. VCU時鐘
VCU編解碼器內部使用時鐘pll_ref_clk,所有外部AXI介面使用其它時鐘。如果調整內部時鐘pll_ref_clk,不會影響外部介面時鐘,也不會引起時序問題。所以非常方便。
VCU的訊號如下。
VCU的訊號說明。
VCU的工作時鐘一般是667MHz,由VCU自己內部的PLL產生。
2.2. Clocking Wizard配置
VCU內部時鐘pll_ref_clk來自於外部時鐘晶片si570的輸出。si570的輸出是300MHz的時鐘,進入PL後,經過一個Clocking Wizard,產生33MHz給VCU作為pll_ref_clk。
下圖展示了VCU的時鐘來源,包括從si570到Clocking Wizard的設計。
Clocking Wizard的輸入是300MHz。
Clocking Wizard的輸出是33.33MHz。
2.3. 單板時鐘
2.3.1. vivado介面屬性
PL設計中,來自於外部時鐘晶片si570的訊號是si570_user。在Vivado的屬性設定裡,聲明瞭si570_user是300MHz。
2.3.2. vivado約束
vivado約束檔案裡,也指定了si570_user的週期是3.333ns,對應的頻率是300MHz。
set_property PACKAGE_PIN AH12 [get_ports {si570_user_clk_p[0]}] set_property IOSTANDARD LVDS [get_ports {si570_user_clk_p[0]}] create_clock -period 3.333 [get_ports si570_user_clk_p]
3. 超頻步驟
Vivado會檢查VCU的時鐘。如果VCU的時鐘超出規格,會報錯。
超頻的核心訣竅是欺騙Vivado,向Vivado宣告一個假的時鐘頻率。比如實際輸入頻率是300MHz,我們在設計中卻告訴它是200MHz。那麼在後續的倍頻操作中,Vivado會以200MHz計算出產生667MHz的倍頻分頻係數,實際得到的頻率就是667*(300/200),也就是1000MHz。
測試時,打算把VCU的頻率超頻到933MHz。VCU的配置裡,已經把VCU的頻率,改為712MHZ。因此要把輸入頻率,降低933/712=1.310倍,也就是改為300/1.310=228.9MHz,對應的週期4.368。
3.1. vivado介面屬性
在Vivado的屬性設定裡,把si570_user的頻率,從300MHz,改為228.9MHz。
3.2. vivado約束
vivado約束檔案裡,也指定了si570_user的週期是4.368ns,對應的頻率是933MHz。
set_property PACKAGE_PIN AH12 [get_ports si570_user_clk_p]
set_property IOSTANDARD LVDS [get_ports si570_user_clk_p]
create_clock -period 4.368 [get_ports si570_user_clk_p]
4. 結論
編譯Vivado工程,更新PetaLinux工程的HDF檔案,再產生Linux檔案。單板能正常啟動,編碼4K檔案時,幀率能夠顯著提升。
最後,再次宣告,超頻後,VCU已經工作在產品規格之外,需要自己承擔器件可能損壞的責任。