以 GigE_DDR3_HDMI 工程為例,進行時序分析的整理。
一、基准時鍾和生成時鍾
- 基准時鍾,通俗點說就是 top 層的輸入時鍾,如 FPGA_clk,PHY_rx_clk。
- 生成時鍾,通俗點說就是基准時鍾通過PLL或自分頻后的輸出時鍾。
1、約束法則
(1)經過PLL的輸入時鍾(基准時鍾)、輸出時鍾(生成時鍾)會自動進行時鍾約束,不用再手動約束。
(2)未經過PLL的基准時鍾,無論分不分頻的給內部模塊使用,都需要添加基准時鍾約束和生成時鍾約束。
2、基准時鍾約束
原工程中,PHY_rx_clk 經過 PLL 相移 90 度后生成 PHY_rx_clk_90,為進行時鍾約束,因此改成不經過PLL。
(1)點擊 Implementation,完畢后點擊 Edit Timing Constraints
(2)進入時序約束界面后,可以點擊 Timing 查看時序報告,也可以關閉該窗口。
(3)將窗口放大,開始進行進行時鍾約束,如下所示:
(4)Tcl Console 中輸入【report_clocks】可以看到所有的 clock,輸入【report_clocks PHY_rx_clk】可以指定查看某個時鍾。
3、查看時序分析結果
(1)Timing中可以看到一些選項
(2)點擊 Report Timing,生成一份報告。
(3)這樣就看到時序報告了,雙擊某條報告可以看到更細致的建立時間和保持時間的分析。
注意,此時的只是報告,如果有很多飄紅,則說明時序違例,但我們已經進行了時序約束,重新綜合一遍后再打開這個報告,即可看到時序情況大大改善,飄紅減少。
二、生成時鍾
和基准時鍾的約束類似,例如 ODDR 原語的時鍾輸出,屬於生成時鍾,需要人工約束。
1、時鍾約束界面選中 Create Generated Clock,點擊添加新約束。
2、設置生成時鍾約束,和基准時鍾不同的是要找准生成時鍾的源和目的。
三、虛擬時鍾
虛擬時鍾,一般是系統同步時用,系統同步基本已經淘汰了。虛擬時鍾即 FPGA 內部不存在的時鍾,主要用於輔助做一些分析。
比如上圖這個紅色的時鍾,默認沒有約束情況下上游的時鍾和 FPGA 的 system clock 認為延遲是一樣的,那么這樣我們就不能表示上游時鍾和 system clock 的延時差了,我們可以創建一個虛擬時鍾代表上游時鍾,並且把這個時鍾的 input latency 設置一個值就表示這個時鍾進到芯片前有多少延遲。創建虛擬時鍾的方法很簡單,就是創建一個時鍾但是不實際指向一個 fpga 內部或者 IO 上的對象。
設置方法:點擊 Create Clock,新增時鍾約束,Source objects為空,點擊 OK 即可。
參考資料:V3學院FPGA教程