1. 簡介
在高速并行接口(例如DDR接口)中,由于工作環境的變化,可能會導致Data bus與時鐘信號之間的skew相差比較大,從而使得本來就小的采樣窗口變得更加緊張,嚴重的話會導致采樣失敗。在這種情況下,一個可以調節skew的玩意是十分有必要的。而由于模擬DLL個頭比較大,容易增大面積,從而加大成本。所以領導可能會要求你去用數字邏輯搭一個delayline,用于把輸入信號延遲輸出,且延遲的時間在總量程范圍內可調節。
本文提出一種delay_line的設計方案,希望讀者能夠帶著以下問題去進行閱讀:
如何減小delay_line檔位之間的誤差?
如何使得每一檔之間的delay呈線性關系?
如何優化delay_line的動態功耗?
如何減小delay_line對輸出clk的占空比的影響?
如何減小default值(檔位為0時的延時)?
2. 方案描述
2.1. 檔位說明
本方案中,delay_line的檔位分為兩類:fine_dly(高精度檔)和coarse_dly(大幅值檔)。
2.1.1. fine_dly檔
fine_dly的延時決定了delay_line的最小調節步長,需要根據實際所使用的工藝節點來選擇dly cell,可以是CLK-BUF、CLK-INV pairs、CLK-MUX以及專門的DLYCELL。記CLK-MUX的delay為T_mux,dly cell的delay為T_dcell,則有:
為便于下文書寫簡化,記 T_fine(sel=0) = T_f(0), T_fine(sel=1) = T_f(1).
在delay_line的fine_dly鏈部分,需要增加一個CLK-MUX來修正delay_value,如下圖中所示標藍色的CLK-MUX。
上圖的delay_value與檔位的對應關系如下:
本方案建議fine_dly僅使用一級CLK-MUX即可,見下圖。
2.1.2. coarse_dly檔
coarse_dly與fine_dly二者延時的關系決定了delay_line各檔位間的誤差,因此coarse_dly需要用fine_dly級聯來實現,以減小該誤差。記CLK-MUX的delay為T_mux,則有:
為便于下文書寫簡化,記 T_coarse(sel=0) = T_c(0), T_coarse(sel=1) = T_c(1).
2.2. 動態功耗優化
由于clk在高速翻轉,對于delay_line中未被選中的檔位,需要把輸入固定成高電平或低電平,以減小動態功耗。本方案僅考慮對coarse_dly檔做功耗優化,fine_dly檔本身要實現小delay_value,std_cell數量較少,暫不做優化處理。
如下圖電路中,當 sel = 0 時,只有標紅色的兩部分有clk輸入,其它std_cell的輸入都是固定電平,動態功耗(指switch power)可降到最低。
2.3. 占空比優化
由于std_cell的上升時間和下降時間存在差別(CMOS器件特性,本文不做解釋),因此clk在經過std_cell之后,占空比會被改變,且經過的std_cell越多(延時越大),占空比的改變會越明顯。
考慮下圖所示電路結構,clk在經過Part_A之后會被取反,再經過Part_B之后會被還原,因為Part_A與Part_B兩部分電路完全對稱,所以Part_B電路會對Part_A電路的信號傳播時間做補償,理論上可以把上升時間和下降時間對占空比的影響降到很低。
2.4. 方案原理圖
綜合2.1~2.3小節的描述,本文給出一種delay_line原理圖如下:
記CLK-INV的delay為T_inv,則delay_value(T_dly)的計算公式如下:
T_dly = 2( CT_c(1) + F * T_f(1) ) + T_default ;
其中:
T_default = 2 * ( T_c(0) + T_f(0) + T_inv ) ;
“C”表示選中coarse_dly的檔位數,取值為0,1,2,3….N (N取決于使用者);
“F”表示選中coarse_dly的檔位數,取值為0,1,2,3;
“C”、”F”對應的csel、fsel的轉換關系如下表:
以N=3舉例,每個檔位對應的delay value關系表如下:
-
接口
+關注
關注
33文章
8577瀏覽量
151023 -
DDR
+關注
關注
11文章
712瀏覽量
65318 -
時鐘信號
+關注
關注
4文章
448瀏覽量
28542
原文標題:2. ?方案描述
文章出處:【微信號:數字芯片實驗室,微信公眾號:數字芯片實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論