發表文章

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