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已經工作在產品規格之外,需要自己承擔器件可能損壞的責任。