IBIS-AMI: CTLE二三事

前言:

中文翻做”連續時間性線性均衡器”的continuous time linear equalizer (以下簡寫為CTLE), 常在現今通信渠道(communication channel)裡被使用; 當一channel信號損耗較大時, CTLE常被拿來為接收端或下游的鏈路做為減少失真、恢復原始信號的一種方式; 在網上已有許多有關CTLE在理論如何運作的探討, 更深入的設計細節也在大學/研究所程度的教科書裡找得到;在這篇貼文裡, 在簡短介紹CTLE為何之後,我想要以為CTLE 建IBIS-AMI模型的角度談一些實務上的考量;其中雖然一些關鍵處為了業務機密的考量只能點到為止, 但仍希望會對考量建模步驟或流程的讀者有些幫助。

[Credit]: 這篇貼文的一些用圖來自Sam Palermo教授的課程摘要(連結於下), 雖然共事時彼此不認識,但我們之前都同一時期在在Intel工作過…

ECEN 720: High-Speed Links Circuits and Systems

 

什麼是CTLE及為何用它:

上圖為兩個常見的SERDES通道原理圖, 上方者在TX及RX間直接為被動性的channel所連接;而下方者則是透過了位於中央的repeater把上下游兩個Channel連接起來;在很多界面裡(如USB3), 這種串接(cascade)可以連續好幾次, 所以會有兩個或更多的channel相連接;這些通道裡的Rx端或Repeater/Redriver裡就可能會有CTLE;而圖中的”S” 方塊係泛指如封裝、通孔VIA、傳輸線及連接器connector等等被動元件的合成S參數;這些通道元件有些共通的特性..如在頻域上對不同頻率會有不同的耗損/速率改變, 這種現象一般稱為色散(dispersion)

舉例來說, 我們可以把這些以S參數代表的差分輸入/輸出曲線在頻域上畫出來, 就會得到如上圖的不同損耗曲線。

在現今數位通信的傳送的位元信號多是以方波來表示0與1, 我們知道這些波形裡的快速上升或下降轉換過程(rising/falling transition)含有豐富頻率成分的部份;理論上來說,要保持被傳信號不失真,這些不同頻率的成分應被一視同仁地被續傳下去,但現實上這種所謂的unit-gain all pass filter並不存在, 所以各種頻率成份也就或多或少地被放大或縮減了; 如果下圖中的綠框代表我們想要得到的這種理想無失真狀態:

而實際上的通道卻是如紅框所示, 則要為信號加以補償,吾人所需加入的就是如藍框的線性均衡器,而這也就是為什麼均衡器常被使用於有損通道的原因:由於線性關係其在頻域上可和通道的特性曲線直接相乘而得到趨進理想的傳輸特性;這裡有兩點值得注意: 其一是均衡器和所欲補償的耗損是配對的, 也就是說若拿同一均衡器來套到不同損耗的通路,就可能會有補償過度或不足的情形;其二是CTLE只是這裡所示均衡器裡的一種或一個環節。

CTLE 只是linear equalizer裡的一種:

線性均衡器可以用很多方式來設計或呈現;舉例來說, 如下的feed-forward equalizer就被常被用於Tx及DFE端:

這類的均衡器的頻響有部份限制, 但其作用較易於理解且AMI實作上也不難, 比如說如果只有一個tap的話, 其對波峰/波谷在時域上的作用可以很容易地被了解, 適當值也可藉由掃描而後做內/外插:

但本文所談的CTLE則是代表廣義的均衡器,所以我們常用其頻域上的響應來代表其行為作用;也就是說, 為了如之前所提地對不同耗損的通道做信號的補償,吾人就要有許多不同、相對應的CTLE特性曲線如下所示:

那我們要如何才能得到代表這些行為的資料以便建模呢:

建CTLE IBIS-AMI模型的不同資料形態:

雖然到此為止我們只說到頻域的部份,但拿到以AMI為主的鏈路分析上還是要回到時域來和輸入信號做卷積, 這是因為就SPEC規格上的定義來說, 一個AMI模型所會接收到的輸入不是時域的突波(impulse response)就是時域上的位元波; 前者係用於statistical 模式而後者主要用於bit-by-bit模式,這麼一來,我們就有兩種為模型提供資料的可能: 分別是提供頻域或時域上的資料; 前者(頻域)的好處是其可針對要做鏈路分析的脈波速率及取樣頻率當場在模型裡來做傅利葉反轉(iFFT), 後者(時域)的好處則是所提供的資料已事先檢查過而可確認具有適當的品質;雖然實務上這兩者擇一而用即可,但最具延展性、擴充性的實做方式(也就是本司的實作方式:-) )則是對兩者均支援而能減少對AMI模型的改寫、編譯次數。

  • 頻域資料: 取決於原始設計/資料可否使用的程度, 我們可藉由以下不同的方式來獲得頻域上的資料以便為AMI建CTLE的模型:
  1. 極點及零點: 由不同數目及位置的極點及零點, 再加上DC的放大程度, 則吾人可以”合成”出頻域的響應:  比如說如果我們手上所有的資料只是待建模型的資料表(data sheet),則首先可以從上面找出關鍵頻率必需要有的放大程度 上圖的例子是USB3.1, 所以關鍵頻率是和其運作主頻相關的諧波;當對不同數目、位置及DC放大性做掃描之後, 我們就可以很容易地找到幾組符合此data sheet spec的頻率響應:也因為這些曲線係由預訂的線性函式(由那些極零點所組成)所產出, 所以一則為相對穩定、高品質而不會有passive/causality上的問題,再者也從0Hz 到極高頻皆唾手可得。
  2. 由S參數轉出: 另一種可能是由代表此均衡器的S參數來轉出, 適用的場合包括當矽智財為外購而原始設計不可得, 原智財有方只願提供此行為模型時(behavioral model); 從某個方面上來看, 這樣的原始資料代表在後面的correlation驗證階段會更容易…因為這就是要去建AMI模型的golden data/target, 但在另一方面的大部份情況下, 這也代表得先為這些S參數做一些預處理才能得到如上段結果般的頻響曲線。以用本司的SPro功能而言, 下面幾個步驟是不可或缺的: 首先手上的S參數可能是單端點(single ended)且適於某種port ordering的 (如1->3, 2->4), 則先要做port reordering 至1, 2->3, 4, 而後用generalized 2-N port 做differential mode/mixed mode 轉換,而後外插到DC及夠高的頻率(由VNA等所得的頻率通常只有10或20GB…這是遠遠不夠的), 在外插的過程中所有的計算均需使得這個S參數仍能保持適當的物理性(如causal), 最後再把只適用於differential input->differential-output的那個部份從S參數裡extract出來成單一一條頻響曲線(含magnitude及phase)。
  3. 做AC模擬: 如果有原始設計的話,當然直接做AC模擬可能更快更方便些, 雖是如此, 如此得到的曲線仍需先做資料我檢查及驗證(sanity check), 比如說相位是否連續、頻寬是否足夠及在高頻及低頻時, 所有的大小及相位是否趨於平坦等等。
  • 時域資料: 一旦有了上述的頻域資料, 理論上來說我們就可多做一步地把它們都轉到如下所示的時域上;這裡也可以有兩種做法:把原頻響做iFFT或把原始設計在時域上模擬。
    1. 如何做iFFT: 這裡適用的情況可能是您不打算從AMI必需要有的C/C++語言來做iFFT而想藉助如matlab或python等的機制, 雖然這些數值分析的套裝軟體或函式庫已會幫您做很多幕後的工作(如線性等距取樣至2^N點的), 但zero padding或complex conjugate padding至Nyquist rate通常還是得用戶自己做; 同樣地,在做iFFT轉換前的頻率資料是否”乾淨”也是得自己下場檢視的。略過此一步驟則轉出的時域可能就會有很多低頻的噪音或波動。
    2. 做時域模擬: 理論上的突波響應(impulse response)不難理解,但實務上要如何設定模擬? 就算是以階波響應再做事後的差分好了, 階波的上升速度應多快? 其與到時AMI被模擬時的時步(time-step)之間關係為何? 若需要臨場的縮放(scaling)那AMI模型要如何地得到原時時步/設定的資訊? 如此種種都是當事先要轉成時域資料時不可不想到的細節。

建CTLE IBIS-AMI模型時的種種考量:

好不容易終於有可建模的資料了, 下一步是如何把這些資料以C/C++的形態呈現以符會AMI的API 所需, 比如說下面幾點都要想到:

  • 如何決定用那條曲線: 如前所述, CTLE和不同耗損的通道是有相對應的,則當AMI模型用戶在使用此CTLE的AMI模型時, 要怎麼知道該用那個設定呢?

常見的方式是在模型使用手冊裡明載而讓用戶依據其自己現有通道的耗損來自行決定, 這就沒什麼學問了; 更進一步的可能是在CTLE的模型裡設有自動調適化的機制(adaptive), 則這就又是另一課題…

簡單來說, 要做可自動調適的CTLE首先必需把能使用的曲線/頻響做一EQ程度的排序, 而後要對模型針對某一輸入信號所均衡出的結果做一效能的定義(figure of merit, or FOM), 則當模型得到一輸入信號時, 先就現有的CTLE設定做信號均衡、而後計算出FOM值, 接著繼續以相鄰的CTLE設定去做同樣的步驟,以結果FOM的正負變化來決定繼續往上或往下”走”, 如此重覆直到FOM已穩定 (locked)於某一設定或達到所有的CTLE的極值(第一條或最後一條頻響)為止, 因為如此步驟的結果應對某個通道的不同信號都適用, 所以在鏈路模擬之初會要有一段時間的training period以便能鎖定到要用的CTLE值之後才不再改變等等。

  • 種種EQ的設定: 當我們有了不同組態的不同設定, 再加上可能不同corner等於多加了一個dimension, 再來要怎麼編程以符合AMI API的要求呢?

這裡開始可能更多的是computer science上的考量而和原始CTLE設計無關了, 總的來說是方便及速度的間的考量: 比如說我們可能想把所有資料的全部頻域/時域資料都以極細頻率/時步的方式提供,但發現這樣一來模型太大且仍不可避免要做內插, 或是如果所給的資料非等步且非2^N(常為FFT/iFFT所需), 又要如何有效的重新取樣? 最後, 這些資料如果直接一同編進DLL/SO二進位檔裡則每次設計更改(design revision)都要重新編譯, 放在外面呢又要如何的加密以確保原始資料的IP等等,這些都是在開始寫CODE編程之前都要先做好的規劃及考量。

  • 如何驗證模型: 好不容易模型做出來了, 如果按照golden data或和原始設計來比的的話, 這個CTLE應能有效地把下圖左的訊號還原至失真小得多的右圖:

現實裡要能一次達標或一試中的機率大概和買樂透中獎的機率差不多, 所以多半的情況模型做出來後接下來的是折磨人的除錯階段; 在AMI模型之外, 要能得到上述結果也不可不考慮到的還包括了IBIS模型的部份(類比前端), 因為這些IBIS裡的parasitic, loading 乃至於 rising/falling waveform 再再都會影響結果, 關於此點我們之前的貼文也有詳述, 其次,仍是點到為止的是IBIS-AMI是有高阻抗假設的, 所以要直接取代(drop-in replacement)手上現有的其它原始模組還要考慮到的是匹配的問題; 最後, 一個設計完善的CTLE AMI模型(或AMI模型)都要有很完善的除錯設計, 如此可指引出所給資料是否在重新取樣後質變、轉成時域後有問題、或是按時步縮放結果恰當與否等等而毋需反覆重新編譯模型搞得不知手上的波形是那一版本的AMI跑出來的結果。

結語:

凡此種種,應可讓有興趣的讀者看出一CTLE雖然理論上不難了解,但一旦要落實到低階的、以C/C++編寫的AMI模型時則又是另一番境地;本司就看過堂堂EDA大廠做出的CTLE模型是如何的便宜行事, 以至於後來原建案的矽智財廠商僅僅為了一些design revision(也僅是要容納更多的頻響選擇)就必需砍掉全部重練的案例, 這當然也是因為其把所有的設定都編進模型了又漫天喊價以至於矽智財廠不甘從此被綁架而找上經濟實惠的本司之故 🙂 。希望本文所提的幾點, 能做為有心直接下海實做AMI模型的諸君一些實務上的考量, 或是能了解其中”眉角”之一二之後決定由經驗如我司者來為您服務更為方便有效率:-)

Leave a Reply

Your email address will not be published. Required fields are marked *