Causality Check

Causal: 因果關係

簡單來說,有input才有output。這我們認為很理所當然的鐵律,在SI的世界卻是一個常常會遇到的問題,常見原因有:

1. time/frequency transformation: 常見的情景是拿到一個有限頻寬的S參數,例如0-40GHz,放到ChannelSim裡想要看對眼圖的影響,這個時候ChannelSim會先把頻域的S參數轉為時域,再做bit convolution(卷積)。但因為是有限頻寬,所以轉換到時域就不可避免會有因果性的問題,這基本上是無法避免的,因為實際上也不可能量測到,或是抽出接近無限頻寬的S參數。這個原因佔違反因果律的比重較小,除非判斷是否違反的標準很嚴苛,否則應該不至於成為主要因素。

2. frequency dependent material: 做EM模擬時,會設定材料的dk/df模型,我們都知道dk/df會隨頻率變化,也就是frequency dependent,所以若在模擬的時用單一dk/df給所有頻率點使用,模擬結果就會違反因果律。ADS支援的頻變模型是Svensson/Djorjievic,user給定一個頻率的dk/df值(e.g. 5GHz),ADS會協助外插其他頻域的dk/df (e.g. 1kHz to 1THz),由於SD頻變模型的公式是符合因果律的,跑出來的結果就可以確保因果性。

3. 量測的手法,EDA工具的設定,這些都可能會造成違反因果律的問題,可能原因有很多,若遇到建議直接跟相關應用工程師尋求諮詢。

為了克服non-causal,每一家時域模擬引擎都會具備enforce causality的功能,否則跑出來的結果會很違反常理。ADS Transient 使用自家專利 (USA patent 7962541),在不修改太多Spectrum的前提下,透過hilbert transform來讓時域訊號符合因果律,所以ADS的Transient/ChannelSim模擬結果一定符合因果律

由於enforce causality是ADS Transient/ChannelSim的內建設定,這邊跟大家分享兩點實用技巧

1. 如何看S參數是否符合因果律 

2.若S參數違反因果律,拿這個S參數來跑Transient/ChannelSim會被ADS修改多少。

在這之前要提醒大家,工具只是幫忙解決問題,但使用者有責任提供有品質的模型,也就是說,若發現S參數嚴重違反因果律,應該要思考怎麼得到符合因果律的S參數,否則雖然ADS會把S參數enforce causality,但被修改後的S參數就跟本來預期的有差異,所以這邊提供一些方法,在模擬前就幫模型的品質把關。

使用SParameter Toolbox

該Tool會針對User指定的標準來判斷S參數的品質,包括Passivity, Reciprocity, Causality,可以在首頁就清楚看到這個S參數的品質。

對使用的S參數做品質分析

設定測試的Pass/fail標準

透過Transient/Save Impulse Spectrum 看Spectrum被修改多少

跑Transient前先勾選Save Impulse Spectrum,就可以看到Transient對該S參數做了多少修正


Dataset模擬結果的說明 
_OR: 本來的spectrum,_FFT_IMP: Transient修正後

以下分享TDR比較結果。藍色TDR是直接透過S參數計算(ADS內建的公式tdr_sp_imped()),紅色是跑Transient 的結果,可以看到藍色的結果很明顯違反因果律(激勵信號還沒送出就已經收到反射信號了),而紅色是使用的Transient修正後的S參數跑TDR,所以符合因果律。


留言

這個網誌中的熱門文章

若沒有AMI模型,要怎麼跑ChannelSim?

Probes in Memory Designer

聊聊 DDR AMI