線上影音

Home > ANSYS SIwave教學> 模擬不收斂問題

 

本文始於2012年,2015年更新,並於2019年大幅改寫。完整討論引起電路模擬不收斂的原因,並介紹正確的解決方法。當然,業界慣用的不當解法也會示警。

  1. 前言

  2. 電路模擬不收斂的症狀

  3. 電路模擬不收斂的原因

  4. 電路模擬不收斂正確解法

  5. 電路模擬不收斂其他解法 (可能影響準度)

  6. 電路模擬不收斂不當解法

  7. 問題與討論

    7.1 軟體後處理做passivity enforce的三種演算法,有何差別?如何選擇?

    7.2 為何滿足無源性的被動網路,還是有機會看到輸出電壓大於輸入電壓波形? (重要)

    7.3 為何不建議以軟體後處理做enforce passivity/causality?可以有實例更清楚說明嗎? (重要)

  8. 參考

  1. 前言

對電性模擬工程師來說,抽模型(model extraction)與使用模型做模擬,是日常工作的主要兩部分。前者必須有能力確保自己抽出來的模型合理可用(可收斂),後者必須有能力判斷手上案子若模擬不收斂是什麼原因造成的;是自己的軟體操作技能不足,還是根本客戶提供給你的模型本身就有問題?

本文要談的內容其實是一個非常重要而嚴肅的課題。己所不欲勿施於人,我們不希望碰到沒水準的烏龍客戶給你不能收斂的模型搞死你,同樣的,您出給客戶模型前,確保該模型的品質(可收斂性),是基本功,更是職業道德。

  1. 電路模擬不收斂的症狀

電路模擬不收斂的症狀有多種,依嚴重程度來說,分以下三個層次:
-- 模擬過程出現錯誤訊息(ANSYS Designer顯示unable to achieve acceptable error.表示state-space fitting error),無法得到時域波形
-- 模擬過程出現警告訊息,可得到時域波形,但波形或準位明顯不對
-- 模擬過程出現警告訊息,可得到時域波形,但波形一開始是對的,但隨著時間拉長,波形開始震盪發散

  1. 電路模擬不收斂的原因

電路模擬不收斂的原因有以下幾種可能:
-- 模型的port數過多(數百個),就算是SPICE也很難收斂
-- S參數模型的數值有問題,違反無源性(passivity)與因果性(causality)。這是本文要討論的重點
-- 電路本身迴路沒接好,或有被動元件的模型不對 ,S參數低頻沒有定義資料或ESR/ESL或電壓/電流初始值指定不合理。

  1. 電路模擬不收斂正確解法

4.1 避免port數過多(超過上百個,甚至數百個)

因為考慮線與線、線與地之間的交互耦合關係,所以port下的越多,S參數所形成的矩陣運算複雜度也會增加。雖然模擬軟體對S參數的port數目沒有上限,但port數越多,除了模擬時間拉長,想讓模擬值正確收斂的挑戰也越大。依筆者經驗,SIwave(DesignerSI)在模擬速度與收斂性能這幾年有大幅提升,一般50~100 ports求解都沒問題。建議可以從少port數,慢慢增加模型的複雜度,找出問題點。

-- 對於同時抽電源/地與走線的寬頻模型,又同時含有大顆去耦電容,較可能遇到不收斂問題(因為低頻S參數變化劇烈)。建議可以把大顆的VDD-VSS de-cap透過留port,在電路模擬層級外掛模擬

-- 電源/地的埠端參考阻抗設0.1歐姆,訊號線的埠端參考阻抗設50歐姆,輸出S參數時選擇touchstone 2.0。

4.2 如果電路中同時使用SPICE RLC單頻點(窄頻)模型與S參數(寬頻)模型

確認S參數滿足被動性與因果性,且有低頻含DC頻點。如果是使用Murata RLC的S參數,因為其模型最低頻是從100M開始,最好是透過Designer linear analysis來外差重新產生含低頻到DC資訊的S參數。

SIwave export full-wave SPICE與HFSS/Q3D掃頻設定enforce causality,都要求要有DC值

筆者使用經驗發現:對於同時含有SPICE與S參數模型的題目,SIwave(Designer)比起其他模擬方案在模擬速度與收斂能力上較佳,酌供參考。

4.3 檢驗所得到的S參數是否滿足無源性與因果性

目前ANSYS所有EBU高頻旗艦型產品SIwave/Q3D/HFSS都包含[Network Data Explorer, NdE],可以用來檢查S參數無源性與因果性。

即使個別的S參數都滿足無源性與因果性,且單獨模擬都可以收斂,不代表全部合在一起模擬就一定會收斂。換句話說,無源性與因果性的判定,是一個相對標準,而不是絕對標準。

4.4 如果電路模擬不收斂的原因是因為S參數違反無源性與因果性所引起

90%電路模擬不收斂的原因是因為S參數違反無源性與因果性所引起。最好的做法是回頭檢視該模型萃取的設定過程,重新產生一個可以滿足無源性與因果性的S參數。

把S參數直接轉SPICE或使用軟體所提供的enforce都不是最好的方法,雖然這是很多人喜歡的作法,後面我會解釋為何不好。

網格品質、掃頻設定、材料設定是模擬設定中最會影響無源性與因果性的三大因素:
-- 如果模型中有很小的邊或縫隙,mesh品質不佳會導致模擬結果的S參數違反無源性與因果性
-- 寬頻掃頻,不論是SIwave或HFSS,請依以下三段式掃頻設定,並使用[Interpolating sweep] with smaller "error tolerance" 0.1%。(超過10倍的寬頻掃頻,不要使用fast sweep type)

掃頻範圍 : 1G~10GHz 或0.1G~1GHz表示在十倍頻寬範圍內

        掃頻範圍 : 0.1G~10GHz 或0Hz~1GHz表示超出十倍頻寬範圍

使用Interpolating sweep,其error tolerance設定默認是0.5%,當port數多時(數十個port)若遇到解出的S參數有毛刺(不連續)或違反無源性與因果性,把error tolerance調更小到0.1~0.05%,並確保有足夠的掃頻收斂點數(AEDT內默認250,有可能會需要更多),對解決問題很有效。

使用Discrete sweep並非處理此類問題的建議默認選項。

介質材料除了Df(loss tangent)>0 (也就是不能使用lossless material),for HFSS/Q3D還記得必須勾選[Auto. use causal materials]

4.5 HFSS內掃頻設定避免無故使用[Advanced DC Extrapolation]。如果是為了HFSS DC準度,一般不需要使用這設定,其反而無法保證掃頻得到滿足無源性與因果性的結果,所以沒事不要濫用此option。

  1. 電路模擬不收斂其他解法 (可能影響準度)

Designer Nexxim除了默認以"state-space"技術作時域分析,還提供其他三種卷積(Convolution)演算法,可以用來處理當S參數因無源性或因果性違反,而導致模擬無法正常進行的問題。

但這種手法,即使能讓模擬順利完成並產生波形,但並不代表對模擬準度沒有impact。原因是,卷積法並非處理non-passivity的能力比較厲害,它只是不像state-space會在遇到fitting error超過10%時,就斷然地終止模擬。而這不代表卷積法總是能較好的處理passivity violation,並得到正確的結果。

這就是為何默認還是建議使用state-space,且求解過程中須關注訊息欄顯示的fitting error大小,當state-space無法得到正確結果時才考慮使用卷積法。

HELP內有寫:Convolution may also yield inaccurate results without any warning.

設定方法一:透過Add [Nexxim Solution Options]設定,改用Convolution演算法處理S參數

設定方法二:對所匯入的S參數[Edit Model]設定[Options]

設定方法三:透過Design的Transient Analysis如下設定option參數s_element.convolution=1/2/3,其中

1 (建議) : The impulse response is a piecewise linear waveform ... . This setting gives the most accurate response, but may have passivity violations just above the frequency band of interest.

2 (進階): The impulse response is a train of impulses in the time domain ... . This setting yields an impulse response that is accurate in-band and usually passive. However, the transient waveforms may have discontinuity effects.

3 (進階): The impulse response is the linear interpolation of the inverse FFT results. This setting yields an impulse response with a low probability of passivity violations, but there is significant filtering toward the top of the frequency range of the input data.

  1. 電路模擬不收斂不當解法

6.1 把S參數直接轉SPICE模型

這是解決S參數不收斂最差的方法。因為好不容易花了很多時間掃頻得到一個寬頻的模型,卻為了要解決可能是抽取模型時(掃頻)設定不當引起的收斂問題,硬是把它轉成窄頻的模型,這是典型的鋸箭療傷。

若轉成Full-wave (broad band) SPICE比起轉成單頻點SPICE,寬頻準度上確實會較好,也不會有因non-passivity與non-causality所導致的模擬不收斂問題。但如果一開始的S參數存在non-passivity與non-causality,在轉Full-wave (broad band) SPICE的過程一樣會有因fitting error過大所導致的accuracy impact,以這並沒有真的完全解決問題。

6.2 使用軟體內建的enforce功能後處理做數值修復

軟體提供的enforce設定有兩個層面,一個是求解前在掃頻設定中的enforce選項,這是可以使用的

另一是求解後,在NdE內按[Broadband]按鈕,以後處理方式強制做數值修正。您可以在下方軟體UI內的提示看到,軟體提醒你此enfore causality沒事不要用,因為此方法也會影響原始的S參數。

  1. 問題與討論

7.1 軟體後處理做passivity enforce的三種演算法,有何差別?如何選擇?

  • Enforce using convex optimization algorithm. This approach is very good at enforcing model accuracy but can be slower when the port count exceeds 10.
  • Enforce using passivity-by-perturbation algorithm. This approach is less accurate, but allows successful passivity enforcement on models with more than 10 ports.
  • Enforce using IFPV algorithm. The Iterated Fitting of Passivity Violations algorithm is intended for large port count problems.

A passive system does not contain any energy sources. A causal system is one that is non-anticipatory, that is, its impulse response h(t)=0 for all time t<0.

The convex optimization method for passivity enforcement is the preferred method when you need a very high accuracy fit to the original S-parameter data. If you try to generate a passivity-enforced Full-Wave Spice model with S-parameter data comprising more than 20 ports, it is best to use the passivity by perturbation option. The CPU time and memory requirements for this method are considerably lower than those for the convex optimization method. The accuracy of the S-parameter fit using passivity by perturbation may be somewhat lower than with convex optimization, but it will often succeed on large port count problems where the other method fails.

With primitive causality, the response of a linear time-invariant system must never precede its excitation. SIwave can check and compensate for primitive causality problems.

7.2 為何滿足無源性的被動網路,還是有機會看到輸出電壓大於輸入電壓波形?

這有可能(不必然是錯誤),但看到的是電壓或電流增益>1,而不是功率增益>1,兩者意義不同。[1]

一個滿足無源性的被動網路,當其轉移函數(transfer function)的極零點位置或Q值,被設計讓訊號操作頻率在共振點附近時,就會看到輸出電壓或電流增益>1,但功率增益仍然是<1。

以下是一條延遲1.3ns的無損傳輸線(特性阻抗20歐姆),就可以看到對1G弦波,輸出電壓大於輸入電壓。讀者可以自行測試,傳輸線的阻抗若有明顯的不匹配,很容易看到電壓增益>1現象。

7.3 為何不建議以軟體後處理做enforce passivity/causality?可以有實例更清楚說明嗎?

筆者在2013年以HFSS+Designer做了一個實驗:故意在HFSS內以錯誤設定產生有問題的S參數,再試著以enforce passivity/causality修復該S參數,再以正確HFSS設定得到沒問題的S參數,比較三種情況的眼圖。

Step1 : 在HFSS內以fast sweep做1MHz~3GHz寬頻掃頻(錯誤一),限定refine mesh最多兩次(錯誤二),掃頻1MHz~3G從頭到尾使用linear step 0.1G(錯誤三)使用lossless介質材料且不勾選[Auto. use causal materials] (錯誤四)... 結果得到一個無源性/因果性都違反的S參數模型,而其眼圖如下所示(剛好勉強可以跑出結果)

Step2 : 以Network Data Explorer (NdE)進行passivity/causality enforce後得到的眼圖如下所示 (確實有好一些)

Step3 : 但若回到源頭(HFSS)把網格/掃頻/材料都正確設置後,對的S參數得到的眼圖如下所示

至此,各位應該看懂問題出在哪了吧!

若對錯誤模擬結果(萃取模型)不追究根因,只以演算法事後強制修復,就算能滿足無源性與因果性,也可以跑出相對好一點(看似較合理)的眼圖,那又怎樣? 修復後的結果還是垃圾(garbage in, garbage out)。

NdE內所提供的無源性/因果性enforce是處理問題的最後手段,尋找根因才是正確做法。

什麼時候可以使用NdE內所提供的無源性/因果性enforce? 當你得到的S參數模型是供應商透過量測得到(如連接器或纜線),無可避免的帶一些無源性/因果性違反,此時就可以(也只能)使用。

  1. 參考

[1] HERMAN EPSTEIN, "Synthesis of Passive RC Networks with Gains Greater than Unity", 1951.