天天看點

FPGA時序分析理論篇1、前言2、時序分析理論3、總結

1、前言

畢業後開始接觸FPGA,雖然在學校就學習過verilog,但是隻是學學開發闆的代碼,對于時序這塊還是接觸很少,畢業後第一個項目大量需要時序限制的知識,但是最後也沒用上,因為需要時序限制的IP核是老外寫的,自己寫的IP核不加也能用。我這裡寫的文章大多是參考黑金的文檔資料以及自己買的時序限制視訊,具體哪家自己淘寶。不過官方文檔,最為權威。

1.1 寄存器特性參數

對于如圖1所示的寄存器,時序分析時一定會遇到的三個時間參數是Tco、Tsu、Th。其中Tco是輸出延遲,指的是有效時鐘沿到來後,輸出引腳上獲得有效輸出的最大延遲時間。Tsu是建立時間,指的是寄存器想要正确寄存資料,資料需要在有效沿到來之前最小保持時間。Th指的是寄存器想要正确寄存時間,資料需要在有效沿到來之後,最小的穩定時間。三者的關系如圖2所示。

FPGA時序分析理論篇1、前言2、時序分析理論3、總結

                                                              圖1 一般寄存器的圖形表示

FPGA時序分析理論篇1、前言2、時序分析理論3、總結

                                                               圖2 Tco、Tsu、Th

圖2中,CLK的第一個上升沿後隔了Tco之後,寄存器的Q端開始有資料輸出。此時寄存器把資料發往下一個寄存器,下一個寄存器在第二個始終上升沿寄存資料,是以資料必須滿足在上升沿到來之前維持自身穩定Tsu的時長,且上升沿到來之後維持自身穩定Th時長。從圖形上看,以第一個時間上升沿為0刻度點的話,資料前端在時間必須早于Tclk-Tsu,後端時間大于Tclk+Th。

1.2 時序限制的目的

時序限制的目的,就是控制FPGA的綜合、布局和布線,使得寄存器可以正确的寄存資料。也就是說使得資料滿足建立時間大于Tsu,保持時間大于Th。一般說來,由于組合邏輯和線延時的存在,會使得資料建立時間不夠Tsu,但是Th是滿足的。

2、時序分析理論

2.1 時序分析的一般理論模型

時序分析的理論模型如圖2所示。REG1為源寄存器,REG2為目的寄存器。Tclk1是時鐘從全局時鐘資源到達REG1時鐘端的延遲,Tclk2是時鐘從全局時鐘資源到達REG2時鐘端的延遲,Tdata是資料從REG1到REG2中所有的延遲的總值,包括線延遲群組合邏輯延遲等。

FPGA時序分析理論篇1、前言2、時序分析理論3、總結

                                                                 圖3 時序分析的一般理論模型

2.2 建立關系和保持關系

對于同步時鐘設計,建立關系(set up relationship)一般為時鐘周期Tclk,保持關系(hold relationship)一般為0。

2.3 時序圖及其計算

對于圖3的一般時序模型,它的的時序圖如圖4所示,我們假定CLK的第一個上升沿為launch edge即發射沿,第二個上升沿為latch edge即鎖存沿。通過前段分析可知,資料想要正确被下一級寄存器寄存,必須滿足建立時間大于Tsu和保持時間大于Th,即滿足建立時間餘量(set up slack)和保持時間餘量(hold slack)。

FPGA時序分析理論篇1、前言2、時序分析理論3、總結

                                                               圖4 圖3的 時序圖

2.3.1 建立時間餘量(set up slack)

對于建立時間餘量(set up slack)有:

data arrival time = launch edge + Tclk1 + Tco + Tdata

注:對應到圖形中就是REG2.D的DATA的A端,資料到達時間指的是資料“頭”到達REG2.D端的時間

data required time = latch edge + Tclk2 -Tsu

注:對應到圖形中就是REG2.D中紅色區域的左邊,資料要求時間就是如果資料要被REG2正确寄存,他的到達時間要早于這個時刻。so 建立時間餘量(set up slack)大于0則表示資料到達時間早于資料要求時間,否則晚于。

set up slack = data required time - data arrival time

= (latch edge + Tclk2 -Tsu) - (launch edge + Tclk1 + Tco + Tdata)

=(latch edge - launch edge) + (Tclk2  - Tclk1 ) - Tsu - Tco -Tdata

= T +Tskew  - Tsu - Tco -Tdata                                                                   

注:其中T為時鐘周期,Tskew時鐘偏斜(可以認為為0)。

2.3.2 保持時間餘量(hold slack)

對于保持時間餘量(hold slack)有:

data hold time = launch edge + Tclk1 + Tco + Tdata + Td                             

注:1、其中Td還資料周期,大小一般是時鐘周期。

2、對應到圖形中就是REG2.D的DATA的B端,資料到達時間指的是資料“尾”到達REG2.D端的時間

data required time = latch edge + Tclk2 + Th

注:對應到圖形中就是REG2.D中紅色區域的右邊,資料要求時間就是如果資料要被REG2正确寄存,他的持續時間要晚于這個時刻。so 保持時間餘量(hold slack)大于0則表示資料保持時間“晚”于資料要求時間,否則“早”于。

hold slack = data hold time - data required time

= (launch edge + Tclk1 + Tco + Tdata + Td) - (latch edge + Tclk2 + Th)

= (launch edge - latch edge)+ (Tclk1  - Tclk2 )+Tco + Tdata +  Td - Th

= Tco + Tdata - Th - Tskew

3、總結

建立時間餘量 set up slack = T +Tskew  - Tsu - Tco -Tdata   

保持時間餘量 hold slack =  Tco + Tdata - Th - Tskew

注:其中T為時鐘周期,Tskew時鐘偏斜。

在1.2中我們提到時序限制就是為了使得建立時間餘量和保持時間餘量大于0,但是前文可知,Tskew、Tsu、Tco和Th無法控制,為寄存器的特性參數,Tskew一般可以認為是0。就隻剩下T和Tdata。前文提到過保持時間餘量一般(不是絕對的)沒有問題,主要是建立時間餘量。是以時序限制的目的就是控制布局和布線盡量減少Tdata,同時還需修改設計即HDL代碼減少組合邏輯延遲即綜合。如果代碼無法繼續優化而布局布線也無法繼續優化,減少Tdata,那麼隻有增大T才能使得建立時間餘量滿足要求,即降低設計的運作時鐘。