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