FPGA重點(diǎn)知識13條,助你構建完整“邏輯觀(guān)”之二
異步時(shí)鐘同步化
本文引用地址:http://dyxdggzs.com/article/201802/375719.htm通過(guò)雙觸發(fā)器接口,異步信號輸入總是無(wú)法滿(mǎn)足數據的建立保持時(shí)間,所以建議大家把所有異步輸入都先經(jīng)過(guò)雙觸發(fā)器進(jìn)行同步化。如圖所示,時(shí)鐘域clk_s傳給時(shí)鐘域clk_d的數據經(jīng)過(guò)了雙觸發(fā)器的同步處理,相同的,時(shí)鐘域clk_d經(jīng)雙觸發(fā)器傳給時(shí)鐘域clk_s的數據
通過(guò)高頻時(shí)鐘同步化,當在單個(gè)系統中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數據的建立和保持時(shí)間很難得到保證,我們將面臨復雜的時(shí)間問(wèn)題,最好的方法是將所有非同源時(shí)鐘同步化:選用一個(gè)頻率是它們的時(shí)鐘頻率公倍數的高頻主時(shí)鐘將他們進(jìn)行同步。
假設系統有兩個(gè)不同源時(shí)鐘,一個(gè)為3MHz,一個(gè)為5MHz,不同的觸發(fā)器使用不同的時(shí)鐘。為了系統穩定,假設我們引入一個(gè)20MHz時(shí)鐘。

用modelsim仿真后得到的時(shí)序圖如圖所示

9、如何確定時(shí)序約束數值
FPGA工程的功能框圖如圖所示。上電初始,FPGA需要通過(guò)IIC接口協(xié)議對攝像頭模塊進(jìn)行寄存器初始化配置。這個(gè)初始化的基本參數,如初始化地址和數據存儲在一個(gè)預先配置好的FPGA內嵌ROM中。在初始化配置完成后,攝像頭就能夠持續輸出RGB標準的視頻數據流,FPGA通過(guò)對其相應的時(shí)鐘、行頻和場(chǎng)頻進(jìn)行檢測,從而一幀一幀的實(shí)時(shí)采集圖像數據。
采集到的視頻數據先通過(guò)一個(gè)FIFO,將原本25MHz頻率下同步的數據流轉換到100MHz頻率下。接著(zhù)講這個(gè)數據再送入寫(xiě)SDRAM緩存的FIFO中,最終這個(gè)FIFO每滿(mǎn)160個(gè)數據就會(huì )將其寫(xiě)入SDRAM的相應地址中。在另一側,使用另一個(gè)異步FIFO將SDRAM緩存的圖像數據送個(gè)LCD驅動(dòng)模塊。LCD驅動(dòng)模塊不斷的讀出新的現實(shí)圖像,并且驅動(dòng)3.5寸液晶屏工作。

由于這個(gè)工程是移植過(guò)來(lái)的,SDRAM的時(shí)序約束已經(jīng)添加好并且很好的收斂了。但是,新增加的CMOS sensor的接口也需要做相應的時(shí)序約束。下面我們就來(lái)探討下它的時(shí)序該如何做約束。
先看看CMOS Sensor的datasheet中提供的時(shí)序波形和相應的建立、保持時(shí)間要求。波形如圖所示。

波形中出現的時(shí)間參數定義如下表所示。

我們可以簡(jiǎn)單分析下這個(gè)datasheet中提供的時(shí)序波形和參數提供了一些什么樣的有用信息。我們重點(diǎn)關(guān)注PCLK和D[7:0]的關(guān)系,HREF其實(shí)也可以歸類(lèi)到D[7:0]中一起分析,他們的時(shí)序關(guān)系基本是一致的(如果存在偏差,也可以忽略不計)。這個(gè)波形實(shí)際上表達的是從Sensor的芯片封裝管腳上輸出的PCLK和D[7:0]的關(guān)系。而在理想狀況下,經(jīng)過(guò)PCB走線(xiàn)將這組信號連接到其他的芯片上(如CPU或FPGA),若盡可能保持走線(xiàn)長(cháng)度,在其他芯片的管腳上,PCLK和D[7:0]的關(guān)系基本還是不變的。那么,對于采集端來(lái)說(shuō),用PCLK的上升沿去鎖存D[7:0]就變得理所當然了。而對于FPGA而言,從它的管腳到寄存器傳輸路徑上總歸是有延時(shí)存在的,那么PCLK和D[7:0]之間肯定不會(huì )是理想的對齊關(guān)系。而我們現在關(guān)心的是,相對于理想的對齊關(guān)系,PCLK和D[7:0]之間可以存在多大的相位偏差(最終可能會(huì )以一個(gè)延時(shí)時(shí)間范圍來(lái)表示)。在時(shí)序圖中,Tsu和Th雖然是PCLK和D[7:0]在Sensor內部必須保證的建立時(shí)間和保持時(shí)間關(guān)系,但它同樣是Sensor的輸出管腳上,必須得到保證的基本時(shí)序關(guān)系。因此,我們可以認為:理想相位關(guān)系情況下,PCLK上升沿之前的Tsu時(shí)間(即15ns)到上升沿后的Th時(shí)間(即8ns)內,D[7:0]是穩定不變的。同樣的,理想情況下,PCLK的上升沿處于D[7:0]兩次數據變化的中央。換句話(huà)說(shuō),在D[7:0]保持當前狀態(tài)的情況下,PCLK上升沿實(shí)際上在理想位置的Tsu時(shí)間和Th時(shí)間內都是允許的。請大家記住這一點(diǎn),下面我們需要利用這個(gè)信息對在FPGA內部的PCLK和D[7:0]信號進(jìn)行時(shí)序約束。

OK,明確了PCLK和D[7:0]之間應該保持的關(guān)系后,我們再來(lái)看看他們從CMOS Sensor的管腳輸出后,到最終在FPGA內部的寄存器進(jìn)行采樣鎖存,這整個(gè)路徑上的各種“艱難險阻”(延時(shí))。

在這個(gè)路徑分析中,我們不去考慮CMOS Sensor內部的時(shí)序關(guān)系,我們只關(guān)心它的輸出管腳上的信號。先看時(shí)鐘PCLK的路徑延時(shí),在PCB上的走線(xiàn)延時(shí)為T(mén)cpcb,在FPGA內部,從進(jìn)入FPGA的管腳到寄存器的時(shí)鐘輸入端口的延時(shí)為T(mén)cl。再看數據D[7:0]的延時(shí),在PCB上的走線(xiàn)延時(shí)為T(mén)dpcb,在FPGA內部的管腳到寄存器輸入端口延時(shí)為T(mén)p2r。而FPGA的寄存器同樣有建立時(shí)間Tsu和保持時(shí)間Th要求,也必須在整個(gè)路徑的傳輸時(shí)序中予以考慮。
另外,從前面的分析,我們得到了PCLK和D[7:0]之間應該滿(mǎn)足的關(guān)系。那么,為了保證PCLK和D[7:0]穩定考慮的得到傳輸,我們可以得到這樣一個(gè)基本的關(guān)系必須滿(mǎn)足:
對于建立時(shí)間,有:
Launch edge + Tdpcb + Tp2r + Tsu < latch edge + Tcpcb + Tcl
對于保持時(shí)間,有:
Launch edge + Tdpcb + Tr2p < latch edge + Tcpcb + Tcl – Th
關(guān)于launch edge和latch edge,對于我們當前的設計,如下圖所示。

在對這個(gè)FPGA的input接口的時(shí)序進(jìn)行分析和約束之前,我們先來(lái)看看Altera官方是如何分析此類(lèi)管腳的時(shí)序。

具體問(wèn)題具體分析,我們當前的工程,狀況和理想模型略有區別。實(shí)際上在上面這個(gè)模型的源寄存器端的很多信息都不用詳細分析,因為我們獲得的波形是來(lái)自于Sensor芯片的管腳。同理,我們可以得到input delay的計算公式如下。
Input max delay = (0 – Tcpcb_min) + Tco_max + Tdpcb_max
Input min delay = (0 – Tcpcb_max) + Tco_min + Tdpcb_min
在這兩個(gè)公式中,參數Tco是前面我們還未曾提到的,下面我們就要分析下如何得到這個(gè)參數。Tco指的是理想情況下數據在源寄存器被源時(shí)鐘鎖存后,經(jīng)過(guò)多長(cháng)時(shí)間輸入到管腳上。前面我們已經(jīng)得到了PCLK和D[7:0]之間的關(guān)系,其實(shí)從已知的關(guān)系中,我們不難推斷出Tco_max和Tco_min,如圖所示。若PCLK的時(shí)鐘周期為T(mén)pclk,則:
Tco_max = Tpclk – Tsu
Tco_min = Th
在我們采樣的CMOS Sensor圖像中,PCLK頻率為12.5MHz,即80ns。因此,我們可以計算到:
Tco_max = 80ns – 15ns = 65ns
Tco_min = 8ns

我們再看看PCB的走線(xiàn)情況,算算余下和PCB走線(xiàn)有關(guān)的延時(shí)。
評論