仿真器之研發:建模 (S-參數及Port元件)

系統上的channel及很多個別元件都是以S-參數來表示,其可能是用三維場解器依實體結構(導孔或連結器等)算出、也有可能是利用我們SPro的工具一級一級串結計算(cascade)而成。再加上LTI (Linear, time invariat即線性非時變)的假設,很多工具便可依channel單一脈衝(pulse)的波形來模擬數以百萬計位元的相疊加而得到如眼圖或BER圖形等的資料;無疑地,不論是單一脈衝波行的計算(在含IBIS情況下,未必都能用IFFT的方式來達成)、抑或是針對一些特定位元樣式(bit pattern)時域響應,一仿真器都應有能支援的能力。除此之外,在很多情況下我們所得到的spice電路是由頻域轉換而來、但其原始頻域資料又已不可得;故也常會有要能重現其原來S-參數資料的需要。這篇貼文裡,我們將簡單談談S-參數及相關的port 元件在SPISim使必信 SSolver裡是如何建模的。

S-Element… S-參數

近十數年的研討會或學術論文裡,多有許多對S-參數時域建模仿真的研究;在最基本的概念上,S-參數是在不同頻域點的輸出入相關資料,其可被視為一頻域的轉換函式(transfer function)或是濾波器;故可套用數位信號處理的基本應用:在頻域上和輸入做相乘等於是在時域上做捲積(convolution):

一旦轉成時域(如上圖的最底部方程右邊)則等號右邊則可進一步改寫分成兩項:一個是由元件過去的歷史值算出、亦即由-infinity積分至前一步t=n-1的項目;以及在現今時步t=n和當下輸入有關的項目。前者因是歷史值已發生,故可被視為是一常數而在牛頓迴圈裡不再更動;後者則因和當下輸入有關,故需在Solve及Stamp的熱迴圈裡不斷更新。總的來說,這兩者寫在一起便有了諾頓等效電路I = Y * V + J的形式。其中的Y和輸入V是連在一起的而J則可被視為常數不變。這兩者的值算出後便可自系統矩陣內更新來求解。

有興趣的讀者可參考HP多年前所出版的文件,其中對以這種捲積方式求S-參數解的過程及數學有更詳細的解釋:

Integration of Transient S-Parameter Simulation into HSpice

其中的第「18」及「19」式即為上述有關等效電路的部份。

因為捲積的基本理論是在每一時步之末,常數的值都需更新為-infinity to t=n以便為下一時步t=n+1所用,再者捲積是一種IFFT的樣式而在時域上的時步是固定的,這種要求限制了仿真器運行的速度,也就是為何近來有許多研究論文建議以不同方式來進行S-參數時域仿真。

其中的一種可能是利用之前所提、用在傳輸線建模上的的vector fitting技巧:先利用如Pade approximation 般將S-參數頻域資料透過不同極零點的選取而轉成有理式(rational function),而後利用同一種basis function在不同極點頻率對時域的轉換而得到相對應的形式;這過程的一個附加效果是若原有的S-參數資料有non-causal的情況,便可在有理化的過程中得到修正;與為傳輸線建模同樣地:極零點數目的多寡和是否與原始頻域資料相近似、以及轉成時域後的仿真速率都有相關;再加上原始S-參數資料在某些點可能是ill-behaved,故在實務上常得用如pseudo-inverse的方式以minimum-square-error sense的方式來求得近似有理方程式。

P-Element… 埠(port)元件

系統上許多元件、諸如晶片封裝package, 導孔via,連結器connector等等設計過程都是先有立體設計;而後用三維場解轉出S-參數,最後再用如broadband spice等的工具轉成相對應的spice 基本元件以便能在時域上仿真。對系統完整性分析人員而言,也在很多情況下所得到的元件模型多是這種已透過轉換得到的spice形式而其原始頻域資料並不可得;與其就直接把元件置入channel中來進行分析,較好的做法是先看看其頻域響應為何、頻寬是否足夠及是否有連結性上的問題等等。透過仿真的方式將spice subckt轉出S-參數在此便用應用的空間;而由於S-參數之轉出是植基於小信號頻域分析的,故一旦系統元件的AC模型建構完成,則轉出其S-參數也就近乎水到渠成了。

在此我們談的S-參數轉出是小信號部份,也就是在DC操作點附近的頻域分析,故而步驟上是先在輸入埠元件定義的地方先而對DC求解、加上AC信號後對其它埠測量,而後再進行下一個埠以至所有埠都掃過為止。

一般而言,埠元件(port element)都有幾個參數:DC偏壓、參考負載(reference impedance)、埠序(port order)及埠名(port name)等等;在輸入埠有DC偏壓時,其它的輸出埠都是連到參考負載的;在不同的頻率上求解後,輸入輸出埠間功率的關係可透過對埠的電壓及輸出入電流的量測而算得,而後依S-參數的測量公式:

S-parameter measurements

便可得到輸入埠i對其它埠j的Sij值;重覆這程序掃過所有的i後(不同的輸入埠可能有不同的偏壓)不同頻域點的Sij就都有值了,最後再依之前定義的埠序把資料寫出(至touch-stone format)且在表頭註記埠名則S-參數轉出的程序即算完成了。若是有進一步的需要要將S-參數轉成其它如Y, 或Z參數的形式,則可透過公式(雖是只有雙埠,但若假設S-參數是廣義的2-n port 也可適用)或是如本司SPro的工具達成。

 

回到仿真器的部分:

除了至今所提的各個元件物理模型的建模外,回到仿真器的階層則又有如下列的相關的課題:

  • 記憶區(memory pool)之管理:分配,擴張及清除
  • 多執行緒
  • 模組化外掛架構以支援新元件
  • 其它種種。。

不難想見這清單可很長地列下去,而之中的編程的工作也未必簡單;即便如此,對於系統分析的方法及流程而言,仿真器的完成及支援實有其不可取代的價值:對很多日後的分析,我們都不用(很多情況下也不可能)再得事先導出所有的算式了,我們大可透過直接形成網表後呼叫仿真器後再後處理資料的方式達成。這不僅有助於軟體的模組化,在穩定性(仿真可在另一執行緒或透過simulation farm完成)甚或是可測試性上都很有幫助, 對於一以研發系統EDA的公司如我者而言,是一項值得的投資。

仿真器之研發:建模 (IBIS及傳輸線元件)

元件在仿真器內運作的順序大致上是:先將網表上所給的原始設定轉為仿真過程中內部所需的資料結構(Parse)、在DC未開始之前將物理模形轉成(Model)諾頓等效電路之形式,而後在每一時步或每一時步的牛頓迴圈中更新(Solve)等效電路參數值並將其填入(Stamp)系統矩陣中,最後在每時步或仿真結束前將其資料傳給上層以便記錄後處理或直接寫成波形檔(Query)。這其間的“Model”與”Solve”的設計便是仿真器設計中需對元件物理要有的理解才能順利完成的。

在這兩篇貼文中,我們將大致談談系統元件中IBIS、傳輸線及S-參數等是怎麼被建模(Model)及求解(Solve)的。

B-Element… IBIS:

我們之前已對IBIS寫過幾篇貼文,同時也由下面的IBIS結構中便可對如何建模猜得一二:

這幾組IV曲線: pull-up, pull-down, power clamp and ground clamp基本上就是非線性電阻,亦即其電阻值隨著兩端點的瞬態電壓而改變;故在牛頓迴圈裡,程式只要利用其電壓差來在之前Parse得的曲線做線性內插即可。實務上因為這種內插要進行很多次。。若每次都從第一點開始掃描點落在的區間則效率不佳,故可先建成線性方程以增進查值速度。

上述IV曲線之外,瞬態波形轉出的切換係數switching coefficient及合成電流composite current 兩者都是與時間點有關的,其作用可視為是一個乘數來對靜態算出的電流再加以限制。切換係數的目的是要確認IBIS在連到表定的負載時,在端點會有如waveform table一樣的響應。而這係數是在仿真過程中只要事先計算一次即可的,故可在Model步驟中完成。最後至於C_Comp,若可能的話可直接加入仿真器已有的電容器串列中而不需要自行管理有關error prediction及積分等的事宜。

大致上來說,為IBIS元件編程較複雜之處多是因為不同的模型參數可能有不同的skew,而其間可能的不同組合(比如說fast 和slow就會由不同參數中typ, min, max組合而成)便得對簿計先事先規劃;其次,因為在同一元件裡,除主IBIS外也可能會有submodel, driver schedule等的附加IBIS模型以達成pre-emphasis等的等化功能,故在軟體的設計上可能也得考慮如composite pattern以便能以一模版來遞迴地加入主要及附加IBIS模形部份。最終而言,IBIS元件的建模是相對容易的。。尤其是如果跟即將要提的傳輸線相比的話。

W-Element… 傳輸線

每本電磁學教科數裡都會列出如下傳輸線單位長度dx上的RLGC基本模型:

在含HSpice的許多仿真器裡,上述的模型多以U-element建成,即(Uniform distributed model);由於使用者得事先決定要以多少單位長度(dx)來建模,再加上仿真效率上的考量,這種U元件多已不被使用了。話雖如此,傳輸線的基本模型資料(frequency dependent tabular model, or tab model)仍是以這種形式儲存的:

這種tab model一般是由二維場解器依PCB疊層、走線寬度、疊層間界質之物理特性(如導電度,介電常數等等)甚至是粗糙度後處理(surface roughness treatment)等照Maxwell的邊界值條件在不同頻率上解出而來;一般上也都必需要有低頻(近DC)、高頻(50G或100G)及其間不同的頻率點的值才算完整。那要如何將這原始資料轉成可仿真的線性模型呢?一般可從電報者等式 Telegrapher’s equations 開始著手:藉由解出單位長度下RLGC的KCL/KVL,我們可得到一階導數式:

而這兩列微分方程的解,即如上述wiki連結裡所示,為一含有傳播函數Gamma T的波方程 :

當把這系統模型之解寫成有如線性式時,便有如下的諾頓等效電路:

在傳輸線近端及遠端的電路裡,都有兩個部份:其一是在瞬態當下的電抗Z(s),其二是由彼端入射或反射、經傳播遲延而傳來的電流源。這兩者在上圖都仍是頻域值,故在時域仿真時,均需再進一步地轉化成可積分的形式才能在不同時步中stamp入矩陣。綜上而言,傳輸線元件的仿真步驟為:

  • 讀取並儲存原始的tabular model;
  • 利用上者最高頻率值(或利用外插)來算出此線之傳播遲延及特性阻抗,這兩值將使用在後面的時域仿真中;
  • 在頻域中建模出上面系統模形裡的阻抗響應Z(s)及傳播響應r(s),因傳輸線可能是有多條線藕合在一起的,故這些響應式多是多維的矩陣;
  • 利用Vector fitting 的技巧以數個極零點來模擬上述Z(s)及r(s)的曲線,在大多數的情形下(尤其是當原始模型資料不足或ill-behaved時)要很完美的能去map這些曲線可說是不太可能的,則需採minimum-square-error等的方式如來求近似曲線的極零值;
  • 一旦有極零點,便可將每個term都轉成相對應的時域函數,而這所有的term在時域上的組成即是其在時域上的響應。例如Pade’s approximation就是同樣的原理;
  • 在時域仿真時,每一時步中都對彼端在傳播遲延時間前的歷使值利用內插的方式來得現值r(t),這現值再和當下的Z(t)一起組成等效電路填值於矩陣中;
  • 在頻域仿真則簡單得多:可跳過vector fitting及轉成時域積分式的步驟而可直接內插出當下頻率的Z(s), r(s)來使用。

對於前三個步驟,我簡單地寫了兩個Matlab scripts 來模擬兩條藕合線的情形:

阻抗函數:

傳播函數:

輸出:

以matlab編程的話則上面的程式看起來簡單得多;實務上多數的仿真器(含SPISim的SSolver)為了仿真速度上的考量都是以原生碼(C/C++)編程而成,故在matlab裡簡單呼叫即可的矩陣操作如inverse, eigen value, LU decomposition等等都會因在原生碼語言中所用函式庫不同而多顯得冗長複雜許多。

最後,很少剛為元件建模完成即可直接運作無誤的,很多情況後面除錯所花的時間精力會較前面開發的期間更多;對傳輸線而言,因其多為多條線藕合、且由極零方程轉到時域的方程又有很多項、再加上有些信號得等上傳播遲延後才會由另一端傳來,故在除錯上是極具挑戰性的。一般上我們是用divide and concour的方式先把問題簡化到最少再一項一項來修正:比如說先除錯單線,阻抗完全匹配(故無反射),且特性阻抗為已知(故可查入射的振幅)再從DC位準來的除錯等等,這樣便會顯得有頭緒許多:

SPISim SSolver傳輸線建模的根據論文和HSpice所本的是同一篇,有興趣的讀者可依下查閱:

“Optimal Transient Simulation of Transmission Lines” by Dmitri Borisovich Kuznetsov, Jose E. Schutt-Aine, IEEE Trans. on Circuit and Systems, I Feb. 1996

教科書方面個人則以為Dan Oh:“High-speed Signaling”, 也就是我們相關書籍選列中的第S6 於第五章部份解釋得較詳細;這也可能是因為原著者也在相近時期與上述論文第一作者自同一學校畢業之故;最後也值得一提的是上述傳輸線的建模方法也常可應用到其它不同的元件,比如說是同是均質被動、以S-參數表示的system channel。在將頻域資料利用vector fitting轉成有理化式的過程中,一些原有的S-參數問題(causality)即可透過這個程序來修正。

仿真器之研發:界面

在前則貼文中,我們提到電路仿真器的核心部份是有由線性代數方法, 來對由節點電流及網目電壓方程所形成的矩陣做求解;我們也提到靜態及瞬態的運算中,元件部份被呼叫最多次的函式是”Solve”及”Stamp”兩式,也就是元件先依在那一時步的那牛頓迴圈中的端點電壓電流情況針對元件本身的物理方程求解,而後再將解出值填入矩陣式中的步驟。由於在熱迴圈(hot loop)內而被呼叫次數眾多,元件裡的這兩個函式便需務求精簡迅速必要以使仿真器整體運作能穩定、易維護且具延展性。

在前文底所列的經典電路分析教科書中 “Computer Methods for Circuit Analysis and Design” :第170頁列有元件值是如何被填入矩陣裡的:

從上表可見,在第一層的界面定義中(也就是元件的Solve函式裡)最主要的工作是不論單獨元件物理特性為何,均能由當下端點偏壓或所流經電流值而轉應成相對應的基本元件(如電流I、電壓V、電應G及電抗A)形式再依上表填入系統矩陣中。除此之外,由於牛頓法裡也要求要能提供一階導數以便在下一迴圈裡能更新自變數,故元件也要有能依端點情況提供一階導數(i.e. partial derivative)的能力;否則,仿真器將被迫以數值方式來對系統矩陣求導數,也就是在某一點情況下固定一自變數但依續變動其它自變數的方式來求數值上的導數(dV/dI 或 dI/dV),如此以來,將導致仿真速度明顯變慢且更不穩定(易不收歛)。

在理論上,不論一元件(即便如場效體或傳輸線等複雜元件)是否為非線性,其都可以藉由固定維持大多數自變數為常數的方式而得其線性化模型;比如說在某一時步(故t在此為常數不變)的某一牛頓迴圈(故端點情況為固定不變)的情況下,便可利用諾頓(Norton circuit)戴維寧電路(Thevenin circuit)來達到簡化模型的目的:

上圖中,簡化後的模型已可用上述的基本元件(I, V, G, A)來表示而可依表填值;在我認為:這簡化的過程就是元件物理和仿真器相交集之處。

舉例來說,簡單的元件如R, V, I等等,程式只要依表填入到系統矩陣相對應之處即可;被控元件如E, F, G, H等也可被視為受控電阻或電感來依樣填值。較複雜的元件如之前提及的場效體、傳輸線或S-參數等當然就要事先導出數學式來表示其物理意義。專piecewise-linear電路或元件而應用的Katzenelson algorithm或可在此派上用場,即便是諸如電容或電感等的元件也得規畫一番才能填值;這兩者一般是用數值積分/微分器及Predictor來達成此一目的的:

從上述式裡可見:電容及電感沒有直接的電應或電感值可用, 而是得利用如數值微分的方式來進行;比如說簡單的Backward Eular dV/dt = (V0-V1)/(t0-t1)就可使電容C的電流變成有諾頓電路般I=Y*V+J的形式,而這J的部份則是由此電容過去的歷史值演算來而來。在固定時步的仿真器裡,這種簿計(book keeping)尚稱容易,但對非固定時步的仿真器而言dt的取捨則影響了仿真的精確度。而某些元件如傳輸線等,其線長也決定了信號傳輸的遲延故而也就限制了dt的值,否則若時步差過大,則由另一端入射或反射而傳來的信號變會被跳過了。綜上所述,可見一仿真器的研發真的必需由許多面向來考慮。

下面所示的截圖即為仿真器裡電容元件在熱迴圈裡的函式,讀者可由黃色文字的加註看到前述不同的處理:

仿真器設計裡第二層的界面設計是有關於延伸性的考量。在前則貼文裡可見:以英文字首為始的二十六個元件大多已被使用,比如說R,L,C,I,G,E,F,G,H等字首都已約定俗成地表示電阻乃至於各類的受控元件;但除此之外若吾人要為特殊元件如天線、濾波器、特殊集成電路或甚至是將來尚未開發的元件來建模呢?一般而言仿真器都會有外掛的架構並以動態函式庫(dynamic link library .dll or shared object .so)用預定界面API的方式來達成此目的。拿Berkeley spice的仿真器來看,其定義的API如下:

可以看到能使用的類別較本文之初的表列更少了,更有甚者,藉由定義這些埠(port)及取用函式,仿真器可進一步限制了延伸元件對系統矩陣的存取而維護其穩定性。於是,設計元件以便能外掛於現有仿真器的工程師就得更進一步地把原有不論複雜與否的元件物理簡化成上述簡單API形式的工作了。

當這些簡化物理模型的方式導出之後,剩下的就仿真器研發部份便是逐一地把各個元件的模型利用數值及程設技巧先在DC或TR開始之初加以建模,而後在每一時步的每一牛頓迴圈裡依端點值計算更新模形參數而(透過API)提供給系統,再在每時步末為下一時步的所能取的dt加以設限且更新歷史記綠等等。

在我們SPISim使必信的SSolver仿真器裡,我們所參考的正是Berkeley Spice的架構且深為其設計理念及樣式所影響;在其原始版本及許多演化至今的其它開源版本裡,都沒有系統整合性仿真所必需支援的元件如: IBIS, 有損藕合傳輸線, S-參數及可定義如PRBS等的有源電壓等等;即便是S-參數的轉出,其它版本多也只支援雙埠電路(two port network)。由於過去的業界相關經驗,我們能夠相對輕易地了解其原本架構、流程而在較短的時間內加上這些元件的支持而達到應用的目的,但在閱讀相關文件及研發過程中,對這款在數十年前便已開發完成的仿真器,我們仍不禁且不時地為其設計之週到及流程之順感到敬佩,也建議有興趣的讀者能以其為本來深入地研究。

 

仿真器之研發:架構

在系統電氣性分析上,有效的方法及流程都必需建構在一定堅實的基礎之上,這“基礎科技”大致上包括了二維或三維場解器、仿真器及能依統計方法來演算出眼圖或BER的模組。針對仿真器而言,新思科技的HSpice可說是業界公認的標準,它功能強大又涵蓋了系統完整性分析上的各個面向;在北美及世界上的有些地區,我們可假設每個工程師都有HSpice可使用;但在許多其它地區。。比如說亞洲、或是當部門預算受限的情況之下,這假設就不成立了。為了能使我們使必信客戶在這種情形下也能享用我們所建構的分析流程,自去年下半年始我們開始了仿真器SSolver的研發。其初版本剛於日前釋出;為了分享一些背後的研發構想及基本仿真概念,我們將以以此篇為首的幾篇貼文饗有興趣的讀者。要說明的是我們的前提是以電氣信號為主之MNA仿真器,故不包含其它有關機械或熱能等的部份。

電路仿真器可說是一門電腦科學、數學及物理等知識相結合的一門術!

每個大二電機系學生都學過:兩個電路分析的基本形式是節點電流網目電壓、分別以科希賀夫電流及電壓定律表之;而由這兩種形式都列出的方程式可以用矩陣的方式來表示。

 

 

 

 

 

當然,並非所有的電路元件均可以電壓或電流的形式表之, 比如說電流源的電壓準位即沒有定值。為了能將對每個節點電壓或分枝電流都能求解,將KCL/KVL合寫的MNA (Modified Nodal Analysis)便有其必要,其是以節點電壓法為主是因為就一電路而言,其節點電壓數目較網路來得少,故當以矩陣式來求解時,矩陣大小就小得多而能更快地求解。而暨然談到矩陣,則許多有關線性代數的技巧、諸如稀疏矩陣、conditioning、pivoting等等也都會被使用,而這也就是數學在仿真過程中所扮演不可或缺的角色;否則一旦矩陣循迴幾次求解不成,仿真便不能收歛了。對仿真器研發而言,常也是在這時候必需思考到若有矩陣元素造成不收歛,將如何連結至原始元件或是提供相對應的資訊給用戶以便能對網表(NetList)進行除錯。

實務上,要解一個矩陣一次很簡單。。幾行Matlab碼就可以了,但若要能以最有效率的方式在仿真電路過程中解幾千幾萬次,則又得多費思量了。所以即使是尚未談到元件物理特性的此時,沒有資訊科學上的考量也是行不通的。

電路分析有很多種形式:時域瞬態(TR)、時域靜態(DC)、頻域小信號(AC)、極零(Pole-Zero)等等。系統分析上,最常用的是時域瞬態分析,而其最基本的分析步驟是牛頓法求解,也就是利用矩陣在某個點的一階導數來對下一迴圈可能值來進行預測及再求解,直至矩陣的值解出為止。這個過程又分做兩個步驟:靜態解(DC)及之後每個時間點的瞬間解(t > 0);在解靜態值時,所有的元件已達靜態值:故電容器是開路而電感是閉路,且也沒有任何時變信號。而在瞬態求解的每一個牛頓迴圈裡,時間點是固定的而且端點電壓、支路電流也是固定的。。就好像解靜態值一樣,若求解不成功,則仿真器就在同一時間點內,依矩陣的一階導數來調整端點電壓值等以在下一個牛頓迴圈裡再進行求解。如此一時步一時步地完成時域仿真。在某些情況下DC求解不成功,則仿真器可更進一步地利用Ramp或Charge-up的流程,先假設所有的電壓電流源都是0且元件無初值(則每點電壓就當然也是0),而後漸漸地將有源元件”Ramp”至應有的最終值,通常經此一步驟,DC求解多能成功。

上面的圖是Berkeley Spice以元件字首的表列;之前談到仿真器難的地方在於要以最快的速度求解,則我們就不能不對所要支援的元件進行更進一步的分類,以便在仿真過程中減少函式呼叫(function call)的次數。比如說,我們可將上面所列的元件分為下面幾類:

  • 不具時變性:如dc電壓或電流源,電阻等等,它們的值在仿真一開始之前就決定了而不會再有變化。
  • 具時變性:
    • 線性: 比如說PWL源,其值雖時變,但在同一時步的每個牛頓迴圈裡並不會再改變,所以同一時步只要求解一次即可;
    • 非線性:如場效體或傳輸線等等,他們的值必需在每個時步的每個牛頓迴圈裡更新才能求得正解。
  • 頻變或非頻變:

一旦分類完成,我們便可再進一步定出仿真器需支援的元件界面,以便能以最有效率的方式在每個牛頓迴圈裡由各個元件將先求元件內的解(Solve)再將那一瞬間的元件值填(Stamp,如蓋印章)到矩陣內以求解;這兩步驟(Solve & Stamp)可說是仿真過程裡被呼叫朂多次的程序(hot loop);一般來說,我們可為元件定出下面的界面:

  • 讀網表資料:仿真之初,將網表資料讀入且做語法偵錯;
  • 元件初始化:DC開始前將讀入的資料轉成仿真時會用的資料;
  • 建物理模型:DC開始前(或也含TR開始前)初始化物理模型;
  • 填入矩陣值:依每個牛頓迴圈內的解將元件資料填入矩陣裡;
  • 解元件瞬值:在每個牛頓迴圈內依端點值求元件瞬間解;
  • 輸出測量值:每個時步完成後輸出所量的元件值;
  • 清內部資料:仿真完成後清除資料。

若是以物件導向性語言如C++等來設計,則上述的界面程序應是以虛擬函式來實作,若是以程序語言如C,則大概是以struct 的形式定出functional pointer而由實作的元件依在struct裡出現的順序來覆寫;在仿真器的上層,也應有一些串列來將網表內的所有元件來串連起來;故在仿真過程中,所有的電容器等都位在同一串列中而由仿真器引擎依序呼叫;如此一來,若是遇到非時變性元件的元件串列,則在那時步之初便可直接跳過;而時變性線性元件也只要在同一時步的第一個牛頓迴圈裡呼叫一次即可。

另外也要考慮到的是物理模型的儲存。舉例來說:一個晶片可能有數以千萬計的場效體,但之間有不同元件尺寸的可能不會太多,所以可以以數個不同物理模型供這些場效體來使用而不用每個元件有一個local copy;而每個元件對不同模型的取用也可能得用雜湊函數(hash map)來進行而非連結串列(linked-list), 以避免N^2迴圈情況的發生。

其它的考量至少也包括了時步進行的程序及再初始化:就前者而言,現今的仿真器很少是固定時步的,通常仿真器內會有Predictor來預測下一時步可以跳多遠解值也不會差太多,但一旦“跳太遠”時便必需倒車以較小時步來進行;所以在系統矩陣上簿計的程序也要具備才不會重覆求解;對再初始化而言,仿真器多有”.alter”類的語法以便只要稍改部份元件值便能再進行仿真;故在元件內部的設計上,不僅不需要的程序不用每次仿真(.alter)前都重做,就連算過的解也要能清楚乾淨而不要“污染”到下一次仿真的進行。

諸如以上種種,不難想見設計一仿真器所得先有的設計及想法,否則設計出來的軟體不是臭蟲多、不易除錯或維護、就是延伸性不強而不能輕易地加入新的元件。在另一方面,也正是因為這些必需要有的深刻思考而能讓工程師如我者能欣賞領略各個領域知識相互契合運作無誤而能有助我解決工程設計難題之美。

網上已有許多開源仿真器可供讀者參考,它們多是衍伸自Berkeley Spice而來,Berkeley Spice在我看來是個很完整、至少頗具教育性的仿真器架構。教科書方面我則推薦以下兩本經典供參考:

在開源Spice仿真器上使用IBIS模型資料 「問答」

上週在IBIS summit of 2016 DesignCon會中,我們宣讀並分享了最近開發”Ibis to Spice”流程的經驗,反應相當熱烈;在這篇貼文裡,我們集錄在宣讀末之問答階段所提的問題及討論,以供未能有機會親身參與讀者之參考。

  • 問:免費版仿真器裡有IBIS parser嗎?
    • 答: 沒有。據我所知的免費仿真器裡都沒有IBIS parser, 更有甚者,它們在寫此貼文的同時跟本就不支援IBIS元件。話雖如此, 有興趣的讀者不妨參考也是開源的pyIbis看有否可利用之處;再者,跟據IBIS官網,只要花約美金兩千五就可拿到公版Ibis Parser的源碼來做商品化的使用。我們(使必信科技)本身是有跨平台的IBIS Parser以在程式及此流程裡直接使用。
  • 問:我在Berkeley Spice3f5的手冊裡沒有看到有ASRC元件?
    • 答: 請參考NgSpice; 免費仿真器、諸如NgSpice, EiSpice, LTSpice及TISpice都是由Berkeley Spice的原碼所加以衍伸改進而成,故雖在文件語法上或有些許不同,但我們所舉出的理論應都只要做微幅的語法改變就可在這些仿真器上運作。
  • 問:所提供的範例是否只適用於上升及下降波形為對稱的情形?
    • 答:並不是這樣的。我們所提供的範例之初便有一段是將輸入的類比波形轉換成數位信號的設定。這轉換是透過偵測穿越某一臨界電壓值而達成的;一旦轉成數位信號, 其上升及下降沿的維時便很短, 故與波型是否對稱、或 Duty Cycle是否是50%無關。
  • 問:所提供的範例是否適用於超頻的情況?
    • 答:在IBIS的官方規格文件裡,並未對在超頻情況下仿真器該如何運作來做規範;故在超頻的情況,不同的仿真器就很有可能會有不同的輸出結果。理想上,吾人應設計模型運作使其在超頻的情況下輸入、輸出電流都能保持連續性;也就是造成的節點電壓也會連續而不會有突波的情況發生。我相信這種機制是有可能外加於現有的範例而達到的。。。比如說利用電容來和緩波形等等;在所提供的範例裡,目前並沒有這種機制來支援超頻的情形。
  • 問:如果我對轉出的模型仿真相當長的時間、比如說一微秒,會有問題嗎?
    • 答:在實作做程中,我們發現如果ASRC的變數值很小。。。比如說像我們仿真時時步的ps(1E-12)的程度,則仿真器會將其捨去而造成結果的不正確。這也就是為什麼我們需事先將此值及相對應的切換參數Ku/Kd都予以放大的原因。若以一奈秒1ns為基準,則1ps及1us相對應的值是1E-3及1E3倍。。。都不是太大或太小,仿真器也應就不會將其捨去。所以我想這種情況下、即使進行一微秒的仿真,也應該不會有任何問題。
  • 問:為什麼會需要用到傳輸線? 仿真器裡不是都有各節點的記錄嗎?
    • 答:的確一般在仿真器的內部,都會有一個陣列來儲存各節點過去幾時步的電壓資料;所以比如說如說編程者決定用Trapezoidal rule來算一階導數的話,也都能在那裡找到前兩時步的資料。但我們這裡的建模完全是使用現有Spice的語法及元件來完成,也就是說,我們無法透過C/C++等來存取仿真器內部的陣列資料。如果有需要前數點的資料的話,料想的做法是用數段無損T-Element 元件串列起來,則在每兩段線中間連接的節點,都可取到幾個時步前的電壓值。就是說:藉由串連兩段傳輸線,吾人應就可找到前一及前二時步的值而加以運用。
  • 問:為什麼會需要微調來避免突波?轉換係數不是應都已達到穩態了嗎?
    • 答:理論上的確是如此。在未超頻的情況下,一般在做另一向的波形變換之前(比如說開始上升或下降),Buffer應都已達到穩態值。也就是說,KU應是達到1.0值而使pull-up branch能全力供應電流而KD於此同時是0.0使得下拉的pull-down是呈開路的情況。我們之所以需有微調的部份完全是因為在此我們是利用Spice現有的元件來組成這模型的,而非是理論上的需要。有興趣的讀者不妨可Comment掉所提供範例裡微調的部份便可發現突波的出現。若有其它更好可濾此突波的方法,也煩請留言告知或分享。
  • 問:您下一步打算做些什麼改進?
    • 答:我們打算繼續向在以免費仿真器上提供系統分析能力的目標前進。以NgSpice為例, 若要在其它加入如IBIS等新元件的支援,一般有三種途徑:
      1. 直接加入仿真器內部做成如R/L/C般之原生元件:這個方法開發者需對仿真器內部的資料結構、運作流程甚至是仿真的原理都有相當的知識;如果成功的話仿真速度將會最快,但也會需要較久的時間來開發。一般是得用C/C++語言來進行編程。
      2. 透過Code-Model的延伸方法來加入:同樣得用C/C++來編程,但因為透過的是XSpice的延伸方式,並不需要去動到基本的仿真器架構及源碼;所開發出來的Code-Model是動態函式庫的模式,故可直接被現有的公版仿真器所使用;唯在開發及偵錯的過程可能較為麻煩。。因得先attach到在進行中的執行緒。不過這是開發者需要傷神。。。使用者則不用去碰到處理這種問題。
      3. 用ASRC元件在仿真器外建模:這就是我們這幾篇貼文所提到的理論及方法;雖是可行,但只能做驗證用,因為仿真起來速度有其限制。

現在公版的NgSpice裡,尚付之闕如的是:IBIS, W-element及S-參數的元件,有了這些元件的支援,吾人便可用其做很多系統上的仿真及分析。我們打算在接下來的時間以上述途徑“2”(Code-Model)的方式來加入對這些元件的原生支援。

在開源Spice仿真器上使用IBIS模型資料 「之二」

備註:

對此貼文有興趣的讀者或可繼續在 [Part 1] 得到更多相關資訊,並至 [Free Web App] 使用此一模型轉換流程的免費工具。

這篇貼文將探討如何把IBIS資料裡的瞬態資料Waveform轉出以便在免費Spice裡仿真;「前一篇貼文」討論的是我們開發此流程的動機及如何轉出以IBIS裡Ramp資料為主的Spice模型。

由IBIS裡的Waveform資訊做IBIS to Spice的模型轉出:

在使用IBIS模型時,一般我們都會利用其Waveform資料;故若欲由IBIS原始資料產出一相容於免費Spice的模型且得到與一般使用上近似的結果,則此Spice模型也必需能利用到瞬態Waveform的資料。

在IBIS模型裡,不論是輸出點的電壓或電流,在瞬態都是點對點相對應且和時間有關的。比如說在IBIS V3.2或更新的模型裡,一般都會含有兩個或更多個在不同負載情況下所得的Waveform表格;即便是只有一個表格,一般在仿真器內部也可透過Ramp資料來產生另一組時序的資料。而在IBIS V5.1或更新的模型裡,也含有如[ISSO] 及[Composite Current]等的電流表格。後者的電流資料和前述的電壓表格雖在模型裡放在不同的地方,但在時序上是每點都相對應的。在此所說的“時序”並不是指仿真過程中每一點的絕對時間,而是指在輸入切換信後延續至今的相對應時間(Elapsed time)。在原理上,一般會產生兩組切換係數Ku(t)與Kd(t);分別對應於PU及PD電流分支。其作用在於產生一漸漸“開”或“關”的機制而使信號漸達穩態。這兩組係是是由兩組Waveform資料在不同時間點所算出。當模型接上相同負載時,它應會產生如Waveform 及Composite Current表單裡所列出完全一樣的電壓及電流響應。而當負載不同時,它們也會相對應地縮放輸出的強度。關於這些運作細節,請見我們之前的貼文

一旦我們能算出這輸入後才開始的相對時間值(Elapsed time),我們就可透過許多有關論文及規格所示地IBIS結構透過ASRC元件以Spice格式組出來。也就是說,當我們完成欲將IBIS裡Waveform資料轉出Spice模型後,在原理圖及表單上所顯現的便是如下所示的原始IBIS建構區塊組合:

要達到這個目標,也就是說要組出如原始IBIS區塊一樣的Spice模型,有下列問題先需被克服:

  • 在仿真過程中算出信號切換後已延續至今的時間;
  • 由兩組Waveform算出Ku及Kd的切換係數;
  • 將所有區塊組合起來且如IBIS原始構造般為仿真器所使用。

以下我們就將對這些問題提供解決的方案。

在仿真過程中算出信號切換後已延續至今的時間:

以NgSpice為例,我們可在免費Spice裡的ASRC (Arbitrary SouRCe,即任意源元件)使用函式;而函式的係數之一可以是已開始仿真後至今的絕對時間”time”:

藉由這個時間變數及一些附加元件,我們可以下列步驟算出信號切換後的相對時間:

  1. 首先,我們要能分別出信號的上升(0->1)及下降(1->0)緣,這是因為Ku及Kd在在高態及低態中是不同的。在將緩沖器輸入端的類比信號轉成極短上升/下降時間的數位信號後,我們可用一階微分dv/dt來分出上升下降緣。在此,我們利用一傳輸線來達成微分的目的。其它的選擇包括用Laplace函式在控制源中達成相似的延遲效應。傳輸線的長度是仿真的一個TimeStep且在遠端連有和線相同之特性阻抗以免造成反射。在每一瞬態仿真的TimeStep中,我們可算出傳輸線遠近兩端、在不同時步所造成的電壓差,這便是一階微分。由下圖可見,不同的上升下降緣的信號已可透過此方法加以分別。
  2. 其次,我們在這一階微分後的短暫脈衝乘上ASRC所支援的時間參數,其結果是漸次上升的脈衝。再利用另一傳輸線做為信號閂,我們可做出如“取樣與保持”的效果。做法是在傳輸線的近端輸入遠端當時的信號,因為現在輸入的近端信號在一時步之後(Time Step)也將再度達到遠端,故在循環不息下此一電壓可被保持。當然傳輸線的長度需與仿真中所用的一時步相同且在遠端需連有和線特性阻抗相同的負載以免信號反射。在下圖的上半部中,紅色信號是“取樣與保持”後的結果,當我們以另一時間參數(黃色信號)與紅色信號相減,其結果便是如下半部的信號。。。也就是我們想要得到的結果。這組最終信號在每次輸入信號切換時就會歸零重新計算,而其斜率是一(為橫縱軸都是時間)。要再說明的是因為免費Spice會捨去極小的值,而我們在仿真時的時步大多是1ps即1E-12左右的大小,故欲免其被仿真器所捨去,我們需將其乘上一放大值。此一放大值在下面計算Ku及Kd時需一併列入考慮。

由兩組Waveform算出Ku及Kd的切換係數:

解決算出信號切換後的延續時間之後,我們便可接著算出Ku及Kd以便運用此時間值。這部分的資料已非常多,於下簡列兩則供參考。不論是透過原始IBIS裡的Waveform資料做計算來導出此二切換參數(參考一)抑或是透過其它仿真器來量測此參數(參考二)都可得出結果:

  1. Extraction of Transient Behavioral Model of Digital I/O Buffers from IBIS, Peivand Tehrani et. al, 1996 Electronic Components and Technology Conference.
  2. General K-table Extraction w/ Spice, Bob Ross, IBIS Summit, DesignCon 2015

一般而言,Ku及Kd是兩個未知數,故我們需要有兩組Waveform資料才能在每時間點對其估值。這部分的計算是在離線情況下事先算好的,然後再將結果放在轉出的Spice模型裡。實做的部份四組IV表格參數,即PU/PD/PC/GC均以ASRC透過每兩點間算出的PWL線性直線來做電流輸出;唯因PU/PD有切換系數的關係,它們有較PC/GC更多一點的輸入,即下面的NKUX/NKDX:

NKUX/NKDX的值即是事先算好的KU/KD值,端點1及2即是在第一步驟裡算出的信號切換後的延續時間:

也就是說,我們用這延續時間t來算出相對應的切換系數,而後再乘以原始的PU/PD分支電流。下面的端點5即含有切換係數值:

將所有區塊組合起來且如IBIS原始構造般為仿真器所使用:

有了這些區塊之後,雖然要透過Spice格式將其連起來形成表單是一簡單的工作,但實際操作之後,我們卻發現以此模型仿真的結果在輸入信號切換始末的時間點在輸出端都有很大的雜訊而使得模型無法使用。

細究之下,發現魔鬼藏在細節裡。。。一如我們之前貼文所述,在信號切換的過程中Ku/Kd切換係數也有一“交接”的動作:

也就是說,在低入高態的過程中,PU/PD使用的是上升緣的切換係數,而一旦信號由高轉入低態,它們則改用下降緣的切換係數;這之間一點點的時間誤差,即應當開始使用新係數第一時間點的數值時,若仍在使用上一係數的最後時間點,則雜訊便會產生而使得產出之模型無法使用。在詳細觀察每一信號間的切換順序之後,我們最終能做出一過濾的語法、運用在相同的ASRC裡而得到理想的效果。與商用仿真器對相同IBIS及負載的結果相較之下如下所示:

由圖可見:不論是在輸出端點的電壓、抑或是供電源電流的使用,兩者均極為近似。也就是說,以我們流程所轉出的Spice模型也可供做SSN雜訊分析。兩者信號間些許的遲延並不影響相較的結果,因為此一遲延是一常數且對所有Cycle均相同,故在信號量測或最終眼圖上並不會有任何影響。

在仿真速度上,因為我們加入了兩個長度僅為一時步的傳輸線來做一階微分及取樣保持電路,其亦限制了在實際仿真時的速度,故相較於能直接使用原始IBIS的商用仿真器之下,速度慢得多。當用在佈線後網表的仿真上,變慢的程度則不顯得那麼嚴重。這是因為在佈線後的網表中, 也含有許多傳輸線元件,其中延遲最短者亦一視同仁地對所有仿真器造成時步取用上的限制,當這限制不比一時步長許多時,則由轉出Spice模型所形成的時步限制則顯得更能被接受。

另外一點值得一提的是:以上所示雖只談到電壓Waveform波形的運用,對以IBIS V5.1以上、含Composite Current電源資料的部份其運作情形也是相同的:另一組縮放係數需由ISSO  PU/PD資料事先被計算,而後乘上原始的Composite Current電流再以ASRC的元件以相同的Elapsed Time參數自供電端拉出額外的電流;相同的Elapse Time 分在電壓及電源ASRC中被使用以便達成點對點之間相同的對應關係。

藉由此開發完成的Ibis to Spice轉換流程, 我們可依實際運用需要而將原IBIS模型裡的Ramp或Waveform資料轉出與免費Spice仿真器相容的格式而做分析之用;這個流程已如下所示地內建於我們的SPIBPro模組之中:

 

這篇貼文係為於DesignCon 2016同時舉行之Ibis Summit所準備;我們在這會中宣讀並展示此研究結果。讀者可於下參閱下載相關簡報範例,或至IBIS官網直接下載。

會中所宣讀簡報: [按此] 於外部開啟

相關範例: [請按此下載]

在開源Spice仿真器上使用IBIS模型資料 「之一」

備註:

對此貼文有興趣的讀者或可繼續在 [Part 2] 得到更多相關資訊,並至 [Free Web App] 使用此一模型轉換流程的免費工具。

IBIS to Spice:

系統完整性分析中,大部份的建模流程都專注於由原始設計(Transistor)透過Spice網表格式轉成為IBIS模型。但基於以下數點的考量,我們也常發現相反的建模流程、即從IBIS轉成相對應Spice的函式庫格式 (Subckt library)亦有其存在的價值:

  • 支援開源或免費的仿真器: 網上有數款開源或免費的Spice仿真器, 如 Berkeley 3f5, eispice, ngspice, LTspice 等等。這些仿真器多將重點放在晶片上的BSIM模型或廠家所出產的元件, 如LTSpice的穩壓器(Voltage Regulator)等等;當用在系統分析上時,雖然它們對傳輸線大多也都有相當程度的支援,但對於輸出入用的緩沖器(常以IBIS模型資料形式出線)的支援則是付之闕如。在沒有原始設計的Transistor網表、又不能使用相對應的IBIS模型情況下,這些免費的仿真器就只能束之高閣了。當然若有足夠的經驗及能力,吾人也可編程而直接在這些開源軟體裡加入對IBIS等的直接支援, 但這過程是需要相當時日才能完成的。比起若能直接透過某種流程而能將現有IBIS資料轉成這些Spice也能直接使用的模型而言,後者的所需的工程便小得多。而且若這流程是建於Spice之外,則當工程師有需要快速地做些完整性仿真時,便可運用手上任何一款的相容仿真器而不用另外使用特別編譯的軟體。
  • 讓模型供應商能提供公用的參考資料:IBIS本身雖是業界公用的格式,但其在仿真器內的實際體現則依不同廠家而有不同。在理想情況下,不同的仿真器對同一IBIS模型的運作應會生成近似的結果。為了達成這個目標,IBIS制定委員會也定出了”Golden Waveform”的資料格式以便模型使用者能對所用的仿真器的精確性能有所初步的檢定。實際上,這個”Golden Waveform”並非強制性地需在IBIS模型內提供而許多模型也都對此付之闕如;故而有些模型供應商 、如美光半導體,便轉而提供編碼過的Hspice原始設計網表以做為仿真的參考。如此一來,它的模型使用者便必需要有Hspice才能仿真編碼過的設計。我們認為若能在現有IBIS模型之外,更提供一未編碼Spice網表而且它可透過人人可免費得到的開源Spice來仿真進而得到與IBIS極近似的結果,反而更能體現IBIS在業界是公用格式的精神。
  • 外顯地實現IBIS的運作原理及流程更具教育性及參考價值:網上隨便一找都可以發現很多談到IBIS內部運作原體的論文及簡報。這些內容或可以供大致了解模型運作的過程所需,但魔鬼多藏在細節理,模型實際上多以C/C++編程、實現且運作於仿真器內而非外人所知;我們認為, 若能將這些原理以外顯的方式實際以Spice的格式呈現出來,進而能透過仿真而產出和其它商用軟體極近似的結果,則更富教育意義且具參考價值。
  • 開發流程的考量:仿真器是系統整合分析流程裡重要而不可或缺的一環 (場解器亦如是);做為一分析工具供應商,我們有以下數種選擇以便能在開發的流程裡有仿真器可做運用:1.與市面上已具規模的仿真器供應商合作而要求我們的客戶都必需要有一分License; 2.內部從無到有自行研發; 3.使用現有的開源且有聲望的仿真器。上述選項各有其優缺點且不互斥。對於一新創公司如我們而言,需要在有限的時間及資源內為客戶提供最高CP值的工具,則第三個選項、即使用開源版本並再加以改良、便成為最具吸引力的選擇。

市面上已有數家公司提供Ibis2Spice的流程。它們之中免費的版本多提供到IBIS Ver 2.1的轉換支援。即便是付費的版本也只支援到Ver 3.2。再者,它們所轉出的Spice模型多不能直接在開源Spice上所使用。我們開發的目標是要能支援到Ver 5.1的電流資訊、亦即[ISSO] 及 [Composite Current]等資料的運用以能做SSN的雜訊分析。在含此文第二部分的這兩篇貼文裡,我們將對本公司所開發的Ibis to Spice流程做一簡介。首先會談及的是如何運用IBIS裡的Ramp Rate來轉換出相對應的Spice模型,而後要談及的是更精確的、即運用Waveform data來建立模型。兩者我們都會佐以和其它商用仿真器對同一IBIS模型仿真的結果來證明此流程的可行及結果的精確性。

流程開發的目標:

  • 轉出的模型能直接在開源仿真器、 如Spice3f5 及NgSpice上運作
  • 支援電壓部份的Waveform data (Ver 3.2 andup)及電流部份的Composite current (Ver 5.1  and up)
  • 能與其它的業界所常用仿真器產生極近似的結果。

由IBIS裡的RAMP資訊做IBIS to Spice的模型轉出:

首先我們來看一下現有以RAMP為主的Spice模型轉換,因市面上其它工具所轉出的模型不能在免費Spice上直接使用,在我們的免費工具SPILite裡,我們也已加入類似的功能以便能直接使用NgSpice。這部份的流程主要是將原IBIS模型裡的RAMP資料取出並用於瞬態仿真時。靜態電流部份、即PowerClamp, GroundClamp, PullUp及PullDown的資料則是用免費Spice裡支援的ASRC有源元件來實現。這部份在下一貼裡所將提及的:用IBIS裡的Waveform來轉出Spice模型裡,將做更多的應用。

在網上搜尋Ibis to spice則會找出一篇貼文:IBIS to Spice Translation (part 1), 在此文中,原作者討論了市面上其它工具做Spice模型轉出的工作原理、及他所試圖改進的設計及結果。他也提供了一Awk程序以便能將原始Spice模型在當時的免費Spice裡使用。由於這篇貼文是十多年前所寫,當時很多的觀察在今日均已不再適用。比如說:現今公版的NgSpice已可直接讀入如X+-3.2的語法而毋需再將其轉成X-3.2, 故其Awk程序似已無用武之地。無疑的,由於文中所提之商用工具最後更新似是在1998年,原理圖至今仍未做更動,故就研究其運作原理而言,原貼文還是有其參考價值。

上述貼文的第二部份是如何將利用Ramp資料來運作的原理圖。在網上要找到原文恐怕比第一部份難得多,我便將其重貼於下以省讀者的時間:

原理圖中的主要原件是四個靜態電流元件,即XPWRCLAMP, XGNDCLAMP, XPULLUP 與 XPULLDOWN, 它們是利用Spice裡的ASRC(Arbitrary SouRCe, 即任意源元件)來實現。在Spice的使用手冊裡,我們可看到其語法及功能:

由於Power Clamp(PC)及Ground Clamp(GC)是屬於ESD電路的一部份而始終是有在作用的,故其資料可直接被使用。在實作上是將IBIS裡的IV對應表先轉成每兩點間的線性直線(Piecewise Linear)方程而後輸出電流。以PC為例, 由下圖中可看出端點1,2間的電壓被拿來做查表內插而將算出的電流由端點3,4間來供應。

對於Pull up (PU)及Pull down (PD)分支而言,由於它們是在輸入信號切切換後才漸漸開或關的,故在以原理圖中是以在左上部份的C1及RB3所供應的RC充放電常數來完成此開或關的目的。在瞬態仿真中,此RC參數先被RAMP的值設定於分母的部份, 而後將乘上由PU等所提供的原始值,最後再以G控制源元件(VCCS,電壓控制電流源)來將電流輸出。

在原貼文裡,原作者也提及他曾試著直接以其它方式來取代以此RC來做PU/PD電流切換的方式但效果不彰。我們認為其中可能的原因是因為PU/PD供應電流值是有瞬態時間因素的,即它們不是馬上就如PC或GC般全開或全關的,故若少了這“漸漸打開/關閉”的運作,則輸出電壓會很不平滑而可能造成仿真不收歛。而且就算收歛,結果也不會準確。也就是說,一般輸出緩沖器裡場效體(MOSFET)通道裡的載子有其一定的速度,故其開或關的時序不會在瞬間完成。

透過這種由RC方式的開關模擬,來仿真由IBIS轉出的Spice模型,再與其它商用仿真器對同一IBIS模型在相同負載情況下仿真結果相比較,我們可看出其結果算是相當接近的。但這相近僅止於PAD或PIN點的電壓部份。當測量其對供應電壓源所使用的電流,則可發現兩者相去甚遠。也就是說:這種Spice模型只能做理想供壓情況下的信號完整性分析而不能拿來將SSN列入考量。其次,上升/下降的曲線會呈現出如RC充放電般的曲線而非直線性。對於仿真速度而言,因為這種實作的設計相對簡單,故可很快地完成仿真。。與直接使用IBIS的商用仿真器相較之下並不會慢太多。最後要再說明的是:不像IBIS模型裡各種Typ/Min/Max的資料都在同一表格內;當要將某一IBIS裡的模型轉出做Spice仿真時,欲使用之不同的Typ/Min/Max Corner均需分別地各自先被做轉換。

這篇貼文係為於DesignCon 2016同時舉行之Ibis Summit所準備;我們在這會中宣讀並展示此研究結果。讀者請繼續參閱「之二」之貼文並可在那下載相關文檔及範例。

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模型中,假設它們都通過了Golden Parser的驗證而且運作速度也合乎需求,則吾人要如何才能判斷其中何者較其它更適合我們高速設計上的需求呢?在這篇文章中,我們將試圖定義出一些IBIS模型的效能參數以供參考選擇之用。
IbisRttROn

 

之前的文章已數度談及IBIS模型的基本架構。。。再示於上圖;基本上是由上拉(PU)、下拉(PD)電路決定其穩態電壓及輸出阻抗。而靜電保護電路ESD則由一般在反向偏壓的箝位電路(PC), (GC)所組成。上拉電路能多快地由斷路轉成通路、同時下拉電路由通路變成斷路,則決定了此緩沖器上升時的瞬態表現。下降波形的形成也是同樣一的道理、只是開關的極性方向相反。由於PC, GC電路操作在反向偏壓區間,其漏電電流一般很小。

 

RttTerm

 

另一種常見的狀況則如上圖所示。。。一般是用在動態記憶體裡。這裡因為有晶片上的阻斷電路(On die termination)…由兩個電阻組成一分壓器(voltage divider), 所以即便是緩沖器是在高阻抗無輸出的狀態之下,由分壓器所導致的輸入電流也遠比之前所提的漏電電流來得大而不能加以忽略。

由這兩種常見的操作情況,吾人可合理地將一緩沖器在輸出阻抗及其瞬態反應(以信號斜率及上升、下降需時來表示)的相關參數用做比較用的效能參數。再詳述於下:

IBIS輸出阻抗:

若緩沖器的輸出阻抗和立即接到其輸出端點元件的輸入阻抗不相匹配,則信號在一開始之初就會形成相當的反射而來回振盪;一般而言,緩沖器的輸出即是封裝部份穿過各腳位的拉出傳輸線(特性阻抗一般是50歐姆);而解決這種不能匹配的問題一般則是再加上一個串聯的電阻以便使總阻抗能達到50歐姆左右。下圖為一輸出不匹配而造成巨大振盪的例子:
ZMismatch

 

由於IBIS緩沖器有上拉及下拉的電路, 兩者的輸出阻抗在參考電壓(一般是高位電壓的一半)間的輸出阻抗未必一樣;工程師一般得取這兩者的中間值來做為還要再加上多少串聯電阻的依據。

IBIS的時域參數:

為能有較佳的信號整合性,一般來說我們需要用的緩沖器輸出的信號速度只要夠快就好。。在夠快的條件下愈快其實愈不好。為說明這原因,我們可以常見的對一方波解構的各個諧波為例,如下所示:最上面的是一純Sin的波形、其頻率和方波同(稱基本頻率或基頻);其下則是此Sin及其二倍頻的組合,依此類推;我們可以看到:隨著更高頻Sin Wave的加入,所組合出來的波形就愈來愈像一方波。也就是說:一個信號上升下降速度很快、趨近無窮快、的方波,是由很豐富的頻率信號所組成。
Harmonics

 

又:不同頻率的信號在同一介質中的傳播速度並不相同,故會造成信號的失真。這種傳輸速度隨頻率而異的現象一般稱作“色散”;若一信號速度慢又和緩(在夠快了的前題下,相較於更像方波的快速上升/下降),則其色散的情況會較輕微而傳送的速度也就較不易為高頻部份所影響而形成信號失真。

效能參數:

綜上所述,吾人可建議並定出下列的效能參數以作為IBIS緩沖器模形間的比較之用:

  • PVT: 也就是快/中/慢,供應電壓及環境溫度等的資料。這些值都已在模型裡清楚定義。使用這模形的工程師必需確保應用範圍在這些值的區間內,則仿真出來的模形效能才具有實際上的意義;
  • C_Comp: 也是已在模形裡定義的,總結連到pad的電容負載;
  • Z_PU: 即上拉電路在參考電壓值時的輸出阻抗;
  • Z_PD: 即下拉電路在參考電壓值時的輸出阻抗;
  • Z_PU_MM in %: 即上拉電路在距參考電壓值之下及之下相同的距離(比如說100mv)時輸出阻抗的變化程度;這可視為阻抗線性變化程度的參考;
  • Z_PD_MM in %: 即下拉電路在距參考電壓值之下及之下相同的距離(比如說100mv)時輸出阻抗的變化程度;這可視為阻抗線性變化程度的參考;
  • Z_RTT: 當有之前所述的晶片上阻斷電路時(ODT, on-die termination),緩沖器的輸出阻抗;
  • RT: 輸出自 20%~80% 的上升振幅所需時間;
  • FT: 輸出自 20%~80% 的下降振幅所需時間;
  • FREQ: 在不被超頻的情況下此緩沖器可運作的最高速率。

除此之外,有些時候傳播遲延, 即數位信號輸入到一緩沖器到其輸出跨過參考電壓所需的時間Tco, 也被拿來做為參考數據之一。我們認為這其實是沒太大意義的。原因在於同之前的文章所述,為保存大部份的瞬態反應又容許模型在高頻下操作,建模工程師或是使用的仿真器就常會把一開始平穩的穩態波形點所刪除,在這種操作之下,所量得的Tco也就不準了。其次,信號整合性工程師常看的眼圖(eye plot)本身即由一連串的時脈波形相疊而成,不論Tco的真實與否,因其整個波形被順勢位移了,故在眼圖裡並不會看到任何影響。也就是說, Tco實際上不會對眼圖有任何的改變。

由以上所建議的數項性能參數,則吾人可利用如我們SPISim BPro模組裡的功能,將一個或多個IBIS模形裡的性能製出一表總結以供參考選擇緩沖器之用,並能因使用適當的模型而提高系統的信號完整性。

參數模形:

利用這些參數,我們也可更進一步地建出一假設的IBIS模形;抑或是對其中的數個參數進行掃描以產生多個可能的模形進行比較分析。當有了以仿真結果做依據的分析後,建模或完整性工程師便可以此建議晶片上緩沖器設計師應設計出的效能。也就是說:完整性工程師可坐在一個主導的地位來導引緩沖器所應被設計出的效能。現時的緩沖器設計一般有數個腳位可供微調速度及輸出強度之用,有了建議的效能值,晶片設計師便可試著不同的腳位開關組合或甚至是改變場效體通道的寬度來滿足所需。

 

SPISim BPro's Spec. model generation

SPISim BPro 的參數建模流程

我們SPISim使必信技的 BPro 便在此考量之下加入了參數模形產生的功能。這是完全不需要做任何的仿真的。用戶只要填入適當的效能參數,含兩組上升、下降波形表在內的IBIS模形就會即刻產生。用戶也可進一步利用如下所示的手動微調功能來為一些點或波形做改變,這些人工產生的(非由仿真結果產生的)IBIS模形在前期分析及甚致是外部模形的釋出上都有其實際上的用處及意義。

BPro generated spec model will have smooth transitions.

BPro 建出的參數模形均有平順的變化曲線

 

IBIS模型: IBIS模型的除錯及效能調校

我們將在此文談到如何對IBIS模型資料進行除錯及超頻調校;如之前文章所述,IBIS建模程序中首先的驗證程序即是以Golden Parser為模型進行檢查,若模型資料有問題,則一般會看到下列的錯誤訊息:

  • DC mismatch: 即VT及IV穩態資料間相衝突;
  • Non-monotonic data points in I/V curve;
  • Extreme currents in IV data。

我們將在以下為這些錯誤訊息詳做解釋。至於效能調校部份,我們將談談IBIS模型的超頻及其可能衍生的精確性顧慮;為確保您產生的模型可在預定的時脈速度下運作,確保其工作頻率的準確性是很重要的課題。最後,我們也將簡單談談我們使必信科技發展出來的工具裡是如何來克服這些技術上的挑戰。

DC mismatch:
IBIS建模程序中最麻煩的莫過於碰到下面的錯誤訊息:
DCMismatchMsg

當發生這種誤差(mismatch)時,建模者所會看到的是在VT的穩態部份電壓和自原緩沖器設計(Transistor)跑出來的結果位準不同。一般的解決方式是回頭去檢查穩態分析部份(IV:PU/PD/PC/GC)設定偏壓是否正確,而後重新仿真、產生模型後再測一次。最後不得已的手段則是手動地去改資料點,以便能減輕這種誤差的程度至可接受的範圍、或是讓其完全消失。不論何種方式,我們都得先對這個誤差的成因做一了解才不會如瞎子摸象不知從何修起。

VT 波型資料的起迄點均為穩態

VT 波型資料的起迄點均為穩態

VT 波型資料的起迄點均被視為已達穩態;也就是說,不論時間點(橫軸)的變化,這兩點的電壓均不再變化。Golden Parser即取這兩點的值來算出由VT所顯現出的負載電流。

DC mismatch 係起因於IV/VT穩態資訊的不相容

DC mismatch 係起因於IV/VT穩態資訊的不相容

上圖中, 我們在左下方簡單表示了緩沖器的負載情形,輸出電流I取決於端點電壓及其輸出的負載,也就是說,當VT達到穩態時,吾人可由模型裡的負載組合來做下列的試算:

  • I_LoadLine = (V_Pad – V_Fixture) / R_Fixture

其中Fixture部份即測試負載、而PAD即緩沖器的輸出端口。從電路來上來看,當緩沖器輸出為高態時,大部份的電流都是由上拉電路PU所貢獻;下拉電路PD此時可看作是完全地斷路而不提供任何電流的。若我們以V_Pad為值,減去Vcc(因為PU的X值是相對應於Vcc的, 即Vcc relative),則可用PU的IV資料表來找出相對應的輸出電流。然後,由於靜電保護電路PC/GC均在反向偏壓的狀態,我們也可用同樣的方式及值(PC也是Vcc relative)來找出相對應的電流。總結而言,由IV資訊所顯示出的應有的電流輸出即是I_Out=I_PU-I_PC-I_GC;所謂的DC Mismatch即表示這由IV所算出的輸出電流I_Out和由VT資料所算出的應有的負載電流I_LoadLine並不相同。

我們剛剛提到的只是輸出高態的部份,輸出為低態的情況也是一樣,只不過在低態時,上拉電路可視為完全斷路。故大部份的電流都是由下拉電路PD所提供。

由於一個IBIS模型裡可以有好幾組VT表,每個表產生時的測試負載均不相同,所以這個DC Mismatch的問題一旦產生,常是每個VT表的兩個靜態值都會有錯誤而顯得錯誤很多。

由上所述:mismatch的成因在於IV及VT所提供的資料對算出來的輸出電流不相符合,則修正之道即在於改變IV或VT以使再算出來的資料能相符。通當建模者需回頭檢視當初在做穩態仿真時偏壓是否正確,或是在“偽穩態分析”時輸入的電壓是否改變過快而使量得的電流並不真是像穩態時的值。一般來說,VT的瞬態仿真一般是較沒問題的。因為若VT有問題的話,在其仿真結果上就可很直接的發現出錯誤。

 

Non-Monotonic Points in I/V data:

這訊息意謂資料表裡的值為非單調性增加或減少;也就是其一階導數有正負性變化的問題。一般而言這類的警示是可被忽略的。唯有在非單調性增加/減少情況較嚴重時,仿真器會在這部份的範圍有不收歛的可能,因其一階導數(找牛頓解用)之不穩定變化之故。

這些資料表裡的問題點常是在緩沖器的非工作區間,故解決之道之一是也可以用人工的方式去消去一些點或增加一些點使得其看起來更平滑些。要注意的是有些緩沖器的設計在先天上就會有這些非單調性存在。故若使用模型的人對這類的緩沖器有所了解,則事後人為的改變資料反而會使的建出來的模型看起來像是假造的而有精確上的顧慮。

Extreme current in IV data:
ExtremeIError

這類的警示或錯誤訊息常發生在代表靜電保護電路(ESD)的PC/GC資料上。另一種情況是上拉下拉電路的穩態仿真結果不對。因為PC/GC的逆向雷流無所不在,故在建模過程中,當將由PC/GC的電流自PU/PD電流做減去的運算是便使得PU/PD也顯示出了如PC/GC般的崩潰區曲線而形成大電流的通過。

PowerGndClamp

如上所示,一般在正常工作區間,PC/GC兩者都是反向偏壓的。。。在很大的範圍內都是平線且值很小(即漏電電流很小);唯有在崩潰區才有如指數般的電流成長。惟由於IBIS規格中,為將遠端之全反射列入考慮而有的-Vcc ~ 2Vcc掃描區間的要求,故ESD電路便可能在這些很少可能才發生的時候顯出高電流。解決之道一般是在開始進入崩潰區的一伏特後對在那之後的電壓做線性外插。如此一來電流在模型裡將不再是指數性、而是變線性的改變。於此同時當ESD發生作用時也會有足夠的崩潰電流在仿真時保護連接到緩沖器輸出端的電路。

 

超頻(Overclocking):

每一組瞬態的上升/下降時態曲線加起來可表示出此一緩沖器模型運作的最小週期T。而這模型可運作的最高頻率即為此週期的倒數FMax = 1 / T; 也就是說:週期愈短,模型在不被仿真器更改資料的前題下可運作的工作頻率也就愈高。

若在真實運作時(如在通信渠道裡全仿真時),若操作頻率超過了如前所述的FMax, 這個模型便是在被超頻。一個被超頻運作的模型將有精確性及效能一致性上的顅慮產生。
Tolerance上圖中,有很長的一段時間緩沖器的輸出都是在穩態的情況下。若建模時能將這些部分、外加上一些容許範圍、地被移走;則最後留下的VT部份將維時甚短, 這表示雖然大部份的上升/下降時的變化情形仍在建出模型中,但這個新模型將可以更快的頻率來運作。

一般而言,業界裡常用的仿真器都可透過參數來進行如此的調校。問題在於在IBIS規格裡並未對一仿真器應如何消去這些穩態資訊來定義。其結果便是兩家仿真器對同一模型在超頻時所產生的結果可能不同。作為一個建模工程師,您不應對將有可能使用您產生模型的用戶為他們做仿真器使用上的限制。所以較理想之道應是您在建模之初便能將這些穩態資料點適做處理,並在模型表頭的部分明列這模形可操作的最高工作頻率。

MIN曲線有很長的時間延遲

MIN曲線有很長的時間延遲

上面的圖表則列出了另一種可能形成超頻的原因。圖中MIN曲線的延遲遠比其它兩者(TYP/MAX)來得多。由於IBIS規格裡要求三者在模型裡均由同一橫行、即時間點、來表示;上面的圖形將可能形成超長的MIN曲線的起始穩態值而很可能地自動變超頻。有些時候甚至還沒法及時將MIN曲線的資料完全含括在欲建的IBIS模型中。

為了解決這些技術上的問題,我們使必信科技BPro模組裡的解決方式是該建模者有更大多的操作選項可以來移除這些穩態資料。移除之後再由我們的工具自動地計算並優化以避免造成之前所述的DC Mismatch的問題。最後,我們也在同一模組中提供了直覺的工具供建模者可以手動地為現在模型資料做調整。

 

Tuning

SPISim BPro 的手動調整工具

 

最後要再加以註解的是:以上所述僅限於電壓部份的資料除錯及調校。對於IBIS 5.0後的模型、因其亦含有輸入電流的資訊、故要考慮的面向也就更多了。舉例而言:這些輸入的電流因也含有前級部份切換電路的部份,故很有可能在緩沖器輸出的電壓還仍在穩態時(還沒開始上升或下降)就有很大的波動性。因為VT和Composite Current 的IT在時間上是連動的,故吾人就不能隨意地將一開始時的穩態資料做移除,因為這麼一來輸入電流部份的時間點就不對了。凡此種種,將再在日後的文章中另作討論。