信號/電源完整性之最佳化:系統性分析

在前一則貼文中, 我們提到若欲找到”一個“方案時, 線性的假設性分析是一個不錯的優化方式。然而當我們要把更多的設計變數放在一起通盤考量來對更大的解答空間裡求最佳化時, 則必需要有更系統性的、而非挑一兩個變數在固定其它變量於一常數值、的優化程序。

反應曲面模型( Response surface model,  RSM):

在下圖中, 系統輸出Y1, Y2等同時含有可控制變量X及不受控變量Z; 在其它如晶片設計或晶圓廠裡,諸如不可預測的宇宙射線等對載體的影響便可歸類於這些不受控變數;但在透過仿真來得到輸出結果的整合性分析裡, 過程與結果都是確定性(deterministic)的; 也就是說只要輸入情況一樣, 輸出結果每次也都會相同, 所以這些不受控變數Z便可忽略不計; 我們可以把這種輸入轉成輸出的關係看做是一個具有多維空間的反應曲面, 在這曲面上找頂點或最低點便是最佳化的過程。

doersm

這種輸出入間的對應一般稱為”反應曲面模型” (response surface model, or RSM), 透過在解答間裡的諸多取樣點並對其(透過仿真或場解)求輸出後構間出這樣的一個多維模型來優化便是一種系統性的優化流程; 而實驗設計法(design of experiments, or DOE)則是最常與RSM一起運作的建模程序。

實驗設計法 (Design of experiments, DOE):

當系統有許多變量且各含有一定範圍及可能值時, 要透過全面完整組合(full combinatorial, or full grid)來找最佳值是不大可能的; 我們只能透過極有限取樣點來得到反應以建構出RSM。

將上圖中輸出Y寫成是一個由變量x1, x2 ~ xn所形成的函數f(x), 則透過Taylor Theorem, 這些函式f(x)均可以級數的形式來近似:

當更高階級數(bigger alpha)被包含Taylor級數時, 這近似式與原f(x)就更接近了, 這就好比對時域方波做傅利葉轉換時, 若頻域上包含的諧波更高, 則再反轉回時域時就更近似原來的方波。

在現實世界裡, 大部份的現象主要來自於低階的項目的影響, 若我們只取到二階, 則上述的Taylor級數展開後可寫成如下的二次式:

quadraeq

當變數X1, X2的值不同時, 等式左邊的輸Yfit值也就不同, 而系數Beta則決定了各變量對輸出的影響程度: beta值愈小, 則變量就更為次要; 那要怎麼算出相關係數Beta呢? 如果我們有N個取樣點, 則上面這種型式的等式寫在一起時便可以如下的矩陣的樣式來表現:

quadramtx

當將二階拉高為至K階時, 則廣義的矩陣式便可寫成如下:

DOERSMMtx

最左邊的X矩陣大多不是方陣, 所以若要求出相關系數Beta的向量, 則需使用一般線性代數裡的操作技巧:擬反矩陣(pseudo inverse)及奇異值分解(singular value decomposition, or SVD), 而所得的係數是在以最小的平均誤差(mean square error)的情況下的解。

modelfit

欲使用DOE/RSM流程來進行優化, 則有幾項前置作業必需完成:

  • 決定有那些變量X及最高階為何: 如能先有洞見, 則取較具相關性的變量可使建構出的模型更近似;其次, X的數目及階數也影響了欲進行仿真的數目及最後矩陣的大小;
  • 決定取用那些輸出函數Y: 因為我們只用低階的X來置入Taylor級數, 故若是結果得再經過複雜的數學運算或後處理,則過程間的高階操作便可能打破了低階X和Y的關連性;
  • 決定那種取樣方式:在上面矩陣式中, 每一列都是一個系統仿真, 我們只要能在解答空間裡有足夠數目及涵蓋性的取樣點便可, 過多或過少都會影響建出模型的品質; 而這取樣點的方式在統計學上則有許有許多不同的理論可採用。

以實驗設計法優化的流程:

欲利用實驗設計法在對信號或電源完整性上優化; 一般來說有下列步驟:

  • 定義變數: 儘量只將主要變量列如分析的範圍則模型才有意義且建模才有效率; 而主要變量則可透過:線性掃描(linear sweep), 假設性分析, 之前產品設計的分析及經驗等等來決定; 再者實驗設計法通常不會只進行一次, 在每次結果出來後對相關係數的檢視都可為下次再進行分析做參考。
  • 定義取樣點: 取樣方式及數目取決於變量多少及範圍; 在信號/電源完整性的應用上, 一般若變量數目在10左右, 則central composite design 是一個不錯的選擇, 如此選出的取樣點在一千到數千個之間; 若是有更多的變量(<=30),  則使用D-Optimal較佳, 取樣法亦和建模方式有關, 當欲建模型不是透過RSM, 而是由神經網路的方式時, 則二次式的需求便未必需要, 故而可用如space filling等取樣法來進行;所述這些都是統計學上的應用, 故許多統計軟體都可拿來設計相關實驗;在我們的建模模組MPro裡, 則有許多常用的有關的內建:

    Design

  • 產生測試案例: 所定變量一般可分為連續性變量(如電阻值)及非連續性(如各corner等),雖然在變量可能值範圍內有不同的階度可選, 但在上一步驟的取樣點裡, 每一個變數一般只用-1, 0, +1來表示其最小,中間及最大值以用於其案例; 故接下來竹的步驟就是把這取樣點的設定轉為實際的案例以便進行仿真或場解。若是佈線前的分析, 則案例多是Spice的網表(netlist), 故案例的產生可運用如樣板網表(template netlist)進行字串替換來輕易達成; 對於和幾何相關的案例(後佈線或2D傳輸線或3D結構以場解進行), 則得需要更複雜的程序才能將取樣點轉成測試案例。不論那種程序,最後的結果是每一個測試點表示矩陣裡的一個行而必需要有相對應的案例產出。

    Collect

  • 對案例仿真、場解並後處理: 再來就是對產出的測試案例仿真、場解及後處理以得到輸出了; 因為可能有維數上千或上萬的案例需進行, 故一般是透過多執行緒或甚至是利用多台電腦來平行處理,最後再將每個案例的算出結果組合以便和原始輸入形成對應關係; 而在這一步驟中所著重的便是如何迅速有效的管理這些平行處理的案例分析。

    SimMgr

  • 為輸入至輸出建模: 有了輸入及輸出後, 接下來的就是實際的建模了, 若是反應曲面模型, 則可用前述的奇異值分解(SVD)來解相關係數; 其它的建模方式也包括了類神經網路等等;而模型的優劣則可透過其對現有結果的預測及殘值大小來查驗; 殘值(及實際值及預測值間差)愈小則模型愈好; 一般上可用R^2, 即因模型所造成的變異數, 來計模型好壞, R^2 >= 0.95表示是可接受的預測模型。

    modeling

    Prediction

  • 優化: 優化是在一定的變量範圍及條件(如不以是負值)等的前題下進行; 而後對單一輸出Y或是以比重組合出的複合Y (or cost function)來求極大極小化; 取決於所取變量的階度, 也有以下幾種演算法可運用:
    • 線性規劃: 若變數皆為一階且無cross terms, 則可用線性規化方式得到絕對解; 一般而言, 很多和幾何相關的計算(如layer stackup對阻抗的反應)等都只需要用到一階就可有很好的近似;
    • 非線性方法:常有高階項時, 可試著用如Nelder algorithm來求優化值;
    • 基因演算法: 這是需經過許多迴圈但可適用於近乎所有模型(含類神經網路)的優化方式。

      Optimize

  • 審視相關係數及殘值,重覆進行: 最後一步驟則是審視模型中各變量的相關係數, 剔除非主要的變量後再在下一迴圈裡做更進一步的操作; 也可能是對高殘值之案例更進一步檢查看是否是仿值或後處理的過程產生問題以造成離群值。

由上可見, 相較前一則貼文裡所提到的假設性分析, 欲以DOE/RSM的方式來為系統做優化是需要進行更多步驟的及計算資源的; 在另一方面, 一旦所建模型可具預測性(即殘值小), 則此一模型可做為假設性分析的基礎而取代很多不必要的仿真; 下圖中所示:我們的TPro模組先已透過對十數萬案例進行二維場解及建模而能將結果拿來建置成一快速的假設性分析功能使讀者可很快地透過拉BAR來得到相關的性能資訊。

A stackup what-if based on model built via DOE/RSM flow

 

信號完整性之最佳化:假設性分析

系統性能之優化或最佳化:

就系統上的信號完整性而言,所謂的『系統』一般定義為通信通道的頭尾兩端,亦即是自晶片上IO buffer的driver、經諸如封裝、傳輸線、通孔及連接器等的interconnect、最到接收器的receiver為止。這通道上有許多元件且各有各的設計參數;故若要以系統性能為優化目標,其實含有為數甚多的變量;即便是就『性能』而言,也是有很多不同量測的依據。。。諸如眼圖的寬度、高度及位元錯誤率(BER)等等,它們之間有些也未必成正比、如欲求極大化之眼圖寬度便可能得犧牲其高度等,故在諸性能間也有得取捨的空間或是得用加乘比重的方式來對整合出的複合性能求極大或極小的優化。

系統雜訊的來源:

系統性能除了被許多參與元件之參數所控制外,也可看做是受了許多雜訊的影響。如果我們把元件參數的變量以x1, x2 ~xn表示,則這些雜訊也可看成是函式g1(x1, x2), g2(x2, x3)等而同為元件參數所控制;最終的系統性能則是f(g1(x), g2(x)…) = f(x1, x2~xn);這樣分隔的的目的,在於很多設計或元件參數只對某個性能有影響;比如說傳輸線的間距與串擾(crosstalk)有強烈的相關性,相較之下buffer的驅動特性及速度則不那麼正相關︔也就是說,吾人可將具相關性的參數放在一起來對某系統雜訊的影響做分析,如此可能更具直觀性且不用在含全部參數的廣大解答空間裡尋找最佳值。

一般而言,系統的雜訊來源大致可分類如下:

  • 符碼間干擾 (inter-symbol interference, or ISI): 由於通道的色散特性及各級連接之間阻抗不匹配所造成的反射現象,傳輸的位元信號會與其自身相干擾而在接收端造成失真;
  • 串擾 (crosstalk, or cross-channel interference CCI): 串擾是由於victim及aggressors之間能量透過電容或電感性的藕合來傳遞而造成接收端訊號的減弱;串擾的情形一般在高頻時特別明顯、且也和許多界質及間距有強烈的相關性;
  • 電源雜訊:不同數目的buffer在不同工作區間或頻率運作時有不同的驅動電流之需求,當它們流過power delivery network時就會造成供應端的壓降而使得驅動強度及斜率均相對改變;
  • 隨機雜訊:由諸由有高斯分布特性之熱雜訊及其它顫動(jitter)等;

藉由探討元件參數對這些相互獨立的雜訊的影響,我們可以各個擊破地減少這些雜訊進而對整體系統性能達到優化的效果。

系統優化的方法:

有了這麼多的元件參數x1, x2 ~ xn, 間接形成的雜訊函數g(x)及最終的性能函數f(x), 我們要如何進行最佳化呢?

通訊通道一般都有必需滿足的規格,如業界標準的PCIe GenX, HDMI, SATA, USB, DDR等等,各有其公定的最低標準,唯有滿足其要求通過檢測後才能在最終產品上貼上相符的識別標章;對於較小的設計公司或是有截止期限的壓力時而言,很多情況下工程師都只求產品能通過規格標準即可,也就是說,他們所要的只是『一個』、而非『最佳』的解決方案;但對於有些需要提供design guide的公司,為了確保其它公司使用其產品的設計能順利運作,便得對所有可能的情況做分析以便即使在最壞情況下其結果仍能通過標準,所以它們便得做類似『最佳化』的全面性分析。其次,最佳化的流程常需透過大量的仿真及計算、故非有充裕計算機資源及能力無法完成。為滿足上述的兩種情況,一般而言我們有兩種優化的方式

  • 假設性分析:即what-if analysis, 在這種分析法中,我們將許多參數都先給定一數值,而後只對少數的參數做線性的研究;就信號整合性的例子而言、就好比是藉由調整傳輸線間距或線寬來觀察其對串擾的影響等;由於是線性地調整一兩個參數、所以全域(global)的最佳化不大可能由此分析而獲得,但在另一方面,這種假設性分析通常有如下的優點
    • 可用相對少的計算機資源來找到『一個』解決方案;
    • 可以相對短的時間內快速地得到結果;
    • 透過其近乎即時的反饋,工程師能對所調參數對反應的影響產生直觀上的連結及了解,近而可在日後有益於做出更好的設計。
  • 系統性分析:【如實驗設計法design of experiments等】這種分析法可看做是多維空間的假設性分析;有更多的設計參數可一起列入考量,在為每個參數定出其可能值的上下限後(所以嚴格地說仍不能算是global地優化)進行下列的程序: (我們會在之後的貼文再對這分析法做更詳細的解釋)
    • 決定取樣空間
    • 就每一取樣點產生相對應的設計
    • 對每一設計仿真及後處理
    • 為取樣點參數到後處理的結果建立模型
    • 透過所建之模型來預測最佳結果時的參數值
    • 研究殘餘值(residue)及參數間之相關係數

再談假設性分析:

由於假設性分析是透過對較少數變量的線性操作來達到探討其對最終結果的反應,故而在可操作變量的選取上便得先決定其是否有主要的影響,否則線性的參數調整將看不到結果的變化而失去其意義;其次、為求結果能很快地產出而有近乎即時反饋的效果,對其餘定量的因素或相關系統模型便可更進一步地做簡化。比如說、若吾人想探討的是系統參數對其ISI及CCI的影響,那我們便可將通道上的元件簡化成下列三部份來分別研究其與前述兩性能間的關係:

  • Driver: driver’s strength, slew rate, supply voltage, EQ (等化)settings
  • Interconnect:
    • transmission lines: layer stackup and materials Dk/Df, trace width, distances and layout etc
    • vias: pad, anti-pad size, barrel width, back-drill etc
    • package/connectors: change of reference and reference impedance etc
  • Receiver: termination scheme and different terminator values, EQ response and settings etc.

上述中的driver/receiver均已是行為模型(behavioral model)而非原始場效體型諸如通道尺吋或載體濃度的參數、也就是說一般是利用IBIS或/及AMI的參數來加以操作;對於interconnect而言,以二維場解器來計算傳輸線物理及尺寸(間距、線寬等等)所造成的阻抗或串擾上的影響是相對簡單的;一旦是必需要用3D場解才能算出的結構:如通孔Via、封裝或連接器connector等,就要需時甚久而使得假設性分析的效果打折扣了︔如果許可的話,應以簡化的的模型來取代。如下圖為例、在大致的計算上通孔設計可以PI模型來取代。

優化方式間的取捨:

我們認為一信號/電源完整性工程師的價值在於其能對各參數對系統性能的問題有其深入的了解進而能找出解決問題的方案。假設性及系統性分析均可做為這種知識及經驗取得的手段;對系統分析性【如實驗設計法】而言,有一可能的陷阱是因為其需要完整的流程及執行許多步驟,一旦前人建置完成,後來的工程師便可能陷入僅僅執行流程以產出結果報告而未對所得的預測模型做更深入的了解的險境;從而在眾多的數據中喪失了對單一參數的認知及了解。

SPISim使必信產品對假設性分析的支援:

基於前述討論的精神之下,我們設計出了支援假設性分析的XPro模組【X即Experiment, 亦即實驗】在這模組中、我們簡化了許多通道模型並提供了對能主要系統參數做假設性分析的功能,以便用戶能分別對ISI, CCI及電源完整性的一些課題分別做直觀快速的分析:

分析時所需的的仿真都是直接透過內建的SSolver無縫進行,一旦性能滿足所需,只要按下”Generate Model”鈕,則相對應參數的模型便可直接產出而在完整通道的分析上使用。這些功能是大部分其它公司的產品所欠缺而獨見於我們使必信的工具程式裡的。

IBIS模型: IBIS AMI之建模

截至目前,我們所談有關緩沖器的模型均侷限於其類比前端、直接連到通信渠道的部份;這篇文章我們則將談談其前級、有關TX/RX等化電路部份之建模。這些設計在業界現常以IBIS AMI (以下簡稱AMI, 即”Algorithmic Modeling Interface”理論建模界面之縮寫)來實現。
IBIS AMI模型範圍:
IBISAMI_Block

上圖所示為一端自最首至最末的通信渠道;其中綠色的部份佔渠道的大部份,是以如傳輸線模形所表示的PCB繞線、及用S參數所表示的導孔或連接器等組成的被動渠道部份;其兩端、以粉紅色區塊表示的部份即以IBIS表示的類比前端;這些前端部份直接与渠道連接;除這兩者之外,在TX的最前級、及RX的最後面則是各種等化電路。這些電路現常以AMI模型來描述。之前所述的幾個部份組合在一起,則可用以描述通信渠道整體並加以仿真或分析。由此可見,AMI實則是和IBIS的部份一起運作以提供等化模型的(也就是說,若無等化電路,則無使用AMI模型的需要)。實務上來說,在一會與AMI共同運作的IBIS模型裡,會看到如下圖所示之數行描述,即會指向所使用的幾個AMI模型成分:含各類模型參數、以純文字檔表示的.ami檔案、編譯出來的二進位檔.dll(on windows)或.so(on linux),以及編譯此二進位檔所使用的編譯環境等等。

IBISAMI_Include
為什麼需要使用AMI:

對於系統整合性的分析,若欲為結果做一量化的描述,一般最常用的是眼圖裡的眼高及眼寬、以及依此所能推算出來的位元誤率(Bit Error Rate, or BER)或bath tub curve,要能形成眼圖,則需有很多的位元信號響應在時域上圍著週期中心重疊起來。在分析完整的通信渠道時,不論是以原Transistor之緩沖器設計抑或是其IBIS模型,在時域上要仿真數以百萬計的位元信號(才能得到想要的低BER)都是要需時甚久的。即便如此,得到的BER數據也極其有限而常需要以外插的方式來推算實際值。除了以仿真為手段為,另一種能得到波形以形成眼圖的方式是直接合成。。速度遠比進行仿真快得多。IBIS模型因其設計上的限制並無法讓我們如此做。除了能在極短時間內算出許多位元波形的速率考量外,下列數者也是發展AMI的原因:

  • 業界標準:純欲以高速在短時間內得到很多位元波形的目的而言,也是有其它商家特有的高階語言(如Matlab)可滿足這需求的;但如此一來建模工程師便等同限制了使用其模形客戶的分析工具;除此之外,這樣建出的模型也無法用其它仿真器來加以驗證。為了能讓IC及EDA業者均有能交換使用的模型標準,如AMI的模型規格實有其必要。
  • 分析速率:如之前所述,需要一能在短時間內得到數以百萬計位元響應的方法及模型。
  • 擴充彈性:其實在AMI之前,IBIS委員會也曾經用Bus Hold或Driver Schedule等的關鍵字來試圖在IBIS內加入等化器的有關描述。甚至在IBIS V4.0中,也有用以Verilog-A為代表的高階語言來擴充以關鍵字為主的IBIS模型的彈性。但執行起來,前述兩關鍵字的使用極其僵化,而Verilog-A又是直譯的語言,遠比不上用C/C++來編譯的語言彈性更高且能保護智財,因而有AMI之倡議。
  • 智財保護:等化器設計電路常是IC公司極欲保護的智財,故一以編譯(編來的檔案是二進位檔)為主、不易被反向導出原設計的建模即有存在的必要。

 

什麼是IBIS AMI:

在談過AMI的模型範圍及其需求背景之後,我們來談談倒底什麼是AMI及其組成部份:

  • 對IBIS AMI建模者的角度而言: IBIS AMI即三個您需提供實際執行的函式定義表頭 (header .h file),這三個函式即Init, GetWave 及Close:
    • AMI_Init: 這個函式必需有實際執行碼,它的功能就好比物件導向語言裡Constructor的角色。若輸入AMI模型的是長串的位元輸入,則AMI規格允許它們被分成好幾小段分別被作為輸入並執行。也就是說,程式碼裡有很多資料結構可能重覆地(在不同的位元輸入段落)裡被使用,故Init函式提供一可在一開始之初便初始化這些資料結構的地方。其次,若通信渠道為線性且非時變(Linear, Time-Invariant or LTI),則在Init函式裡便可對仿真器所提供的渠道突波響應(Impulse Response)做直接的計算而可略過GetWave函式的實際執行。
    • AMI_Close: 這個函式必需有實際執行碼,它的功能就好比物件導向語言裡Destructor的角色。其功能是在仿真結束之際,為之前已分配的資料結構之記憶空間釋放回底層的作業系統。
    • AMI_GetWave: 這個函式的執行可有可無。若含EQ在內的通信渠道為非線性或具時變性,則將無法透這一個突變響應便用波形疊加(Superposition)的方式直接合成並算出BER,在這種情況下,則必需執行GetWave,一長串的位元信號會依序或分段地傳進模型,而後GetWave便一段段地將其做計算並輸出結果波形,仿真器最後才將這些波形再組合起來以組成時域波形並進行疊合(Folding)以產生眼圖。
  • 對IBIS AMI使用者的角度而言:IBIS AMI是由以下三個檔案組成的模型:
      • IBIS file: 這即類比前端的部份,且需有一”[Algorithmic Model]”的描述以指向下面兩個檔案, 即.ami及.dll/.so檔。
      • .ami file: 這是一純文字敍述的參數檔案。建模者將模形參數外顯供用戶調整的部份均在此處。例如下圖中即示出一含有四個tap的等化器設定;可以看到各個tap的比重參數均以數字實際標示出來,且用戶也可加以更改。除此之外,其它的模型參數、諸如是否有GetWave函式的支持等等也包括在此檔。仿真器一旦透過最上層的IBIS檔案讀到這.ami檔後,其便知將如何跟最底層的二位元檔(.so/.dll)進行資料交換。

    IBISAMI_AMIParam

    • .dll/.so file:這即編譯出來的檔案,要注意的是這兩者也跟用戶作業系統是32或64位元有關。若您是使用64位元的作業系統,則也必需要用64位元的.dll或.so檔案才能透過仿真器進行分析。

IBIS AMI的使用場景:

IBIS AMI的建模者無法預見其建出的模型如何被使用,然而模型本身便限制了其適用的場景。AMI的使用場景有分為Statistical及Empirical兩種模式;若GetWave函式沒有在.dll/.so裡支持的話,則這個模型將只能透過Statistical模式運作。也就是說:通信渠道將假設為線性非時變,一個突波響應即可用來導出所有的BER。相較之下,一個有GetWave函式支持的AMI模型在Statistical及Empirical兩個模式裡都可被使用而不一定要有渠道是線性且非時變的假設。下圖簡示了兩模式運作的不同:

IBISAMI_Work

 

  • Statistical flow: 在此模式下,渠道為線性且非時變,故可用一個突波響應來以superposition的方式合成數個或更多的位元的真實響應。也就是說,仿真器提供被動渠道部份的突波後,TX 及RX的模型即可在Init裡將自身的轉換函式與其做捲積(convolution)來做如peak distortion analysis般的計算來得到BER。
  • Empirical flow: 在這模式下,渠道為時變或非線性,仿真器會產生長串的位元序列並與被動渠道做捲積,其結果會再被分成數小段,每一段會與TX 或RX的GetWave函式做運算,最終結果再由仿真器重組成長串時域波形而算出眼圖或BER。

在實務上,因為TX, RX的模型可能由不同的IC廠家所提供,故不同組合下會有更多運作上的限制。讀者可參閱IBIS規格文件裡第十章的部份來了解更多的細節。

這篇文章簡述了IBIS AMI模型的構成及使用;記得之前談到IBIS建模時,我們提到其優點之一是工程師毋需了解真實設計內部的細節也可進行建模。這項優點在AMI上可能得大打折扣,首先EQ內部的參數通常很多,建模者需要更多的了解或與原設計師更多的溝通才能決定有那些參數可以外顯,其次,這些等化器的設計需透過如數位信號處理之編程般才能以C/C++語言以符合IBIS AMI表頭規格的方式來進行編譯,除了編譯器的操作本身需要一些專業外,如何對建出的模型進行驗證也是一項挑戰。所以在業界一般是由像我們SPISim使必信科技般:對SI及編程領域都同時有專業的商家來和IC廠家一同合作來完成建模。這中間還有很多細節值得深入討論,我們將來有機會回頭再談。

IBIS模型: 如何建立IBIS模型

在前面的文章裡,我們簡述了IBIS模型內所需有的資料。這些資料多是以IV, VT, IT的波型表方式呈現;所以所謂的為IBIS建立模型,即是激發原來的緩沖器設計並進行仿真、最後再將仿真的結果進一步處理以合乎IBIS語法的模型表示出來。下面簡單列出了為IBIS建模所需進行的幾道程序:

  • 搜集資料: 即獲得原緩沖器之設計資訊及相關操作係數;
  • 產生電路: 為所用的仿真器產生模擬電路以適當激發緩沖器來運作;
  • 進行仿真: 仿真上一步所產生的各種擬電路;
  • 分析結果: 後罝處理仿真的結果, 並加以運算或轉換;
  • 產生模型: 產生合乎IBIS語法的模型;
  • 語法檢查: 用IBIS公用的程式(Golden Parser)來檢查產生的IBIS模型;
  • 驗證模型: 為建立之IBIS模型產生相同操作情汜的電路並進行仿真;
  • 產生報告: 替驗證的結果做出量化的報告,為模型加上如生廠商等的資訊等。
SPISim BPro's 的IBIS建模流程

SPISim BPro’s 的IBIS建模流程

 

以下我們再對上列的步驟做進一步的說明:

  • 搜集資料: 以下面圖中的緩沖器設計為例,欲為其建立模型,首先我們先要從設計工程師那裡取得詳細的設計檔案,其次, 我們也需要拿到這個設計生產時的製程係數:比如說是用那個製程(Process), 理想的供電電壓是多少(Voltage),以及預設的操作環境溫度等(Temperature), 這些參數一般統稱為(PVT係數)。最後,我們還需要知道這設計正常運作時端點該如何連接? 也就是說那個節點應該的偏壓是多少。當代的緩沖器設計常有許多控制腳位(Control Legs), 藉由不同腳位的通路與否,可決定了這個設計的諸如輸出電流強度及速度等的效能。以上資料缺一不可。都完備之後即可進行下一步:產生適當的電路以對激發緩沖器並為其進行仿真。
緩沖器的設計及相關製程資訊

緩沖器的設計及相關製程資訊

 

  • 產生電路: 在這個步驟,我們需要產生各種電路以便能對其結果萃取出所需的IV/VT/IT資料波型。如之前所述:不同類型的緩沖器有不同的資料表需求,以下就為所需資料緩沖器需被激發運作的方式做一簡述:
    • IV for PU: 緩沖器需被致能(enable), 而後令其輸出邏輯1的高態,在輸出端以 -Vcc ~ 2Vcc進行掃描以獲得電流輸出/入資訊;
    • IV for PD: 緩沖器需被致能(enable), 而後令其輸出邏輯0的低態,在輸出端以 -Vcc ~ 2Vcc進行掃描以獲得電流輸出/入資訊;
    • IV for PC: 緩沖器需被放在高電阻態(High Z), 而後令其輸出邏輯1的高態,在輸出端以 -Vcc ~ 2Vcc進行掃描以獲得電流輸出/入資訊
    • IV for GC: 緩沖器需被放在高電阻態(High Z), 而後令其輸出邏輯0的低態,在輸出端以 -Vcc ~ 2Vcc進行掃描以獲得電流輸出/入資訊;
    • ISSO PU: 在理想供電點及緩沖器上拉端口間接一電壓,電壓值自-Vcc~Vcc進行掃描,同時在輸出端量測輸出/入的電流資訊。這個設置模擬了緩沖器在非理想供電電壓的情況下,輸出電流的變化情形。(Voltage Droop)
    • ISSO PD: 在理想接地點及緩沖器下端口間接一電壓,電壓值自-Vcc~Vcc進行掃描,同時在輸出端量測輸出/入的電流資訊。這個設置模擬了緩沖器在非理想接地的情況下,輸出電流的變化情形。(Ground Bounce)
    • VT for rising/falling waveform: 緩沖器的輸出端需連上測試電阻及電壓等的電路,以合乎實際情形(如100ps的上升時間)的數位信號輸入, 同時在輸出端量測瞬態的電壓波形。這種電路應對不同的測試負載情況再做一次。這兩組的測試情況應足以涵蓋了實際運作情況的操作範圍。
    • IT for composite current: 在緩沖器的上拉端口接一零電壓差的電壓源、用以監測流過的電流。在如同VT電路的測試負載運作時,量測並記錄這電流值。基本上IT 和VT的電路分析可在同一次仿真中同時進行。

BPro_ISSO

IBISIT

 

  • 進行仿真: 以上所產生的電路可分別放在不同的檔案…每個檔案只針對一個不同的資料仿宜需求, 抑或是它們都放在同一個檔案裡, 再用如HSpice裡的.alter依序進行仿真。前者的好處是不同的檔案可在同一機器上的不同執行緒裡、或是不同機器上同時進行仿真以結省建模時間。有些緩沖器的設計需含有時脈(Clock)的輸入, 在這種情況下穩態的掃描(DC Sweep)則不可得, 而得透過如假瞬態分析的方式才能得到結果。這分析技巧也套用在一些不易在DC仿真收斂的設計。

    BPro 產生的電路檔

    BPro 產生的電路檔

 

  • 分析結果: 這一步所要做的是對仿真結果讀出及計算。比如說要將無法剔除、一直都會有的PC/GC逆向偏壓時漏電電流自PU/PD電流裡減去, 以及將PU/PC的結果轉換為對VCC而非對地等等。 若是緩沖器還含有 on-die termination, 則PC/GC仿真所得的電流將不容忽略,而得進行更複雜的[如此所述]的運算。

 

  • 產生模型: 有了結果後,便是將其轉換成合乎IBIS模型的語法並輸出成檔案了。 為了使模型準確而精簡, 優化的程序常是不可或缺的。優化的需求在於仿真的時域結果常包含了上千甚至是上萬個資料點,但IBIS V3.2的規格只準許運用100個點。即便是IBIS V5.0 後準許用更多個點數,也因為Composite Current常是非常波動而不平緩的, 所以仍需要對現有資料點分析以選用最佳的點來表示波型。其次, 在IBIS的資料表裡TYP/MIN/MAX的各個欄位都有同樣的時間點(同一行表同一時間點), 這更曾加了優化的需求及難度。因為優化的程序需同時考量到三組波型資料的取捨。
BPro's 的演算法可優化並以最佳100/1000點來建模

BPro’s 的演算法可優化並以最佳100/1000點來建模

 

  • 語法檢查: 有了IBIS模型後,便需以IBIS委員會公開發佈的語法檢查器(Golden Parser)來檢查。除了一般語法外,它也會偵測可能的穩態電壓誤差。當誤差值大過容許值時,警告便變成了錯誤…一般業界的仿真器是不會對含有錯誤的IBIS模型進行分析仿真的。所以根除錯誤及了解並儘量減少警告的標示便是極重要的工作。
BPro 用 golden parser檢查語法等的錯誤

BPro 用 golden parser檢查語法等的錯誤

 

  • 驗證模型: 有了合乎語法的模型,下一步是為其建立如原緩沖器相同的測試負載情況下的電路來進行仿真。一個好的IBIS模型應是準確、精簡、且運作迅速的。所以這些電路應跑得非常快。當有了結果後就可先以視覺上將模型及原設計在同一測試負載情況下的結果一同比較。一般信號輸入到輸出間的延遲是不能由IBIS模型的所重建出來的。所以如果除經果些許的時間位移外,兩者的上升及下降波形都很近似、而且穩態的(高/低)電壓也都相符,則這就是一個可接受的IBIS模型。

 

  • 產生報告: 替驗證的結果做出量化的報告也常是建模標準之一, 以下的兩份資料已為量化的標準做了一些規範:IBIS accuracy handbook and quality spec. 對於圖形驗證上, 一種品質因數(Figure of merits)常被用來表示所建出模形和原設計在同一負載時輸出波形的相似度。
BPro's 視覺上的檢查及品質因數報告

BPro’s 視覺上的檢查及品質因數報告

以上我們簡單敍述了欲為緩沖器建立IBIS模型所需經過的程序。所謂”魔鬼藏在細節裡”, 很多細節之處雖是值得深入探討、但已在本篇文章的範圍之外。實務上來說, 以人工手動的方式來建立IBIS模型雖是可以做得到、但往往是曠日費時又易生錯誤。這也就是為什麼我們SPISim 使必信科技研發BPro模組來簡化這項建模工作的原因。

系統完整性分析之範疇

系統完整性分析大致上可分為幾個領域:信號完整性(Signal Integrity)、電源完整性(Power Integrity)及電磁相容性(EMC… Electro-Magnetic Compatibility)等等。分析的方式通常是先經由對被分析元件或通信渠道建構模型、而後透過軟體進行仿真。

在談更多的細節前,我們需先為所謂的”系統”做一定義:

20120126_01
上圖(1)中所示為一常見的電腦主機板;在板子最上層的元件多包括了散熱器、各種的電容及末端的連接器等等。若把板子翻過來..如圖(2)所示,我們則可看到很多的焊接點及在電路板上的佈線(PCB trace),如此類的非晶片內部的、可宏觀上用肉眼看到的系統即是我們所定義系統分析的範疇。唯這類系統並不侷限於電腦主機板,舉凡手機電路板、內篏式系統或甚至是大型伺服器裡的電路亦可含括在內;以上所舉的這些例子宏觀上均可以用肉眼看到…差別只在於大小。之所以不將晶片上的設計包含在系統分析之內是因為其相對尺寸較小…對於一般傳訊的波長、信號失真的幅度遠比在我們所定義的系統上來得小。
20120126_02
我們剛剛談到的這些系統多是用電腦輔助軟體所設計而成,若我們能把設計圖如圖(3)放大來看,可以看到許多的佈線從晶片邊緣的針腳(Pin out)走線透過導孔(Via)經過不同的PCB疊層而走到板子邊供輸出輸入的各類連接器,如圖(4)所示。
20120126_03

若我們能繼續放大以三維模式看這些針腳及導孔附近,如圖(5)所示,則可發現這些宏觀上毫不起眼的細微之處,實為各類圓柱體所建構相連接而成;圓柱體穿過疊層間(Layer stackup)而連到電路板上專位信號或電源預留的走線層(每一電路板在上下兩層間實為數層不同的電源、走線層與不導電界質(medium) 交互壓縮而成),在這一連串走線的兩端是晶片的封裝(package)及連接器(connector)。電氣信號從晶片裡的緩沖器而始、經過這一連串的走線及導孔、最終來到連接器。連接器之後亦經同樣的程序最終走到彼端晶片內的接收器。如果說這端的源頭是電腦處理器(CPU)或晶片組(chip-set)的緩沖器,彼端可能就像是如記憶體(DDR)或USB的各類裝置裡晶片的接收器。
20120126_04
當我們把這些在傳送或接收晶片裡的緩沖器(buffer)調出其設計圖來看,則可看到不同大小的場效體(MOSFET)以相應的邏輯方式組成。不同位元(bit)的信號由其前級的電路輸出後,透過這些緩沖器對信號加以放大及加強以便能在不失真甚鉅的條件下透過剛才所述的走線、導孔、連接器或甚至是中間的藕合電容等達到另一端的緩沖器對已衰減了的信號加以復元重建。為減少衰減的情況、這些欲傳送的位元信號也可能先進行編碼,再在接收端進行解碼。

系統分析模型:

由上所述,我們可以看到若欲對我們剛剛所定義的系統做完整性的分析,則必需先對其中所牽涉到的各種元件及因素(整理表列於下)做些了解。如此才能為其建構模型而進行仿真分析:

  • 輸出、輸入緩沖器: 通常是以IBIS或Verilog-A所描述;如何為其建模等等;
  • 晶片的封裝:各種封裝的方式及其建模;
  • 電路板及其疊層:不同疊層、介電質及通信、電源層設置的影響;
  • 走線(傳輸線):如何為失真的因素、如串擾(Crosstalk)、等做分析;
  • 導孔、連接器:如何設計、建模並分析其傳訊效能;
  • 通信渠道:各種佈線、佈局(topology)方式及端口阻抗的設計;
  • 信號:不同界面(PCIe, USB, DDR等)的不同信號方式及差分信號及其等化等等。

我們將試著在這個SPISim的版面, 為以上所列之建模及分析方式做一簡單的整理介紹。

前言

關於本部落格:

SPISim科技專注的領域是信號、電源完整性及電路擬真;我們的產品亦為這些領域裡有關方法、流程以及演算法在軟體上的具體實現。為了進一步與大家分享我們的設計理念、標準分析程序、專業知識及相關經驗;我們認為設立一個部落格是必需且會有相當的幫助。

以下為我們希望藉此部落格達成的目標:

  • 能做為我們在信號完整性、電源完整性及電路擬真領域中;相關基礎及進階理論知識的彙整之處;
  • 能做為一管道以便我們能將相關軟體設計理念及常用分析流程與讀者分享;
  • 能收集讀者的反映及建議以做為日後產品加入新功能時的參考。

我們計劃每週刋出數篇文章來涵蓋下列方面的主題:

  • 基礎:如信號、電源完整性裡相關的概念及理論;
  • 建模:如傳輸線、S參數及驅動器的建模程序;
  • 分析:如jitter, noise 及 timing等的分析方法;
  • 擬真:如如何將以上的理論及模型放整合以進行電路擬真;
  • 軟體:我們如何將這些概念及設計理念實現於SPISim的產品。