FPGA重點知識13條,助你構(gòu)建完整“邏輯觀”之二
異步時鐘同步化
本文引用地址:http://butianyuan.cn/article/201802/375719.htm通過雙觸發(fā)器接口,異步信號輸入總是無法滿足數(shù)據(jù)的建立保持時間,所以建議大家把所有異步輸入都先經(jīng)過雙觸發(fā)器進行同步化。如圖所示,時鐘域clk_s傳給時鐘域clk_d的數(shù)據(jù)經(jīng)過了雙觸發(fā)器的同步處理,相同的,時鐘域clk_d經(jīng)雙觸發(fā)器傳給時鐘域clk_s的數(shù)據(jù)
通過高頻時鐘同步化,當在單個系統(tǒng)中有兩個或兩個以上非同源時鐘的時候,數(shù)據(jù)的建立和保持時間很難得到保證,我們將面臨復(fù)雜的時間問題,最好的方法是將所有非同源時鐘同步化:選用一個頻率是它們的時鐘頻率公倍數(shù)的高頻主時鐘將他們進行同步。
假設(shè)系統(tǒng)有兩個不同源時鐘,一個為3MHz,一個為5MHz,不同的觸發(fā)器使用不同的時鐘。為了系統(tǒng)穩(wěn)定,假設(shè)我們引入一個20MHz時鐘。
用modelsim仿真后得到的時序圖如圖所示
9、如何確定時序約束數(shù)值
FPGA工程的功能框圖如圖所示。上電初始,FPGA需要通過IIC接口協(xié)議對攝像頭模塊進行寄存器初始化配置。這個初始化的基本參數(shù),如初始化地址和數(shù)據(jù)存儲在一個預(yù)先配置好的FPGA內(nèi)嵌ROM中。在初始化配置完成后,攝像頭就能夠持續(xù)輸出RGB標準的視頻數(shù)據(jù)流,F(xiàn)PGA通過對其相應(yīng)的時鐘、行頻和場頻進行檢測,從而一幀一幀的實時采集圖像數(shù)據(jù)。
采集到的視頻數(shù)據(jù)先通過一個FIFO,將原本25MHz頻率下同步的數(shù)據(jù)流轉(zhuǎn)換到100MHz頻率下。接著講這個數(shù)據(jù)再送入寫SDRAM緩存的FIFO中,最終這個FIFO每滿160個數(shù)據(jù)就會將其寫入SDRAM的相應(yīng)地址中。在另一側(cè),使用另一個異步FIFO將SDRAM緩存的圖像數(shù)據(jù)送個LCD驅(qū)動模塊。LCD驅(qū)動模塊不斷的讀出新的現(xiàn)實圖像,并且驅(qū)動3.5寸液晶屏工作。
由于這個工程是移植過來的,SDRAM的時序約束已經(jīng)添加好并且很好的收斂了。但是,新增加的CMOS sensor的接口也需要做相應(yīng)的時序約束。下面我們就來探討下它的時序該如何做約束。
先看看CMOS Sensor的datasheet中提供的時序波形和相應(yīng)的建立、保持時間要求。波形如圖所示。
波形中出現(xiàn)的時間參數(shù)定義如下表所示。
我們可以簡單分析下這個datasheet中提供的時序波形和參數(shù)提供了一些什么樣的有用信息。我們重點關(guān)注PCLK和D[7:0]的關(guān)系,HREF其實也可以歸類到D[7:0]中一起分析,他們的時序關(guān)系基本是一致的(如果存在偏差,也可以忽略不計)。這個波形實際上表達的是從Sensor的芯片封裝管腳上輸出的PCLK和D[7:0]的關(guān)系。而在理想狀況下,經(jīng)過PCB走線將這組信號連接到其他的芯片上(如CPU或FPGA),若盡可能保持走線長度,在其他芯片的管腳上,PCLK和D[7:0]的關(guān)系基本還是不變的。那么,對于采集端來說,用PCLK的上升沿去鎖存D[7:0]就變得理所當然了。而對于FPGA而言,從它的管腳到寄存器傳輸路徑上總歸是有延時存在的,那么PCLK和D[7:0]之間肯定不會是理想的對齊關(guān)系。而我們現(xiàn)在關(guān)心的是,相對于理想的對齊關(guān)系,PCLK和D[7:0]之間可以存在多大的相位偏差(最終可能會以一個延時時間范圍來表示)。在時序圖中,Tsu和Th雖然是PCLK和D[7:0]在Sensor內(nèi)部必須保證的建立時間和保持時間關(guān)系,但它同樣是Sensor的輸出管腳上,必須得到保證的基本時序關(guān)系。因此,我們可以認為:理想相位關(guān)系情況下,PCLK上升沿之前的Tsu時間(即15ns)到上升沿后的Th時間(即8ns)內(nèi),D[7:0]是穩(wěn)定不變的。同樣的,理想情況下,PCLK的上升沿處于D[7:0]兩次數(shù)據(jù)變化的中央。換句話說,在D[7:0]保持當前狀態(tài)的情況下,PCLK上升沿實際上在理想位置的Tsu時間和Th時間內(nèi)都是允許的。請大家記住這一點,下面我們需要利用這個信息對在FPGA內(nèi)部的PCLK和D[7:0]信號進行時序約束。
OK,明確了PCLK和D[7:0]之間應(yīng)該保持的關(guān)系后,我們再來看看他們從CMOS Sensor的管腳輸出后,到最終在FPGA內(nèi)部的寄存器進行采樣鎖存,這整個路徑上的各種“艱難險阻”(延時)。
在這個路徑分析中,我們不去考慮CMOS Sensor內(nèi)部的時序關(guān)系,我們只關(guān)心它的輸出管腳上的信號。先看時鐘PCLK的路徑延時,在PCB上的走線延時為Tcpcb,在FPGA內(nèi)部,從進入FPGA的管腳到寄存器的時鐘輸入端口的延時為Tcl。再看數(shù)據(jù)D[7:0]的延時,在PCB上的走線延時為Tdpcb,在FPGA內(nèi)部的管腳到寄存器輸入端口延時為Tp2r。而FPGA的寄存器同樣有建立時間Tsu和保持時間Th要求,也必須在整個路徑的傳輸時序中予以考慮。
另外,從前面的分析,我們得到了PCLK和D[7:0]之間應(yīng)該滿足的關(guān)系。那么,為了保證PCLK和D[7:0]穩(wěn)定考慮的得到傳輸,我們可以得到這樣一個基本的關(guān)系必須滿足:
對于建立時間,有:
Launch edge + Tdpcb + Tp2r + Tsu < latch edge + Tcpcb + Tcl
對于保持時間,有:
Launch edge + Tdpcb + Tr2p < latch edge + Tcpcb + Tcl – Th
關(guān)于launch edge和latch edge,對于我們當前的設(shè)計,如下圖所示。
在對這個FPGA的input接口的時序進行分析和約束之前,我們先來看看Altera官方是如何分析此類管腳的時序。
具體問題具體分析,我們當前的工程,狀況和理想模型略有區(qū)別。實際上在上面這個模型的源寄存器端的很多信息都不用詳細分析,因為我們獲得的波形是來自于Sensor芯片的管腳。同理,我們可以得到input delay的計算公式如下。
Input max delay = (0 – Tcpcb_min) + Tco_max + Tdpcb_max
Input min delay = (0 – Tcpcb_max) + Tco_min + Tdpcb_min
在這兩個公式中,參數(shù)Tco是前面我們還未曾提到的,下面我們就要分析下如何得到這個參數(shù)。Tco指的是理想情況下數(shù)據(jù)在源寄存器被源時鐘鎖存后,經(jīng)過多長時間輸入到管腳上。前面我們已經(jīng)得到了PCLK和D[7:0]之間的關(guān)系,其實從已知的關(guān)系中,我們不難推斷出Tco_max和Tco_min,如圖所示。若PCLK的時鐘周期為Tpclk,則:
Tco_max = Tpclk – Tsu
Tco_min = Th
在我們采樣的CMOS Sensor圖像中,PCLK頻率為12.5MHz,即80ns。因此,我們可以計算到:
Tco_max = 80ns – 15ns = 65ns
Tco_min = 8ns
我們再看看PCB的走線情況,算算余下和PCB走線有關(guān)的延時。
評論