1. 程式人生 > >對input_delay和output_delay的理解

對input_delay和output_delay的理解

input_delayoutput_delay的理解

覺得對input我應該知道的是對端其間的tco,對於output我們應該知道對端器件的setuphold,因為我以前就是拿來對端器件比如一個ADC的資料手冊它上面就這麼寫的,然後我按照它寫的引數來約束保證介面時序。

想了一會發現,其實對這個問題是應該這樣理解的,我們現在是做晶片的了,是我們自己要寫晶片手冊了,我們該寫到手冊裡的就應該是上面這樣的引數,這個引數有可能是一些經驗值,有可能是參照其他同類晶片的參考值,也有可能就是根據與自己的晶片對接的晶片的引數確定的(就像FPGA一樣),但是我們寫在手冊上的好像就應該是這樣的值。

理解了這點,但是還是覺得不知道怎麼約束,因為我得到引數並不是我想要的,對於這點其實只要理解了約束input_delay

output_delay的那幾個詞到底都指得是什麼東西可能就好理解了。

還是看這個時序分析的圖,我們要約束的是圖中Input_Path這條路徑,那麼約束這條路徑到底是為了什麼呢,是為了讓軟體求出圖中x的最大和最小值,無論是綜合還是STA都是這樣。實際上這條鏈路上有兩個量是未知的,clk0clk1的關係是未知的,訊號從clk0到晶片輸入端總的tco是未知的。其他資訊包括clk1本身時鐘的一些特性,內部暫存器的setuphold等等這些量都是已知的。

2

那麼實際上這句set_input_delay就是在告訴軟體這兩個未知量的值,首先在約束前會建立一個虛時鐘如圖 3,這個時鐘就代表clk0,在DT003

里根據需求建立了一個100M,相位為0,即與clk1相同相位的時鐘。

3 虛擬時鐘建立

但這裡並沒有完全解決第一個未知條件,實際上clk0clk1的即使在單板上由同一個時鐘晶片產生,但到達兩個晶片的延時也不會相同,所以兩個時鐘的相位不是理想的相差為0,這裡我們把兩個時鐘的相位關係這一部分時延折算到了Input_delay裡面,這裡把從clk0MY chip輸入埠上面所有的時延稱作Rtco,而將時鐘原點到clk1clk0的延時之差稱作clk_dly(Delay_clk1  –  Delay_clk0),那麼Input_delay值和Rtco以及clk_dly的關係可又下圖所示。

4  input_delay

的真實含義

從上面圖中可以看出,input_delay = Rtco – clkdly 這樣我們把兩個未知量合併成一個未知量,在我們的約束語句中用max_delaymin_delay的形式給出約束範圍。這麼看應該可以解釋為什麼約束input_delay時會有負值,當clk1clk延後時間大於Rtco時,那如果我們依然認為訊號是從vir_clk0打出來的話,真實訊號就是有著負tco的。

討論到這裡現在來看下根據DT003給的Timing Spec我們要怎樣約束input_delay,表中給了DT003這個埠的Setup要求為最小3nshold要求為最小-0.5ns,這裡已經按上面的方法把真實路徑通過input_delay折算到了vir_clk0clk1這條理想路徑上來了,如果我們晶片要求3ns的最小建立時間,那麼對接晶片加上單板時延就一定得在滿足這個要求我才能正常工作,所以看到max_input_delay從圖 5中得出,為週期-setup

5

對於hold這裡給出了一個負值-0.5,意思是說在我晶片管腳位置,我的時鐘有效邊沿來的時,其實在最多0.5ns之前輸入訊號就已經變化成下一個值了,即便這樣我的晶片還是能保證對資料的正常取樣,因為有我們的x在。如圖 6所示,min_input_delay =hold,是個負值。

6

於是有了我們的約束:把不知道的時鐘指定成建立的虛擬時鐘,把不知道的input_delay的最大最小值指定一下,這樣就完成了約束,軟體也就知道了x的取值範圍。

對於output_delay的約束同樣看下下圖。Output_Path是我們要約束的路徑,還是為了求圖中的x而進行約束。

7

對於同樣的這次我們clk1是不知道的,建立一個虛擬時鐘vir_clk1,同樣的我們把時鐘相位的延時折算到output_delay裡面了,在約束output _delay時認為取樣暫存器本身的SetputHold時間都是理想的0,可以理解為把他們本身也折算到output_delay這個值裡面了,這樣我們就又得到了一個經典時序分析模組型了。

看看給我們的引數,My chip TCO最大值為5ns,最小值為1ns。就是說我晶片最大可能有5nsTCO那麼對接晶片和單板設計要保證我TCO=5時必須可以使對端晶片正確取樣資料,那麼他們最多隻有“週期-maxTCO”這麼多時間可以用,也可如圖 8所示。

8

我們晶片的最小TCO可能是1ns,就是說對資料我們晶片最小也能提供1ns的延時,那麼如果當剛好滿足到對端晶片暫存器Dhold0的臨界要求。我們晶片可以允許外面的東西帶來一個-1nsoutput_delay,這裡負值同上面輸入時說的是折算時鐘相位延時得到的。如果再小就滿足不了hold要求了,那麼就是說這個最小的output_delay就是“-TCOmin”,如圖 9所示。

9

根據上面所述將output_delay約束為:

上面的約束值都是STA時的值,綜合時候需要加入一定的餘量,就是max在約大一點點0.幾個nsmin在約小一點點,讓綜合工具更努力些。