在開源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官網直接下載。

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

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

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

  1. Pingback: 在開源Spice仿真器上使用IBIS模型資料 「之一」 | SPISim[使必信科技]: 信號完整性、電源完整性暨電路擬真軟體

Leave a Reply

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