|
VGA驅動接口時序設計之3時鐘約束 本文節選自特權同學的圖書《FPGA設計實戰演練(邏輯篇)》 配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 如圖8.26所示,FPGA產生的數據data_out和時鐘clk_out的理想波形是時鐘上升沿鎖存到穩定可靠的數據。(特權同學,版權所有)
圖8.26 源同步接口寄存器和時序波形關系 下面我們來探討如何對這個設計進行約束。首先,對系統的輸入時鐘(25MHz)、PLL產生的時鐘進行約束。約束腳本如下。(特權同學,版權所有) create_clock -name {clk} -period 40.000 -waveform { 0.000 20.000} [get_ports {clk}] derive_pll_clocks –use_tan_name derive_pll_clocks語句將會自動且準確覆蓋PLL產生的所有時鐘路徑。在本實例中,以上的約束將會覆蓋如圖8.27所示的時鐘。(特權同學,版權所有)
圖8.27 時鐘約束可覆蓋路徑 接著,對lcd_clk這個時鐘進行約束,它需要約束為虛擬(virtul)時鐘,將會被用于output port上的數據鎖存時鐘。因為我們這個工程可能會用到25MHz的lcd_clk,也會用到50MHz的lcd_clk,因此我們以頻率更高的50MHz為例進行說明。系統的50MHz是PLL的clk[1]輸出的,因此我們約束這個虛擬時鐘如圖8.28所示。(特權同學,版權所有)
圖8.28 虛擬時鐘約束 對應的腳本如下。(特權同學,版權所有) create_generated_clock -name LCD_CLK -source [get_ports {vga_clk}] 這個虛擬時鐘將會在FPGA內部對tx_data的reg2pin進行時序分析時作為latch時鐘。實際對于一般的reg2reg路徑的分析,由于他們的launch和latch時鐘都在FPGA內部,若像前面一樣做過時鐘的約束,那么FPGA對這些內部的時鐘就已心知肚明,無需什么虛擬時鐘。而對于pin2reg或reg2pin的路徑分析,則一般都需要用戶指定一個符合相關時鐘要求的虛擬時鐘,這個虛擬時鐘就作為pin端的時鐘來分析時序,我們這里所約束的虛擬時鐘對應的路徑如圖8.29所示。(特權同學,版權所有)
圖8.29 虛擬時鐘路徑 如圖8.30所示,有了時鐘lcd_clk,我們才能對數據路徑進行合適的約束。本例中,有兩條關于時鐘的路徑延時,我們假設PLL輸出的時鐘是源和目的時鐘的起點,以這個點為基準,時鐘到達源寄存器,其路徑延時為Tc2t;時鐘到達目的寄存器,即ADV7123芯片的引腳輸入端,其路徑延時為Tc2r,這個延時包括了時鐘從PLL輸出到FPGA引腳的延時以及時鐘從FPGA的引腳到ADV7123引腳的延時,后者的延時是PCB走線產生的延時。再來看數據路徑,數據首先進入源寄存器的輸入端口后,在源寄存器內部經過延時Tco,接著數據從源寄存器的輸出端口到FPGA引腳上的延時Tr2p,還有就是數據在PCB上的延時Tdpcb,最后在計算ADV7123的時序時,我們必須將數據的建立時間Tsu和保持時間Th考慮在內。(特權同學,版權所有)
圖8.30 時序路徑模型 |