FPGA 靜態時序分析與約束(2)

項目簡述

這裏提醒,在看這篇文章之前一定要先把前一篇時序約束的文章看完,前面一篇纔是重點,這篇就是一些簡單的工具使用。

我們前面的一篇博客已經講解了FPGA內部、IO接口的延遲約束。對建立時間、保持時間進行了深入的講解,並且通過幾個例子讓大家明白了input delay max、input delay min、output delay max、output delay min四個值得計算。那麼我們這篇論文得目的就是講解軟件得操作。我們先以Quartus II爲例進行講解,然後講解Vivado。這樣講解得目的是Quartus II得時序分析工具TimeQuest工具非常標準容易理解。Vivado與Quartus II又十分相似,藉助裏面得原語又可以得到更深得理解。相當於Vivado與Quartus II的兩篇博客綜合學習可以更深的理解時序約束概念。等到下篇博客將解時序約束的原語與GUI操作的時候,大家會深有同感。
我們這裏認爲時序約束的步驟按照下面步驟比較好:
在這裏插入圖片描述

時序約束步驟

Quartus II的時序工具的操作步驟主要如下:
1、打開TimeQuest工具
2、創建時序網表(直接默認即可,不用選擇特定的快速或慢速網表)
3、讀取SDC文件
4、可以查看報告,也可以加入約束
上述的圖形化操作如下:
在這裏插入圖片描述
查看時序報告從Tasks中查看,常見的報告時序操作如下:
1、報告時鐘
在這裏插入圖片描述
2、報告最差的路徑
在這裏插入圖片描述
3、報告特定的時序:
在這裏插入圖片描述
這是幾個常見的時序報告的操作步驟,至於其他的可以嘗試自己點擊進行測試。然後,我們將嚴格按照圖中順序介紹Quartus II的軟件操作步驟。

約束時鐘

Quartus II所有的時鐘約束都在下面的選項中完成:
在這裏插入圖片描述

創建輸入時鐘

我們點擊Creak Clock可以創建時鐘約束:
在這裏插入圖片描述

創建生成時鐘

點擊Create Generated Clock創建生成時鐘,所謂的生成時鐘就是PLL衍射出來的時鐘,這裏Quartus II與Vivado就有所不同,因爲Vivado中PLL的衍射時鐘默認是給生成的,而Quartus II不給默認生成。
在這裏插入圖片描述
出下面界面:
在這裏插入圖片描述
1、這裏是生成時鐘的原時鐘,換句話說也就是PLL的輸入時鐘
2、這裏描述生成時鐘與原時鐘的倍分頻關係
3、這裏指明生成時鐘的信號

當然也有簡單的方法一步約束所有的PLL的生成時鐘,點擊約束菜單中的Derive PLL Clocks
在這裏插入圖片描述
然後點擊運行:
在這裏插入圖片描述

約束自己分頻的時鐘

約束步驟與約束PLL時鐘的第一種方法一摸一樣。

輸入延遲的約束

根據輸入延遲的約束有許多種情況,比如系統同步、原同步、SDR數據輸入、DDR數據輸入、中心對齊、邊緣對齊。這裏面的難點主要是不同情況下input delay min、input delay max的計算。這個值得計算,同學們結合第一篇文章與Vivado中對原語得操作可以學會計算方法。這裏我們只簡要說明TimeQuest工具得使用。

對輸入延遲約束首先得約束延遲數據得隨路時鐘。 方法與前面時鐘得約束完全相同。

約束完數據的時鐘之後,約束數據的輸入延遲:
在這裏插入圖片描述
點擊確定如下:
在這裏插入圖片描述
1、當數據是中心對齊而且把下降沿當成發射沿的時候,勾選1,否則即便是中心對齊也不勾選。當然兩種情況的input delay min、input delay max值不同,但對於EDA分析工具都一樣。
2、input delay min的約束
3、input delay max的約束,注意max、min需要分別進行這個界面的約束
4、一般勾選add delay,這是與物理約束的一些關係
5、一般SDR數據選擇Both即可,對於DDR數據約束分別選擇Rise、Fall進行input delay min、input delay max的約束

至於上面input delay min、input delay max兩個值得計算可以結合第一篇時序博客與Vivado得原語介紹部分進行相應的學習。

輸出延遲的約束

輸出時間的延遲與輸入延遲一樣分爲:系統同步、原同步、SDR數據輸入、DDR數據輸入。與輸入延遲不一樣的是沒有沒對邊沿對齊與中心對齊加以區分,因爲我們輸出延遲的設計只需要滿足下游器件的建立時間與保持時間即可。至於每種情況
output delay min、output delay max的計算同樣查閱第一篇文章。

對輸入延遲約束首先得約束延遲數據得隨路時鐘,一般這個時鐘是生成時鐘。 方法與前面生成時鐘得約束完全相同。

約束完數據的時鐘之後,約束數據的輸出延遲:
在這裏插入圖片描述
點擊Set Output Delay得到下面界面:
在這裏插入圖片描述
1、當數據是中心對齊而且把下降沿當成發射沿的時候,勾選1,否則即便是中心對齊也不勾選。當然兩種情況的output delay min、outputdelay max值不同,但對於EDA分析工具都一樣。
2、outputdelay min的約束
3、outputdelay max的約束,注意max、min需要分別進行這個界面的約束
4、5、輸出延遲值得設置,一般勾選add delay,這是與物理約束的一些關係
6、選擇輸出數據得信號對象
7、一般SDR數據選擇Both即可,對於DDR數據約束分別選擇Rise、Fall進行output delay min、output delay max的約束
輸出延遲要比輸入延遲簡單,因爲我們主要是爲了滿足下游器件得時序要求。

設置時序例外

設置時序例外主要有兩種操作,一個是多週期路徑,另一個是false路徑。這兩個其實在EDA工具進行佈局佈線得時候沒什麼作用,前者是讓數據發射沿與數據接收沿之間的時間增大給建立時間帶來好處,後者是告訴EDA工具不分析這一塊。但是時序例外之前,一定要進行相應的處理,多週期路徑的設置一定要是真的多週期路徑,false掉的路徑一定要對齊做跨時鐘域處理、或者像是復位信號這種頻率特別低的信號。

設置多週期路徑

在這裏插入圖片描述
點擊Set Multicycle Path彈出下面窗口:
在這裏插入圖片描述
1、選擇需要設置多週期的路徑
2、設置需要進行多週期的是建立時間還是保持時間
3、多週期路徑到底是針對發射沿還是採樣沿來說的,一般是採樣沿

設置false路徑

false路徑在約束菜單欄中的如下位置:
在這裏插入圖片描述
點擊Set False Path如下:
在這裏插入圖片描述
選擇需要設置false的路徑即可。

操作小結

上面所有的時序約束都可以跟着Report Timing來走,尤其是時序例外操作,在時序不滿足要求的地方進行右擊設置相應的多週期與false路徑,這樣就避免了自己尋找相應的節點,減少了自己的工作量。

解決時序違例另一種常見的方法就是插入寄存器,改成流水線操作,但是插寄存器的時候不能隨便亂插,見組合邏輯就插寄存器。我們要根據Report Timing來插寄存器。

總結

接觸了FPGA已經兩年時間,直到現在纔敢說自己掌握了靜態時序分析,學習過程可以說非常坎坷,因爲當時的學習資料太少。後面的文章,我們將介紹Quartus II與Vivado的時序工具的使用。上面文章的學習途徑在參考文獻中已經給出。創作不易,認爲文章有幫助的同學們可以關注、點贊、轉發支持。爲行業貢獻及其微小的一部分。或者對文章有什麼看法或者需要更近一步交流的同學,可以加入下面的羣:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章