揭開未擴展時鐘的秘密
時鐘擴展對使用賽靈思Vivado設計套件的工程師來說是一個很大的挑戰(zhàn),但不是一個不可逾越的障礙。
本文引用地址:http://2s4d.com/article/201610/308302.htm隨著越來越多的賽靈思用戶開始使用Vivado®設計套件,部分用戶對未擴展時鐘表示困惑。那么什么是未擴展時鐘呢?他們是如何進行關聯(lián)和計時的?應對未擴展時鐘的標準方法又是什么呢?下面讓我們來詳細探討一下這個問題,重點是探討確保設計人員使用正確的同步技術安全地穿越未擴展時鐘之間的跨時鐘域(clock domain crossing)的方法。
隨著Vivado工具的推出,賽靈思現(xiàn)在能夠支持采用業(yè)界標準Synopsys設計約束(SDC)格式的時序約束。這是ISE設計套件工具處理時序方式上的重大轉(zhuǎn)變。Vivado套件最根本的區(qū)別在于所有時鐘在默認條件下都彼此關聯(lián)。這樣在ISE中處于無約束狀態(tài)的時序路徑在Vivado設計套件中則處于受約束狀態(tài)。如果兩個時鐘之間不存在周期性關系,這種約束會造成非常嚴格的時序要求。
未擴展時鐘是指在1,000個時鐘周期內(nèi)與另一個時鐘之間不存在周期性關系的時鐘。Vivado BFT 內(nèi)核范例設計即是體現(xiàn)未擴展時鐘工作方式的良好途徑。
發(fā)起和捕獲
時序路徑從發(fā)起事件開始,由捕獲事件終止。發(fā)起事件發(fā)生在同步單元的時鐘從非工作狀態(tài)轉(zhuǎn)入工作狀態(tài)的時候。捕獲事件發(fā)生在下游的或者負責捕獲的同步單元的時鐘從非工作狀態(tài)轉(zhuǎn)入工作狀態(tài)的時候。從發(fā)起事件到捕獲事件之間所需的時間被稱為“路徑要求”,它代表自事件發(fā)起后到捕獲單元引腳處出現(xiàn)有效數(shù)據(jù)之間所需的時間。
如果發(fā)起時鐘和捕獲時鐘同時位于同一物理時鐘網(wǎng)中,路徑要求僅指時鐘周期。以250MHz時鐘為例,如果發(fā)起單元和捕獲單元的工作沿相同(上升沿對上升沿或下降沿對下降沿),那么發(fā)起事件和捕獲事件之間的時間間隔則恰好為4納秒。如果發(fā)起單元和捕獲單元的工作沿不同,路徑就必須按一半的時鐘頻率進行時間計算。這就是時鐘的上升沿對下降沿或下降沿對上升沿轉(zhuǎn)換的情況,對一個250MHz的時鐘來說,對應的就是2納秒的路徑要求。
在時鐘源(source clock)和時鐘目標端(destination clock)非同一個時鐘的情況下,時序問題就變得更加復雜。具有不同時鐘源和時鐘目標端的時序路徑被稱為跨時鐘域(CDC)路徑。
圖1:擴展時鐘的TCL腳本
如果發(fā)起時鐘和捕獲時鐘之間的相位關系未知,就無法計算路徑要求。由于不確定相位關系,則無法準確確定路徑時序。不安全時鐘在Vivado設計套件生成的時鐘交互報告中會突出顯示。在發(fā)起時鐘和捕獲時鐘之間的相位關系已知的情況下,只要兩個時鐘之間存在周期性關系,就可以用數(shù)學方法推導出路徑要求。用于判斷給定發(fā)起時鐘和捕獲時鐘之間最低路徑要求的方法稱為時鐘擴展。不過確定兩個時鐘之間是否存在周期性關系需要用實際限制加以約束,因為一般情況下兩個不同時鐘之間不存在共同的周期性特征。Vivado設計套件使用的實際限制條件是1,000個時鐘周期,以兩個時鐘中較小的時鐘周期為測量標準。如果在擴展兩個時鐘到超過1,000個時鐘周期后沒出現(xiàn)周期性關系,那么這兩個時鐘就被稱為“未擴展”時鐘。Vivado設計套件對兩個未擴展時鐘之間的路徑要求為發(fā)起時鐘和捕獲時鐘相鄰工作沿之間相隔的最少時間。但需要注意的是對超過1,000個時鐘周期的情況有更加嚴格的路徑要求,這就是Vivado設計套件將這種類型的兩個時鐘之間的關系稱之為未擴展的原因。
圖2:125MHz和156.25MHz時鐘的時鐘擴展
Vivado BFT內(nèi)核可為測試不同時鐘速率提供理想設置,從而判定兩個時鐘是否為擴展時鐘
為更好地理解Vivado設計套件計算未擴展時鐘的方法,先以圖1中的TCL腳本來對擴展任意兩個時鐘速率之間的上升沿對上升沿路徑要求的方法進行詳細說明。圖2是這個腳本的輸出,即兩個分別運行在125MHz和156.25MHz的時鐘的擴展。
為確認上述TCL腳本得出的結果,我們來觀察一下Vivado BFT 內(nèi)核范例設計。BFT 內(nèi)核可為測試不同時鐘速率提供理想設置,從而判定兩個時鐘是否為擴展時鐘。該內(nèi)核有兩個獨立的時鐘源,分別命名為wbClk和bftClk。時序約束可將wbClk和bftClk的頻率分別設置為100MHz和200MHz。用戶可可對任意兩個時鐘速率的此類約束進行修改,以便確定由Vivado時序引擎判別的擴展關系。圖3是將bftClk設置為125MHz,將wbClk設置為156.25MHz時所顯示的結果,并提供了相關的時序(report_timing –from [get_clocks bftClk] -to [get_clocks wbClk])。請注意,由發(fā)起沿、捕獲沿和時序要求共同確認TCL腳本的預測結果。
表1是使用圖4中的TCL腳本獲得的幾種時鐘速率的發(fā)起沿、捕獲沿和路徑要求。
圖3:125MHz發(fā)起時鐘到156.25MHz捕獲時鐘的時鐘擴展
表1:時鐘擴展實例
圖4:時鐘擴展Tcl 腳本
處理未擴展時鐘
人們常常把未擴展時鐘視為異步時鐘,并通過FIFO、邊沿檢測器或同步器電路等適當?shù)耐郊记蓙磉M行處理。如果用戶使用此類技巧,應在約束中使用時序例外來處理未擴展時鐘(一般使用set_false_path或set_max_delay例外)。
理解和說明未擴展時鐘具有重要的意義,因為時鐘之間的邊沿關系將決定Vivado設計套件中時序引擎所使用的路徑要求。賽靈思希望對設計中的所有未擴展時鐘進行詳查,以確保使用適當?shù)耐郊记砂踩卮┰轿磾U展時鐘之間的跨時鐘域。
評論