發表文章

Probes in Memory Designer

圖片
DDR的分析,在很多面向都有別於SerDes,其中有一點就是Forward Clocking。這篇文章會深入說明ADS Memory Designer可以提供的眼圖分析以及對應的適用場景。 由於DDR的Clock跟訊號是分開的,一般說的EYE都是在說Stobed EYE,也就是以DQS/Clock來trigger DQ/CA而得到的眼圖。之前文章提到( 聊聊DDR AMI ),DDR5開始引入DFE,若有使用RX AMI,會需要遵守 BIRD209 的規範。 ADS Memory Designer支援Transient和DDRsim兩種引擎,DDRsim又分bit-by-bit和Statistical兩種模式。請以下圖搭配說明。 EYE: 過RX AMI前的眼圖,用系統的理想clock產生的眼圖。 EYE(RxOutput): 過RX AMI後的眼圖。只有DDRsim有。參考下圖。 Strobed EYE: 過RX AMI前,且參考指定clock產生的眼圖(需要在Memory Probe->Select Reference Signal設定) 。需要有waveform,所以DDRsim Statistical模式不支援。參考下圖。 以上三種眼圖分別在Data Display的命名也不一樣,在比較表中有標示。 以下總結適用的應用場景 DDR4以前:用Strobed EYE,以符合實際的晶片行為。 DDR5以後:用EYE(RxOutput),套用BIRD209針對clock的規範。 補充說明: 1.  BIRD209 是DDR AMI很重要的一個規範,由於之前對於AMI都是依照Differential訊號做定義,所以並沒有single-end訊號怎麼透過外部clock來產生眼圖的機制。在BIRD209提出之前,ADS Memory Designer用GetWave2來支援這個功能(以區別傳統的GetWave)。BIRD209就是針對這個流程做標準規範,ADS2023 update1開始支援 BIRD209。下圖是BIRD209的運作流程圖,得到DQ和DQS訊號後,DQS會先經過AMI得到均衡後的Waveform,而這個訊號會提供給DQ AMI模型來計算EYE(RxOutput)。 2. Memory Designer 預設是看到package端的訊號,若要...

Using W-element in ADS

圖片
 W-element是一種描述傳輸線的文件,通常是.tab檔,可以透過以下的方式導入ADS。 修改.tab 注意:w-element沒有大小寫區分,若看到有些刻意用大寫,只是為了好辨別。 w-element前面一般會有一些文字說明,開頭是*,這些是註解,建議可以先刪除,簡化文件。 找到.model,以下都是重要的資訊 為了要使用該model,我們需要做一些修改 1. 前面加上.subckt,最後一行打上.ends 用.subckt .ends把模型包裹起來 2. 看.model最後n=多少,就在subckt後面加上以下描述 .subckt case in1 in2 in3 in4 in5 in6 in7 in8 inref  + out1 out2 out3 out4 out5 out6 out7 out8 outref  + Length=1 case: model的名稱,這個會影響後面導入ADS的命名,可以自己取。 in1....in8, 根據n的數量,定義input port的名稱,out1...out8則是output port的名稱。 Length,這個變數名稱user可以自己決定,但要好認,這個會跟著model的名稱顯示在ADS裡,這個變數的值是w-element長度,這例子我們把default值設為1。 3. 使用model W1 in1 in2 in3 in4 in5 in6 in7 in8 inref  + out1 out2 out3 out4 out5 out6 out7 out8 outref  + N=8 L=Length TABLEMODEL=wline W1 可以任意命名。 後面的兩行照抄subckt的前兩行 第三行 N= L= TABLEMODEL= 是固定格式 N的值依照.model的設定 L的值填上.subckt的長度變數,產生連動 TABLEMODEL 用.model後的model名稱 這樣就修改完成了。 Import with Hspice Wizard 選取檔案的時候,記得要選all files,才選的到.tab檔 之後就一直按Next就可以了。 ADS會用之前在w-element命名的subckt名稱產生一個cell,這個時候可以進去symbol修改為希望在電路上...

Get Step/Impulse Response

圖片
對比較進階的使用者來說,會想要看通道的Step/ Impulse response,做更進一步的通道分析,以下說明設定方式。 Step Response ADS ChannelSim在分析通道是先透過TX打出Step waveform,在Probe端接收 Step response,因此若要得到特定位置的Step response,可以透過 1. 開啟Save characterization result 2. 在觀測位置添加net name,建議可以用p1~n/n1~n來命名 Impulse Response 有兩個先決條件 1. TX或RX是使用AMI模型 2. 開啟Save characterization result,並把Status level設為4 在dataset以下就可以找到以下的result imp_tx_init_in.txt = analog channel impulse  (通道) imp_tx_init_out.txt = combined impulse of TxEQ+channel  (TX EQ+通道) imp_rx_init_out.txt = combined impulse of TxEQ+channel+RxEQ (TX EQ+通道+RX EQ)

CTLE

圖片
 CTLE是Continuous Time Linear Equalization的縮寫,常用在RX做高頻補償,可以理解為用poles、zeros、和prefactor來定義的transfer function (轉移函數)。 一般EDA軟體都會提供transfer function的模板,SI 工程師僅需要把規範的poles/zeros/prefactor填入就可以使用該transfer function來做高頻補償,這邊提供如何把協會的規範套入ADS CTLE的方法。 以下用PCIE5當範例, 下圖定義了poles/zeros的值 接著定義DC的增益 (各transfer function在DC的值) 透過transfer function和各參數的定義,我會製作一個簡單的excel表格, 透過ADC=-5dB來說明。 把S=0帶入transfer function,可以得到H(s)=prefactor*z1*z2/(p1*p2*p2*p4)  我們希望這個值會等於-5dB,也就是0.5623(10^(-5/20), dB換算mag) 0.5623=prefactor*z1*z2/(p1*p2*p2*p4) 又z2=0.5623*p2 1=prefactor*z1/(p1*p3*p4) =>prefactor=p1*p3*p4/z1 講到這邊,我們再回頭看一次transfer function, 會發現前面黃色的地方就是prefector,後面綠色的是transfer function。 每個協會在描述H(S)的時候,不一定會把prefactor推導出來,我的習慣還是會自己推導。 這邊注意,prefactor是徑度的單位,所以Hz要*2pi 轉成rad/s。 把以上得到的值填入ADS CTLE欄位,就可以觀察transfer function是否如期望。

Memory Designer Compliance Flow

圖片
 ADS Memory Designer 有一個很獨特的功能,可以一鍵產生compliance report。Memory Designer可以將模擬的Waveform送到示波器分析軟體infiniium offline並執行選定的測試項目,最後產生符合JEDEC規範的compliance report。 這個流程會牽涉到三個軟體,ADS,Infiniium offline,DDRx Test App。目前還不是所有版本都可以相容,筆者自己測試過比較信賴的組合是 ADS (沒有限制,建議安裝新一點的版本,例如ADS2023) Infiniium offline:06.55.00702 DDR4 Test App:3.50.0.0 ps. Infiniium offline 和 DDRx test app放在官網上的版本都是最新的,所以若要特定版本請找儀器AE詢問。 以下簡單說明操作方式: 1. 電腦先安裝infiniium offline 2. 再安裝欲測試Test app, 例如ddr4 2.1 確認test app有安裝成功 3. Memory Designer需要使用Transient (DDR-sim不可以) 4. 在Memory_Probe勾選compliance 設定 上圖說明 a. 開啟一鍵產生compliance report b. 設定report 儲存的位置和名稱 c. 是否在report內儲存screenshot,這會讓報告產生的速度至少慢5-10倍,建議第一次先不要勾選。等完成第一次報告後,可以針對幾個測試項開啟screenshot功能。 5. 選取要產生的測試項目 6. 開始模擬,infiniium offline會自動開啟,並使用對應的test app執行選定的測試項目。 自動彈出infiniium offline 自動彈出DDRx Test App 執行選取的測試 7. 到指定的資料夾看Report

Error: Timestep Too Small

圖片
 ADS Transient有時候遇到timestep too small這個error,常常讓SI工程師不知道怎麼解。 通常可以透過兩個簡單的設定處理掉大部分的情況,若還無法,就把workspace傳給ADS Solution Enginner吧。 1. 放寬convolution tolerance.  預設是auto,ADS Transient會自行判定,但既然都有這個timestep too small的error,很可能是ADS在某些時間點無法收斂,可以試著改為Relax。 2. 統一S參數的使用頻寬 若Schematic上有串接多個SNP,通常每一個SNP的抽取頻寬都不一樣,可能有的抽到10GHz,有的抽到20GHz,建議把ADS使用的Convolution頻寬定在最低的SNP頻寬,這樣可以避免針對其他SNP做外插。 我的經驗是,這兩個設定應該可以解決7成timestep too small的問題,剩下的就交給ADS Solution Engineer吧。

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做進一步的分析