IC代碼的綜合過程可以說就是時序分析過程,dc會將設計打散成一個個路經,這些路經上有cell延遲和net延遲,然後dc會根據你加的約束,來映射庫中符合這種延遲以及驅動的器件。從而達到綜合的目的。dc的所有時序約束基礎差不多就是setuptime 和 hold time。 可以用下面的圖片說明:
所謂setup time即建立時間,也就說數據在時鐘到來之前保持穩定所需要的時間,holdtime 即保持時間,也就是說在時鐘到來之後數據需要保持穩定的時間。在深入建立時間和保持時間之前。先了解下dc中的路經以及startpoint ,end point。 所謂start point 就是:
1. input port(頂層設計的輸入埠)
2.clock pin of sequential cell(觸發器的clock pin)所謂的end point 就是:1 output port(頂層設計的輸出埠)
3.datapin of sequential cell(觸發器的data pin)了解 start point 和 end point,就可以方便的了解 dc是如何將設計打散成路經,一個設計中基本的路徑分為4種,如下圖:
path1: input port to data pin of sequential cell
path2: input port to output port
path3: clock pin to data pin of next sequential cell
path4:clock pin to output port
所有的設計也就這四種類型的路徑。
另外一種就是帶反饋的,也就是本身的clock pin to data pin 。
有了路徑的概念之後,我們可以分析更複雜的setup time 和 hold time 。 dc中對於建立時間的分析是基於路徑的最大延遲;而對於保持時間的分析是基於路徑的最小延遲。
看下面一個例子:
這個是給定setup time 和hold time 的案例,要求算出最小時鐘周期。同理也可以給你一個周期和setup time 和hold time,計算時間裕度。 我們假設時鐘周期是20,每個觸發器的cell 延遲是1,觸發器的建立時間是1,保持時間是0.5,分析下列圖中的建立時間和保持時間的slack。
看到設計,首先要分析路徑,找出最長和最短路徑,因為dc的綜合都是根據約束而得到最短和最長路徑來進行器件選擇的。所以接下來將圖中的所有路徑標出。因為沒有前級(input_delay)和後級電路(output_delay),我們只分析圖中給出的 路徑,如下圖:
對於紅色路徑:Td=Tcell+Td4+Td5+Td6=1+4+3+1=9
對於黃色路徑:Td=Tcell+Td4+Td5+Td6+Td8=1+4+3+1+2=11
對於紫色路徑:Td=Tcell+Td1+Td2+Td3=1+2+3+2=8
對於綠色路徑:Td=Tcell+Td7+Td2+Td3=1+2+3+2=8
所以Tlongest=11,Tshortest=8
對於setup time的slack:Tclk-Tlongest-Tsetup=20-11-1=8
對於hold time的slack : Tshortest-Thold=8-0.5=7.5
對於setup time 和 hold time 的slack的計算,可以體會下面的示意:
對照第一副示意圖與此比較,建立時間看D2 ,保持時間看D1,因為同時把Tl和Ts放在一個圖例中,看起來可能有些誤解:)
有空會繼續討論setup time 和hold time,下次討論將包括clock skew 和input delay,output delay在其中