目錄
一、序言
二、Set Maximum Time Borrow
2.1 基本概念
2.2?設置界面
2.3?命令語法
2.4?命令示例
三、參考資料
一、序言
????在Vivado的時序約束窗口中,存在一類特殊的約束,劃分在others目錄下,可用于設置忽略或修改默認的時序路徑分析,以Vivado2022.1版本為例,主要包括以下4類,本文將介紹其中的最后一個Set_Maxium_Time_Borrow,示例的為Vivado2022.1
?
二、Set Maximum Time Borrow
2.1 基本概念
????Set_maximum_time_borrow約束是指當分析鎖存器Latch的時序時,設置可以從線nets中獲取的最大時間值(納秒即)。存儲電路設計有兩種類型:觸發器(Flip Flop)和鎖存器(Latch)。
????a)使用觸發器的設計
????數據從時鐘的上升沿啟動,必須在下一個時鐘上升沿到達前的set up時間內到達目的觸發器,如果兩個觸發器的組合邏輯時延太大,那么數據將沒法被捕獲觸發器所捕獲,捕獲的數據將不穩定,如果數據到達的時間太早,造成時間資源浪費
????b)使用鎖存器的設計
????當鎖存器是傳輸狀態時將透傳數據,如果鎖存器前的組合邏輯時延較大時,將借用下一個周期的時間,所以當需要設計有較高的性能時,會使用鎖存器
????時間借用的場景:從設計中的鎖存器借用,借用的時間用于設計中的觸發器。
?
時鐘波形如下,周期為10ns,占空比為50%。
?
????當數據從觸發器FF1出發,理想情況下(setup、hold和時鐘延遲,時鐘偏斜都為0)在下一個時鐘周期10ns后到達觸發器FF2,如果數據到達FF2的時間大于10ns,則無法被FF2捕獲,同樣的在20ns后到達FF3被捕獲。
????將路徑圖中的FF2換成鎖存器Latch,如下圖
?
????如果數據從FF1出發到達Latch的輸入端口D早于10ns,此時鎖存器由于CLK為低電平不工作,不會影響數據的獲取,和使用FF的場景相同。
????如果數據從FF1出發到達Latch的輸入端口D大于10ns,如12ns時到達,如果Latch為FF2時數據將無法被捕獲,此時為鎖存器,只有數據在10ns-15ns時到達,數據依舊傳輸到了FF3,這時通過借用下一個周期的時間,12ns到達時相比使用寄存器FF2,鎖存器提供了2ns的優勢。
????在這個例子中鎖存器所能借用的最大時間為5ns(一個周期中高電平的有效時間),但從鎖存器到寄存器FF3的時間減少了,原先是10ns,借用后必須8ns內到達,以便FF3在20ns時能獲取到數據,因為從FF1到FF3總的20ns時間關系是不變的。
????因此,在使用寄存器的設計中,組合邏輯的延時不能超過一個時鐘周期,除非一些特殊設置,如多周期約束路徑和false路徑。在使用鎖存器的設計中,大的組合邏輯延時可以通過下一級更短的組合邏輯延時來補償。
2.2?設置界面
進入Timing Constraints界面,在左側Others欄中選中Set Maximum Time Borrow,右側即顯示Set Maximum Time Borrow
?
設置界面中需設置對象objects和借用的時延值delay value
?
約束設置子界面需設置Objects,可為clocks或cells
?
2.3?命令語法
命令格式
set_max_time_borrow [?quiet] [?verbose] <delay> <objects>
參數含義
?
2.4?命令示例
1、約束所有時鐘相關的鎖存器允許借用的時間為0,這等于阻止了整個設計的時間借用
set_max_time_borrow 0.0 [all_clocks]
2、約束了頂層net允許借用20個時間單元
set_max_time_borrow 20 {top/*}
三、參考資料
用戶手冊:ug903-vivado-using-constraints-en-us-2022.2.pdf
鏈接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt?
提取碼:mylt? ?