發表文章

目前顯示的是 3月, 2021的文章

若沒有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觀看。

Channel Simulation: Bit-by-bit vs Statistical

圖片
 通道模擬第一個會遇到的問題是:該跑bit-by-bit 還是 statistical? 先說結論,對於初學者,或是常常搞不清楚這兩者差別的工程師,我會建議用ADS ChannelSim初始設定,也就是bit-by-bit,因為基本上立於不敗。 接著我們談這兩者的差別,要從AMI模型開始說起。 每一個AMI模型都會有兩個保留參數,Init_Return_Impulse() 和 GetWave_Exists(),兩個參數可以為ture或false,因此會有四種可能,見下表。 但不能兩個都是false,所以剩三種可能,我們簡單討論一下分別代表的模型特性。 Type1: 典型的TX模型,LTI (Linear and Time-invariant線性非時變),可以透過impulse response來描述模型。 Type2: 典型的RX模型,NLTV(Non-linear and Time-variant非線性時變),包含了CDR和適應性的等化器,無法透過Impulse response來描述模型,需要透過GetWave()來處理並輸出波型。 Type3: 適用於LTI和NLTV兩種情況,但這需要特別小心,最好跟模型供應商確認正確的使用方法。 剛剛開頭有說過了,用bit-by-bit基本上立於不敗,那什麼情況可以用statistical呢? 1. TX和RX都是Type1 2. 沒有了... 你可能會傻眼,那豈不是不太可能可以跑statistical了嗎?是的,因為現在高速晶片基本上不可能是LTI,RX肯定會有CDR和adaptive-EQ,若跑Statistical就無法考慮這些NLTV的效應,因此必須跑bit-by-bit。 但接著會遇到下一個難題,應該跑多少個bit?ADS help上有說明,ChannelSim的極限是2e9 bits,但我的經驗是基本上無法達到,主要原因,第一是要跑太久,二來電腦也沒有這麼多空間存這麼多資料。多數SI工程師會跑1e6 bits,然後使用外插,這邊可以參考另一篇文章 " Extrapolate in bit-by-bit mode "。 最後給一個觀念,SI模擬看的是趨勢,並找出較好的solution,效率非常重要。因此一開始可以透過bit-by-bit模式,跑個1e6 bits,先看晶片是不是可以在某些情況將眼...