發表文章

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修改多少。 在這之前要提醒大家,工具只...

Import Hspice Model

圖片
就算AMI模型已經非常普及,但SI/PI工程師偶而還是會拿到Hspice模型,因此我想跟大家聊聊該怎麼做。 通常不外乎兩種應用 1. Driver Model 有些公司不提供AMI模型,所以會用Hspice來描述Driver IC的行為,算是SI的應用。 2. CPM (Current Profile Model) IC的電流模型,主要是拿來跑PI模擬,看給定該抽電模型下搭配設計的電源網路,供電端是否可以維持穩定的電壓,算是PI的應用。 Import Hspice基本上可以無腦交給Hspice Wizard,但之後若模擬遇到問題,可以請教ADS AE,因為可能的原因太多了。 以下我整理幾個常見問題,可以在Import前先注意一下。 1. 廠商給的檔案一大包,應該Import哪一個? 目標要找到對的.SUBCKT,可能會在.inc, .sp,或是 .sp.subckt裡。 需要對整個Hspice架構有點了解,若有問題,可以直接請教ADS AE。 若是SI相關,我的經驗是要去找.inc;若是PI應用,一般是.sp或是.sp.subckt。 2. 怎麼知道是哪裡有問題? 通常我的作法是Import進來後,在每一個端點給上Net name後馬上跑Transient模擬,若有問題瞬間就會報錯,可以從Error Message去推敲是哪邊有問題。你可能會問,為什麼可以什麼都不接直接跑?因為第一階段我們應該專注在確認語法可以正確Import,Hpsice model後面怎麼接(例如接lump model或是SNP)這不是一開始最重要的。 最常見的問題是語法不相容,這邊簡單說明一下,ADS並沒有Hspice engine,僅是把Hspice subcircuit吃進來,用Spice語法去解析,因此一些Hpsice專有語法和表示式可能會導致ADS無法正確運行,因此需要透過Error Message去對應的行數做修改,這部分蠻吃經驗的,也很難簡單說清楚。 3. Transient Time Step怎麼設定? 若是SI應用用Default設定就可以,PI的應用通常.SUBCKT裡有個I-T curve,若time interval是固定的,建議在Transient做以下設定,可以更正確且有效率的抓到I-T curve。

PRBS Voltage Source

圖片
模擬TX很重要的一部分就是確定打出的pattern (統計模式除外),基本上ADS產生pattern的設定方式可以透過VtPRBS模型來認識,其它像是TX_AMI或TX_diff裡面都是一樣的設定方式。 Maximal Length LFSR 跟RegisterLength有關,隨機bit pattern = 2^n-1。若多個TX都採用一樣的pattern length LFSR,會都產生一樣的bit pattern,比較適合SerDes使用,DDR的應用就建議採用下一種。 User Defined LFSR 由Taps和Seed決定。這邊注意,若是需要PRBS"N",就需要N bit的taps和seed,才能產生2^N-1 的LFSR pattern。這種設定方式很常用在DDR的應用,因為每一個bit都希望可以打出不相關的隨機bit pattern,常用的做法是共用一個Taps,然後給不同的Seed。 另外一個常見的問題是,怎麼對應到Hspice上的LFSR設定,例如以下的Hspice語法 vin vout gnd LFSR (0 1 1n 10p 10G 3[7,6] rout=50) 這邊3[7,6] 就是在設定Taps/Seed。 [7,6] 是在描述taps的第七和第六個taps=1,所以是1100000 3是Seed的10進位表示,所以Seed = 0000011 Explicit Bit Sequence 使用Bit Sequence的設定,default是clock訊號,這邊要注意,若是模擬所需的Bit Sequence比這邊設定的還長,就會重複輸出。 Bit File 從Bit File欄位指定bit file(.txt file),由01組成。 Bit Sequence in PAM4 Symbol 從Bit File欄位指定bit file(.txt file),由01組成,再轉換成PAM4 Symbol,11/10/01/00=>3210 Bit File in PAM4 Symbol 從Bit File欄位指定Symbol file(.txt file),由0123組成。

Jitter Analysis

圖片
 Jitter分析是SI工程師比較進階的能力,這邊提供兩個分析方式: 方式1:ADS TDR Frontpanel 直接用ADS內建的jitter separation equation來做jitter分析。 限制:沒有follow任何standard的要求,無法分析PAM4訊號。 方式2:Infiniium_Probe 把波型送到infiniium offline (Keysight示波器的分析軟體) 做jitter分析。 限制:需要有infiniium offline license。 方式1:ADS TDR Frontpanel 先得到模擬波型。 開啟Tool->Frontpanel->Jitter 設定Jitter,注意,Data Type要選擇Arbitrary。 Jitter分析結果 以上方式是透過Jitter Frontpanel,背後是使用jitter_separation()來完成jitter分析。 因此也可以在data display自行輸入以下公式來得到jitter分析的細項。 jitter_separation()分析結果 方式2:Infiniium_Probe 在需要分析的位置加入infiniium_probe 按下模擬後,波行會被送到infiniium offline做進一步的分析

TDR 與頻寬的關係

圖片
結論:通道S參數的頻寬是W,應該用(1/W)*45%的Tr來當TDR訊號源。 TDR(Time Domain Reflectometry) 是一個很常用來看分析通道的方式,可以協助判斷阻抗不連續的位置。 量測的TDR可以是真實的打step waveform並觀測反射的訊號,或是透過量測S參數,再轉換成時域訊號後處理成TDR的結果。 模擬的話幾乎都是拿到通道的S參數,透過時域分析模擬來得到TDR的結果。 而我最常被問到的是,Tr (Rise Time) 應該要設多少? 因為Tr跟TDR的解析度是正相關的,Tr越小可以分析出阻抗不連續的解析度就越高,舉例來說,某傳輸線有一小段區域阻抗沒有設計好,想要透過TDR分析,但若Tr設得太大,可能根本看不出來阻抗不連續(因為阻抗不連續的反射波被TDR上升波型moving average掉了)。這個時候通常就會有人問,那我就設超級小,例如1ps就好了啊!但這也是有問題的,因為Tr越快所包含的頻率組成就含有更多高頻分量,所以要可以設很小的Tr的前提是通道S參數要抽得夠高頻,這邊提供一個參考的轉換方式供大家參考。 以下用Keysight E5071C 網路分析儀的規格來做說明 以20GHz頻寬的網儀來說,它能產生的等效Tr是22.3ps,真空解析度是6.7mm (光速3e8*22.3ps),若在FR4 (dk=4)的材料中,解析度應該是3e8*22.3/2=3.35mm。 用ADS做個簡單的實驗,打出一個22ps的Step response,可以發現在20GHz以後的能量分布都小於-60dB (0.1%)。 20GHz的倒數是50ps,22.3/50 = 45%。 所以我們可以把儀器的標準當作一個TDR Tr設定的參考,假設通道的S參數頻寬是W,那用(1/W)*45%來設定Tr應該是比較合理的設定。 例如,有一個頻寬50GHz的通道模型,若要模擬TDR,比較合理的Tr應該是9ps。

聊聊 DDR AMI

圖片
我們先看一下SerDes的發展,2007年前,晶片速率都在5Gbps以下,用IBIS或是SPICE模型就足夠表現晶片的行為,在ADS上使用Transient來模擬。直到2007年AMI這個詞首次在IBIS論壇被討論,接著很快地就訂定了基本的架構,ADS 2009也推出ChannelSim模擬引擎來支援AMI的模擬,而之後的發展大家也就都非常清楚了,ADS成為了AMI模擬的Golden Platform。 我們再來看DDR的發展,本來看起來跟SerDes是兩個平行世界,但2019 JEDEC宣布需要在DRAM端做DFE均衡之後,之後的發展可以預期應該會跟上10年前SerDes走過的路。 從SerDes(2009年)和DDR(2019年)這兩次的變革,我們可以看得很清楚近代HSD的發展邏輯。當晶片越來複雜,單純用VI VT無法描述,就需要透過AMI模型,用數學來model電路的行為。接著就會需要EDA tool提供相對應的模擬器來支援AMI的模擬。 因果關係:需要Equalizer => 產生AMI模型 => EDA Tool推出支援的simulator 在Serdes: 高速介面(PCIE2)需要考慮EQ的效應,因此IBIS協會採用AMI建模方式,接著ADS 2009推出ChannelSim。 在DDR: DDR5開始需要加入DFE,因此IBIS協會針對現有的AMI架構做出調整來支援single-end訊號,接著ADS 2019U1 推出Memory Designer來支援。 ps. 我最近很常被問,是否可以用ADS ChannelSim來跑DDR5的AMI模型,答案是不可以。DDR AMI模型基於本來的SerDes AMI新增了很多欄位,以克服 DDR5 Simulation Challenges 提到的挑戰。就算可以跑(但其實連model都吃不進來...),也會被迫要忽略 DDR5 Simulation Challenges 提到的挑戰。

DDR5 Simulation Solution

圖片
在  DDR5 Simulation Challenges  有說明模擬DDR5 AMI模型會遇到的挑戰,這篇文章會提供ADS Memory Designer的解決方案。  1. Asymmetric Rise/Fall Waveform 有別於Channel Simulator 透過GetWave()只能獲得上升信號;Memory Designer "DDR Sim"還會執行Getwave2(),來獲得下降信號。在最後把bit pattern轉換成waveform時可以正確把上升下降信號反應出來。 2. Clocking by External Signal 要解決這個挑戰,需要分兩個面向來處理:      A. AMI模型本身要支援triggered by external clock      Keysight SystemVue 可以產生透過外部clock trigger的DDR AMI模型,如下圖。 SystemVue產生AMI模型的界面支援reference external clock      B. 通道模擬引擎要支援。      Memory Designer "DDR Sim" 支援需要讀取外部clock的AMI模型。 3. DC Offset Memory Designer "DDR Sim" 會計算DC offset,並提供給RX AMI模型做波型處理。 4. Multiple Channels Work at the Same Time Memory Designer "DDR Sim" 會把所有的信號都當主信號,同時考慮其他信號對該信號的干擾來分析,例如在分析DQ0的時候,DQ1-63還有CA信號都是干擾源,以此分析出DQ0的信號品質。