發表文章

聊聊 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的信號品質。

DDR5 Simulation Challenges

圖片
JEDEC在DDR5中規範了DFE (Decision Feedback Equalizer)的使用,間接(我認為蠻直接的)的告訴大家,之後DDR的模型需要可以考慮EQ,當下大家都把矛頭指向在SerDes行之有年的IBIS-AMI。也因此模擬引擎就不會是單純的Transient,而是要可以解析AMI模型的通道模擬器(Channel Simulator),看起來變動很大,但對於熟悉SerDes信號模擬的工程師來說,卻是相當的熟悉。 說到這邊,很多人可能認為那就把DDR5的AMI模型丟到Channel Simulator去跑就好了,例如ADS的ChannelSim,但我可以告訴你,事情沒有這麼簡單,至少有四個問題是ChannelSim無法處理的。 1. Asymmetric Rise/Fall Waveform SerDes信號不是P-N,就是N-P,所以斜率都是一樣的,可以用一個方法來看這個現象,假設高電位是1V,低電位是0V,那上升下降的交叉點會在0.5V,但這對DDR信號不成立,DDR本身的充放電曲線就是不一樣的,因此上升下降的交叉點不一定會落在0.5V。 典型的SerDes眼睛,上升下降斜率對稱 典型的DDR眼睛,上升下降斜率不對稱 (看上下半眼睛的大小也可以看出該不對稱) 2. Clocking by External Signal SerDes是透過differential信號自帶clock,透過CDR(clock data recovery)來把正確的clock取出,因此可以在最適合的時間點做DSP的處理,這對一些timing sensitive的演算法非常重要,例如DFE。但DDR是透過另外一組信號來提供clock,例如DQS給DQ提供clock,CLK給CA提供clock。AMI model本來的機制是靠CDR把clock從differential信號擷取出來,但這不適用DDR,因此若要正確反應DDR AMI,應該要可以reference clock信號(DQS/CLK)。 3. DC Offset SerDes因為是differential信號,因此Channel Simulator不會計算DC offset,但這對DDR的設計卻是非常重要的,DC的值會直接影響到眼睛的判斷,因此處理DDR AMI模型的引擎要可以計算DC offset,否則其...

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

圖片
IBIS-AMI已經是現在高速晶片的主流模型,但仍然時不時會有人問"若沒有AMI模型,要怎麼跑ChannelSim?" 這篇文章會跟大家介紹ChannelSim可以support的IC模型搭配方式。 先介紹ChannelSim的兩個必備要素,這樣我們才能針對它們去做變形。 TX : 決定bit sequence,包含bit rate,bit pattern,jitter,EQ。模擬一開始會由TX打出Step waveform,去擷取channel response。 EYE_Probe : TX打出的Step waveform經過通道後,EYE_Probe紀錄收到的waveform。 所以先說結論, 模擬中一定要有TX_diff/TX_ami 和EYE_Probe,缺一不可。 有了這個認識後,我們介紹混搭IC模型的方式。 最常見的情況有兩種: 1. 拿不到TX或RX的AMI模型 可以用ADS的TX_diff/RX_diff來搭建標準的晶片模型,可以設定Trise, Tfall, Jitter, EQ(包括 TX Preset, RX FFE/CTLE/DFE)等等,以下是針對PCIE Gen4建立的Testbench,包含了TX/RX的Jitter和EQ。 PCIE Gen4 Testbench    2. TX或RX是Spice/IBIS/waveform模型 若是拿到RX Spice/IBIS模型就單純許多,直接把RX_Diff/RX_AMI替換成該模型即可。 但若是TX模型是Spice/IBIS/waveform,前面提到原理圖一定要有TX,TX會打出Step waveform,但這部分其實可以透過以下方式來work around。 把TX空掛,用IBIS/Spice/waveform模型打出Step waveform。空掛的TX除了產生Step以外,其他功能都一樣,一樣可以透過TX設定 bit rate, bit pattern, EQ, jitter,這個TX產生的bit pattern(包含了jitter和EQ的效應)會在和RX接收到的Step response做convolution來產生最後的接收waveform,因此空接的TX應該要打出上升下降接近ideal IC的波型,而ADS可以設定的最快RiseFallTime是1%UI,例...

Import Layout File in ADS

圖片
市面上layout格式不少,但基本上可以簡單分為Allegro(.brd)和非Allegro,非Allegro的格式以ODB++為主流,主流layout軟體都支援輸出ODB++格式,以下介紹.brd和ODB++兩種layout導入ADS的方式。 Allegro (.brd) 會需要用到Allegro extracta這個功能,此功能目前是不需要license,所以要確認電腦有安裝Allegro PCB Editor(Viewer不行,因為沒有extracta),但不需要有license。 因為Allegro在不同版本有不同的系統參數設定方式,以下分三個版本範圍介紹設定的方式。  16.x  不需要任何設定,照以下設定就可以導入ADS  17.0-17.2  需要在環境變數裡把Allegro執行位址加到PATH環境變數裡,我的17.2安裝位址是C:\Cadence\SPB_17.2\tools\bin  17.4 -  目前導入會有問題,建議安裝17.2以前的版本。 ODB++ (.tgz) 導入Layout後 ADS會依照Layout對stackup的設定,產生Substrate檔,建議確認是否正確。(比較常見的情況是layout工程師並沒有按照真實的情況設定疊構,這時候匯入ADS疊構資訊會是layout軟體的預設值,以下提供兩個建議,可以選擇適合的方式。 1. 請layout工程師正確填入疊構資訊。 2. 編輯ADS Substrate檔。 導入失敗 除了仔細看錯誤訊息之外,請先確認沒有違反以下幾點: 1. layout名稱有特殊字元,盡量只有英文字母/數字/下底線_就好。 2. layout存放路徑不能有空格也不能有特殊字元,例如/Program Files中間有空格就不好,要放在自己創建的目錄下,例如D:\ADS\WRK\ 之類的。 3. Layout存放路徑不能太長,這點同時也適用workspace的位置,盡量簡單,可以參考以下路徑,D:\ADS\project1。

Use AEL in ADS

圖片
AEL (Application Extension Language) 是ADS內部支持的語言之一,跟C語言比較接近。 為了對資料進行處理,R&D或是AE會透過給AEL code來協助使用者完成某些任務,這篇文章會介紹怎麼使用AEL code。 這邊以expandmatrix()為例,該AEL的功能是對輸入矩陣做資料型態轉換,可以直接在datadisplay上寫equation使用,或是當作其他ael的function。下圖示範在datadisplay equation使用這個function。 計算Fitted Insertion Loss的某部分equation 1. 找到ADS的home路徑 開啟ADS的時候,選擇close, 這個時候ADS開啟的資料夾位置就會在home ,接著在資料夾上按右鍵,選擇Explore in File System,就會開啟該資料夾,如下圖。 按右鍵,選擇 Explore in File System 2. 新增hpeesof/expressions/ael 資料夾 (default沒有這些資料夾,直接在home位置新增) 3. 將要使用的.ael放在ael資料夾內 (以下圖expandmatrix.ael為例) 4. 新增user_defined_fun.ael 檔案,並在內宣告需要使用的AEL 函數。(把會使用到的.ael file在這邊宣告) 5. 關閉ADS,再重新啟動一次,確認對應的.atf檔案是否有被自動產生,若有,表示.ael 有被正確的Compile。

PAM4 Measurement with ADS and FlexDCA

圖片
相較於NRZ,PAM4的模擬和量測更加的複雜,對此ADS也提供了一些常用的分析結果,三個眼睛的眼高眼寬,bathtub,contour等等。 另外也有VSRPAM4這個模擬結果,針對1e-6 contour做更細部的分析。 ADS ChannelSim 設定 EYE_Probe內的模擬項目 Data Display的模擬結果 若這些都還不夠,需要其他較複雜的測試項目,例如TDECQ,可以透過以下流程,把波型送到 Keysight FlexDCA分析軟體。(電腦需要安裝FlexDCA軟體,並可以取得license) 在需要量測的位置放入FlexDCA_Probe FlexDCA軟體分析模擬波型的結果(e.g. TDECQ) ADS同步擷取FlexDCA的分析結果 ps. 目前只有TDECQ得結果可以存放到ADS的dataset裡,其他模擬結果都要直接在FlexDCA觀看。