域仿真全流程:從建工程到時(shí)序分析)
萬(wàn)事開(kāi)頭難尤其是DDR仿真這種活。板子畫(huà)完投板之前心里沒(méi)底跑完回來(lái)一測(cè)波形亂成一團(tuán)眼圖都快閉上了這時(shí)候再回頭查設(shè)計(jì)成本早就翻倍了。Sigrity Speed 2000就是干這個(gè)用的在投板前把DDR這條總線從頭到尾仿真一遍用虛擬示波器看真實(shí)的波形、眼圖、時(shí)序裕量把風(fēng)險(xiǎn)提前壓掉。這篇我就按自己的實(shí)際使用經(jīng)驗(yàn)把Speed 2000做DDR時(shí)域仿真的完整流程拆開(kāi)揉碎了講從模型準(zhǔn)備、工程搭建、激勵(lì)配置到結(jié)果分析再到幾個(gè)我覺(jué)得特別實(shí)用的調(diào)參技巧和排查套路一次性說(shuō)清楚。1. 項(xiàng)目整體設(shè)計(jì)與仿真思路拆解做DDR仿真首要問(wèn)題不是怎么點(diǎn)軟件而是想清楚要仿什么、仿到什么深度。DDR這個(gè)總線很特殊它不像PCIe那樣是高速串行點(diǎn)對(duì)點(diǎn)而是并行總線加上復(fù)雜的拓?fù)浣Y(jié)構(gòu)讀寫(xiě)雙向信號(hào)種類(lèi)多時(shí)序關(guān)系環(huán)環(huán)相扣。你在仿真軟件里建的工程本質(zhì)上是在模擬一個(gè)完整的數(shù)字系統(tǒng)行為控制器Controller發(fā)命令、顆粒DRAM響應(yīng)、IO來(lái)回翻轉(zhuǎn)每個(gè)動(dòng)作之間都有嚴(yán)格的時(shí)序關(guān)系。1.1 Sigrity Speed 2000在DDR仿真里的定位Speed 2000是Sigrity家族里做時(shí)域瞬態(tài)仿真的主力工具跟PowerSI頻域S參數(shù)提取、PowerDC直流壓降分析、Clarity三維全波配合使用。在DDR仿真這個(gè)場(chǎng)景下Speed 2000的核心優(yōu)勢(shì)是系統(tǒng)級(jí)、全總線協(xié)同仿真能力。你能把整個(gè)DDR通道從控制器的die pad到封裝引線、PCB走線、過(guò)孔、顆粒封裝最終到顆粒die pad的全鏈路建模進(jìn)去同時(shí)跑幾十上百條信號(hào)網(wǎng)絡(luò)觀察它們之間互相干擾的情況。實(shí)際DDR3/DDR4設(shè)計(jì)中數(shù)據(jù)線和地址控制線是分開(kāi)處理的。數(shù)據(jù)線DQ和選通線DQS走點(diǎn)對(duì)點(diǎn)或星型拓?fù)涿織llane相對(duì)獨(dú)立而地址、命令、控制線AC信號(hào)在DDR4里普遍采用Fly-by菊花鏈拓?fù)湟唤M線經(jīng)過(guò)多個(gè)顆粒。Speed 2000能非常自然地描述這兩類(lèi)拓?fù)湫螒B(tài)并且支持DDR協(xié)議感知DDR Awareness的激勵(lì)配置不用你手動(dòng)一條線一條線地做激勵(lì)源它會(huì)自動(dòng)按協(xié)議把地址、命令、數(shù)據(jù)、時(shí)鐘的動(dòng)作編排好。1.2 為什么DDR時(shí)域仿真難度比普通信號(hào)完整性分析高普通單端信號(hào)或者簡(jiǎn)單SPI總線的仿真主要看串?dāng)_、反射、插損這些基礎(chǔ)指標(biāo)控制器模型和接收器模型簡(jiǎn)單對(duì)一下就能看。但DDR的難點(diǎn)在于協(xié)議時(shí)序的耦合性。舉個(gè)例子DDR的寫(xiě)入操作需要DQ信號(hào)相對(duì)于DQS滿足tDS和tDH關(guān)系而這兩個(gè)參數(shù)會(huì)受通道長(zhǎng)度、輸出驅(qū)動(dòng)強(qiáng)度、ODT片內(nèi)端接設(shè)置、Vref電壓甚至相鄰lane串?dāng)_的綜合影響。你孤立地去調(diào)一條走線的阻抗是沒(méi)用的因?yàn)槟銢](méi)法判斷它是否影響整個(gè)時(shí)序裕量的閉環(huán)。這正好是Speed 2000設(shè)計(jì)上考慮到的硬件工程師負(fù)責(zé)畫(huà)板但仿真必須還原完整的讀寫(xiě)時(shí)序行為。所以你需要在仿真里定義總線協(xié)議、拓?fù)浣M、激勵(lì)模式、時(shí)序余量計(jì)算規(guī)則讓軟件按照協(xié)議標(biāo)準(zhǔn)來(lái)計(jì)算setup/hold margin。仿真結(jié)果不再是一條波形而是一張全部信號(hào)組的時(shí)序快照哪里緊、哪里松一目了然。一個(gè)很重要的認(rèn)知DDR仿真不是追求波形漂亮而是追求在最?lèi)毫覲VT工藝、電壓、溫度組合下關(guān)鍵信號(hào)的時(shí)序裕量依然大于等于芯片規(guī)范的閾值。后面的所有操作都是圍繞這個(gè)目標(biāo)展開(kāi)的。1.3 仿真流程的整體框架在速度上Speed 2000可以采用混合求解方式非線性器件IO buffer模型用SPICE算法求解互連網(wǎng)絡(luò)走線、過(guò)孔、電源平面用頻域響應(yīng)的逆變換建模。這種混合方式既保持了精度又控制了仿真規(guī)模幾百條網(wǎng)絡(luò)跑一遍也不至于等一個(gè)通宵。整體流程可以歸納成這么幾個(gè)步驟模型準(zhǔn)備確認(rèn)IBIS模型、疊層參數(shù)、布局布線數(shù)據(jù)齊全且版本配套。工程搭建導(dǎo)入板級(jí)設(shè)計(jì)文件ODB或Allegro .brd校正疊層參數(shù)。拓?fù)涠x與總線識(shí)別用DDR Awareness自動(dòng)識(shí)別DDR總線網(wǎng)絡(luò)并分組。激勵(lì)和協(xié)議配置選擇DDR協(xié)議版本、速率、顆粒型號(hào)、激勵(lì)模式設(shè)置多種PVT角度的組合。仿真運(yùn)行設(shè)置求解參數(shù)運(yùn)行時(shí)域波形和眼圖仿真。結(jié)果分析與報(bào)告輸出查看時(shí)序余量、眼圖、波形生成對(duì)比報(bào)告。下文我按這個(gè)順序一步步講重點(diǎn)講每一步容易踩的坑和關(guān)鍵參數(shù)取舍的底層邏輯。2. DDR時(shí)域仿真的核心概念與仿真前準(zhǔn)備動(dòng)手跑仿真之前如果不多花點(diǎn)時(shí)間把數(shù)據(jù)和模型搞清楚后面基本上會(huì)浪費(fèi)大量時(shí)間在排查錯(cuò)誤上。我見(jiàn)過(guò)的多數(shù)仿真失敗根本不是軟件不會(huì)用而是前期的模型和數(shù)據(jù)本身就有問(wèn)題。2.1 DDR協(xié)議基礎(chǔ)與仿真信號(hào)分組DDR協(xié)議從功能上信號(hào)可以分成這幾組數(shù)據(jù)組DQ數(shù)據(jù)、DQS數(shù)據(jù)選通、DM數(shù)據(jù)掩碼。地址命令組地址線A0~A15/A17、命令線RAS、CAS、WE、片選CS、時(shí)鐘使能CKE。時(shí)鐘組差分時(shí)鐘CK/CK#??刂菩盘?hào)組ODT片內(nèi)端接控制、Reset、ZQ校準(zhǔn)引腳。電源地信號(hào)VDD、VDDQ、VSS等。在Speed 2000里做DDR仿真你先要把這些信號(hào)正確地歸類(lèi)。DDR Awareness一般是自動(dòng)識(shí)別網(wǎng)絡(luò)名軟件能識(shí)別常見(jiàn)命名規(guī)則但有些半自定義的命名就需要手工調(diào)整。分組不對(duì)后續(xù)激勵(lì)生成和時(shí)序分析全是錯(cuò)的。數(shù)據(jù)組中的DQS與DQ是嚴(yán)格對(duì)著走的下路DQ0~DQ7配一個(gè)DQS0上位DQ8~DQ15配一個(gè)DQS1依此類(lèi)推。每組DQS/DQ的走線長(zhǎng)度差要嚴(yán)格控制這也是做等長(zhǎng)設(shè)計(jì)時(shí)最重要的組內(nèi)約束。仿真時(shí)軟件也是按lane來(lái)算時(shí)序每個(gè)lane的DQS和DQ的相對(duì)時(shí)延偏差直接決定寫(xiě)入/讀取的建立保持時(shí)間余量。2.2 模型準(zhǔn)備IBIS模型與疊層參數(shù)的關(guān)鍵性IBIS模型是整個(gè)仿真里占比最重的數(shù)據(jù)來(lái)源。DDR仿真建議用IBIS 4.0以上版本最好帶上下拉特性曲線、器件電容封裝、以及Ramp/VI曲線的完整描述。DDR4/5的IBIS模型還要特別注意有沒(méi)有包含ODT的電阻值步進(jìn)RZQ/6、RZQ/7等等因?yàn)镈DR4的動(dòng)態(tài)ODT配置對(duì)信號(hào)質(zhì)量的仿真結(jié)果影響巨大。如果控制器的IBIS建模不太準(zhǔn)確在某些情況下可以找芯片原廠要更精細(xì)的SPICE/DES模型用密腳封裝模型替代IO buffer但這種模型仿真收斂難度大、耗時(shí)長(zhǎng)一般只在信號(hào)質(zhì)量邊緣態(tài)或者需要對(duì)端接電阻做敏感性掃描的時(shí)候才用。疊層參數(shù)是人最容易忽略重災(zāi)區(qū)。大多數(shù)情況從板廠拿疊層表是含銅箔厚度、基材介電常數(shù)、損耗角正切Df、成品板厚、阻抗目標(biāo)的。但疊層表里通常不會(huì)給銅箔表面粗糙度參數(shù)而高速信號(hào)的損耗尤其是5GHz以上頻段表面粗糙度引起的導(dǎo)體損耗和介質(zhì)損耗貢獻(xiàn)幾乎相當(dāng)。DDR3跑1600MT/s的時(shí)候還能靠仿真余量扛過(guò)去DDR4到2400/3200的時(shí)候粗糙度不賦值眼圖差異就非常明顯了。因此在Speed 2000疊層編輯器里不要默認(rèn)用光滑銅箔要按實(shí)際使用銅箔調(diào)整RMS粗糙度一般普通HTG銅箔給0.5~0.8umHVLP銅箔給0.3~0.4um。這里補(bǔ)充一個(gè)自查習(xí)慣每次導(dǎo)入新板之前先跑一個(gè)最簡(jiǎn)過(guò)孔/微帶線模型的頻域S參數(shù)和插損和網(wǎng)絡(luò)分析儀實(shí)測(cè)數(shù)據(jù)對(duì)一下誤差在合理范圍內(nèi)才繼續(xù)往下做。這個(gè)習(xí)慣可以幫你篩掉大量的疊層賦值錯(cuò)誤。2.3 仿真觀察點(diǎn)與測(cè)試點(diǎn)確認(rèn)仿真時(shí)選擇在哪個(gè)位置觀察眼圖影響非常大。具體來(lái)說(shuō)有三種典型選擇控制器die pad控制器端內(nèi)部晶圓pad點(diǎn)最準(zhǔn)確反映芯片真實(shí)收發(fā)的信號(hào)條件但對(duì)于板級(jí)設(shè)計(jì)而言這個(gè)位置觀察到的信號(hào)和你們團(tuán)隊(duì)想對(duì)照的實(shí)際測(cè)試結(jié)果可能不匹配。顆粒die pad接收端顆粒內(nèi)部觀察點(diǎn)決定顆粒能否正確采樣是時(shí)序分析的正確參考點(diǎn)。板級(jí)測(cè)試點(diǎn)你在實(shí)際PCB上能探到的地方比如VTT電阻、測(cè)試孔、控制器引腳。通常為了和實(shí)測(cè)對(duì)標(biāo)會(huì)選擇這個(gè)點(diǎn)。一般的流程是先用die pad做設(shè)計(jì)裕量判斷和報(bào)告輸出再用板級(jí)測(cè)試點(diǎn)做實(shí)測(cè)對(duì)標(biāo)。對(duì)于不同觀察點(diǎn)Speed 2000允許你設(shè)置探測(cè)點(diǎn)Probe可以一次仿真多個(gè)探測(cè)點(diǎn)后面用波形窗口直接切換位置查看。實(shí)測(cè)中發(fā)現(xiàn)信號(hào)對(duì)應(yīng)不上排查時(shí)先檢查探測(cè)點(diǎn)設(shè)置是否合理。3. Speed 2000 DDR仿真全流程實(shí)操拆解這一部分我按自己經(jīng)常操作的標(biāo)準(zhǔn)流程來(lái)寫(xiě)每一步都帶上操作意圖和注意事項(xiàng)盡量做到你照著能走通。3.1 工程搭建與疊層校正打開(kāi)Speed 2000后的第一步是新建工程、導(dǎo)入板級(jí)設(shè)計(jì)。要注意的是Speed 2000是不直接讀Layout原始文件的一般通過(guò)兩種方式導(dǎo)入導(dǎo)入ODB格式從Allegro、AD等工具導(dǎo)出的標(biāo)準(zhǔn)制造數(shù)據(jù)格式。直接打開(kāi)Cadence Allegro的.brd文件。如果是AD設(shè)計(jì)的板子建議先導(dǎo)出ODB再導(dǎo)入如果是Allegro直接打開(kāi).brd即可。導(dǎo)入后建議順手檢查文件版本舊版本.brd在導(dǎo)入時(shí)偶爾會(huì)出現(xiàn)鋪銅層錯(cuò)位這種錯(cuò)誤非常隱蔽且致命。導(dǎo)入之后立刻進(jìn)疊層編輯器Stackup Editor核對(duì)層數(shù)、每層銅厚、介質(zhì)類(lèi)型和厚度。介電常數(shù)Dk和損耗角正切Df注意特定頻率下的值FR4在1GHz時(shí)Dk約4.210GHz時(shí)可能降到3.9左右軟件會(huì)按頻率插值你把材料基礎(chǔ)數(shù)據(jù)填對(duì)就好。銅箔粗糙度參數(shù)。每層走線的目標(biāo)阻抗和實(shí)際阻抗。我的習(xí)慣是疊層校正這步絕對(duì)值要核20分鐘這20分鐘能避免后續(xù)跑完仿真結(jié)果錯(cuò)得離譜的情況。不同項(xiàng)目從仿真結(jié)果對(duì)不上的半天排查時(shí)間對(duì)比之下這20分鐘的投入完全值得。疊層校正好以后Speed 2000會(huì)自動(dòng)計(jì)算所有走線的傳輸線參數(shù)相比直接用2D場(chǎng)求解器拉提取效率非常高。如果工程里走線歸到錯(cuò)誤層這里馬上就能看到阻抗異常值。3.2 網(wǎng)絡(luò)分組與DDR總線識(shí)別疊層沒(méi)問(wèn)題后進(jìn)入DDR Simulation環(huán)境用DDR Awareness功能自動(dòng)識(shí)別。啟動(dòng)菜單里找到 DDR Analysis / Bus Formation這一項(xiàng)軟件會(huì)自動(dòng)掃描網(wǎng)絡(luò)中匹配DDR前綴的線網(wǎng)。識(shí)別完成后在DDR Bus面板里檢查分組的正確性數(shù)據(jù)lane分組DQ0-DQ7對(duì)應(yīng)DQS0、DM0地址組、命令組、控制組的歸屬時(shí)鐘網(wǎng)絡(luò)是否成對(duì)出現(xiàn)CK_P/CK_N。網(wǎng)絡(luò)識(shí)別是根據(jù)命名規(guī)則如果項(xiàng)目里芯片廠商用了特殊的網(wǎng)絡(luò)前綴比如“CPU_A0_DQ0”或者“M_DQ_0”軟件可能認(rèn)不出來(lái)。這時(shí)候要手工創(chuàng)建Bus把對(duì)應(yīng)網(wǎng)絡(luò)拖進(jìn)去。實(shí)操建議先把命名規(guī)范完善好再導(dǎo)入能省下很多手工分組時(shí)間。分組還有一個(gè)細(xì)節(jié)把端接電阻的網(wǎng)絡(luò)也納入Bus分析。比如地址線末端上拉到VTT的電阻在Speed 2000里要設(shè)置為“Termination”程序才會(huì)在仿真中正確加載到這個(gè)端接網(wǎng)絡(luò)。如果漏掉仿真時(shí)那一組信號(hào)完全沒(méi)有直流偏置出來(lái)的波形形狀就不對(duì)。3.3 激勵(lì)設(shè)置與協(xié)議配置DDR仿真和普通SI仿真最大的差異就在激勵(lì)上。普通仿真你可以用PRBS碼型、方波脈沖或者階躍信號(hào)隔離看一條線的信號(hào)質(zhì)量。DDR仿真需要“像真的DDR控制器一樣”去訪問(wèn)內(nèi)存先發(fā)激活命令再發(fā)讀寫(xiě)指令數(shù)據(jù)在DQS的兩邊或中間采樣整個(gè)時(shí)序列要符合協(xié)議規(guī)范。在Speed 2000的DDR激勵(lì)設(shè)置界面需要關(guān)注下面幾個(gè)主要參數(shù)協(xié)議版本與速率DDR3-1600、DDR4-3200、DDR5-5200等。選擇對(duì)應(yīng)的AG地址命令時(shí)序和DQ時(shí)序設(shè)置。激勵(lì)類(lèi)型內(nèi)置的DDR Bus激勵(lì)模型能生成符合規(guī)范的Read讀、Write寫(xiě)、讀寫(xiě)交替等模式的激勵(lì)。實(shí)際仿真最常用的是寫(xiě)操作因?yàn)閷?xiě)操作對(duì)時(shí)序的要求更嚴(yán)格也更考驗(yàn)板級(jí)設(shè)計(jì)。碼型生成數(shù)據(jù)模式可以選擇PRBS7、PRBS9、自定義固定碼型。如果只是驗(yàn)證信號(hào)質(zhì)量PRBS15的隨機(jī)性更好能覆蓋更多翻轉(zhuǎn)組合如果是時(shí)序關(guān)鍵路徑驗(yàn)證需要準(zhǔn)備針對(duì)性的應(yīng)力碼型比如“最壞窗口”碼型。驅(qū)動(dòng)電壓VDDQ和VrefDDR的Vref決定了接受端判斷0/1的門(mén)限電壓不同標(biāo)準(zhǔn)有不同的Vref設(shè)置DDR3通常VDDQ的一半DDR4有Vref培訓(xùn)機(jī)制。仿真時(shí)要按芯片實(shí)際配置來(lái)設(shè)。這里有個(gè)很容易搞錯(cuò)的細(xì)節(jié)DDR訓(xùn)練Training機(jī)制。真實(shí)DDR系統(tǒng)在上電時(shí)控制器會(huì)自適應(yīng)做Read/Write training補(bǔ)償通道長(zhǎng)度、溫度漂移帶來(lái)的時(shí)序偏移這也是DDR4/DDR5與DDR2/3的一大區(qū)別。仿真器可以模擬訓(xùn)練之后的結(jié)果因此你在時(shí)序報(bào)告中看到的余量是“已經(jīng)校準(zhǔn)后的余量”不是完全固定的setup/hold窗口。Speed 2000設(shè)置里有“訓(xùn)練相關(guān)”選項(xiàng)如Write Leveling、Vref培訓(xùn)建議把訓(xùn)練模式打開(kāi)更接近真實(shí)工作狀態(tài)。3.4 仿真運(yùn)行與時(shí)序分析激勵(lì)設(shè)置完成就可以運(yùn)行仿真了。仿真控件中可以設(shè)置仿真時(shí)長(zhǎng)DDR讀寫(xiě)要覆蓋完整命令序列通常仿真時(shí)長(zhǎng)設(shè)置在幾十到數(shù)百納秒。太短激勵(lì)碼型看不出眼圖完整邊界太長(zhǎng)仿真資源開(kāi)銷(xiāo)大收益下降。掃描配置Speed 2000支持參數(shù)掃描可以自動(dòng)切換ODT阻值、驅(qū)動(dòng)強(qiáng)度、走線延遲補(bǔ)償值重復(fù)跑仿真把結(jié)果匯總成對(duì)比表格。做優(yōu)化之前強(qiáng)烈建議先跑一輪掃描看清楚哪個(gè)參數(shù)影響最大再動(dòng)手改設(shè)計(jì)。輸出結(jié)果可以輸出各個(gè)探測(cè)點(diǎn)的時(shí)域波形、差分眼圖、時(shí)序裕量表setup/hold margin清單。仿真跑完直接看兩樣?xùn)|西眼圖各lane的DQS/DQ眼圖觀察眼高、眼寬以及不同lane之間眼圖的對(duì)稱(chēng)性。眼圖打開(kāi)不開(kāi)優(yōu)先排查反射、端接、串?dāng)_。時(shí)序裕量表這是最終裁決數(shù)據(jù)每個(gè)信號(hào)組的setup margin和hold margin都列出來(lái)以ps為單位。哪個(gè)信號(hào)的margin為負(fù)哪個(gè)就是設(shè)計(jì)的短板。我見(jiàn)過(guò)不少朋友仿真跑完只看波形不看報(bào)表這樣不夠嚴(yán)謹(jǐn)。波形上的雜散噪聲可能讓你誤判報(bào)表才是標(biāo)準(zhǔn)協(xié)議定義的判定結(jié)果。你可以把兩個(gè)對(duì)照看定位真正的問(wèn)題線網(wǎng)。4. 關(guān)鍵參數(shù)優(yōu)化與實(shí)戰(zhàn)技巧很多工程做完第一輪仿真出來(lái)會(huì)有幾條線的時(shí)序裕量不足或者眼圖不夠干凈。這時(shí)候不是急著去板子上加電阻而是要通過(guò)合理的參數(shù)調(diào)整把設(shè)計(jì)潛力挖掘出來(lái)。4.1 ODT配置與驅(qū)動(dòng)強(qiáng)度調(diào)試DDR4里ODT是管腳可配置的引腳On-Die Termination可以在不同模式下接RZQ/2約120歐、RZQ/3約80歐、RZQ/6約40歐等阻值。ODT的作用是吸收反射、調(diào)整信號(hào)參考電平。調(diào)試步驟如下跑完基線仿真后保持其他條件不變把某一條最差lane的ODT配置做掃描。觀察眼高、眼寬、單脈沖過(guò)沖三個(gè)指標(biāo)隨ODT變化的趨勢(shì)。一般情況下ODT值偏大會(huì)導(dǎo)致過(guò)沖增大、眼高受限偏小會(huì)導(dǎo)致邊沿變緩、眼寬受限。同時(shí)要注意ODT的動(dòng)態(tài)切換寫(xiě)操作結(jié)束時(shí)是否及時(shí)切換到合適端接狀態(tài)。驅(qū)動(dòng)強(qiáng)度Output Driver Strength同理。驅(qū)動(dòng)強(qiáng)度太大信號(hào)過(guò)沖嚴(yán)重對(duì)周?chē)鷏ane的串?dāng)_也大驅(qū)動(dòng)強(qiáng)度太小邊沿變慢難以滿足高速時(shí)序。建議對(duì)驅(qū)動(dòng)強(qiáng)度和ODT做聯(lián)合掃描找出二維最優(yōu)組合而不是單獨(dú)調(diào)一項(xiàng)。Speed 2000掃描功能里能直接定義二維掃描矩陣這個(gè)功能利用率很高基本每個(gè)項(xiàng)目都用得上。4.2 地址線等長(zhǎng)設(shè)置與拓?fù)鋬?yōu)化對(duì)時(shí)序的影響熱搜詞里有“ad18 ddr地址線等長(zhǎng)設(shè)置”說(shuō)明等長(zhǎng)問(wèn)題是大家都很關(guān)心的操作點(diǎn)。等長(zhǎng)的本質(zhì)目的是讓一組信號(hào)的傳播時(shí)延差被控制在一個(gè)許可范圍內(nèi)從而滿足時(shí)序關(guān)系。DDR仿真里等長(zhǎng)設(shè)置的效果能直接量化成時(shí)序數(shù)據(jù)比肉眼看著走線長(zhǎng)度整齊更重要。在DDR3/DDR4設(shè)計(jì)中DQ-DQS組內(nèi)等長(zhǎng)數(shù)據(jù)lane內(nèi)DQ和DQS的長(zhǎng)度差建議控制在±2mm以?xún)?nèi)高速率時(shí)更需要嚴(yán)格到±1mm以?xún)?nèi)。仿真實(shí)操中直接看lane內(nèi)DQ和DQS相對(duì)時(shí)延差tDQSS超過(guò)標(biāo)準(zhǔn)閾值就有風(fēng)險(xiǎn)。地址命令組等長(zhǎng)Fly-by拓?fù)渲械刂肪€在每個(gè)顆粒處有分支產(chǎn)生的stub長(zhǎng)度不同末端顆粒和近端顆粒的地址信號(hào)到達(dá)時(shí)間不同。要結(jié)合拓?fù)溟L(zhǎng)度和電氣延遲計(jì)算判斷是否滿足地址命令建立保持時(shí)間要求。等長(zhǎng)計(jì)算要包含打孔和過(guò)孔的長(zhǎng)度走線長(zhǎng)度只是物理長(zhǎng)度實(shí)際電氣時(shí)延差還包含過(guò)孔、封裝引腳的長(zhǎng)度。仿真軟件中一般可以在網(wǎng)絡(luò)屬性里看到“Pin Delay”和“電氣長(zhǎng)度”一定要按電氣長(zhǎng)度來(lái)核對(duì)等長(zhǎng)約束不能只看Layout里的物理走線長(zhǎng)度。還有一點(diǎn)等長(zhǎng)不是越長(zhǎng)越好。很多工程師以為“繞線繞成一樣長(zhǎng)”就算完成但繞線本身增加了過(guò)孔、stub和耦合區(qū)域可能引入不必要的反射和串?dāng)_。仿真時(shí)跑一把繞線前后的對(duì)比經(jīng)常發(fā)現(xiàn)繞得太多反而信號(hào)質(zhì)量下降了。因此繞線時(shí)要保留足夠的繞線間距3W以上減少耦合串?dāng)_。4.3 涉板優(yōu)化過(guò)孔、反焊盤(pán)、背鉆策略板級(jí)物理結(jié)構(gòu)對(duì)DDR時(shí)域波形影響也很大尤其高速率DDR4/DDR5過(guò)孔stubDDR4跑2400MT/s以上時(shí)過(guò)孔stub過(guò)大會(huì)產(chǎn)生嚴(yán)重的阻抗不連續(xù)表現(xiàn)為眼圖中心有凸起、眼寬縮小。處理方法一般有背鉆backdrill、換到更高層走線減少過(guò)孔長(zhǎng)度。反焊盤(pán)增大反焊盤(pán)尺寸可以降低過(guò)孔寄生電容改善阻抗連續(xù)性。如果DDR走線經(jīng)過(guò)8層板過(guò)孔反焊盤(pán)直徑建議比焊盤(pán)大0.3mm以上前提是電源完整性允許。走線換層DDR信號(hào)建議盡可能少換層同一組信號(hào)盡量同層走線換層時(shí)要有回流地過(guò)孔配合?;亓鬟^(guò)孔間距太遠(yuǎn)會(huì)增大回流環(huán)路面積導(dǎo)致動(dòng)態(tài)壓降增大。這些優(yōu)化動(dòng)作在仿真中可以直接做DOE試驗(yàn)設(shè)計(jì)驗(yàn)證在原工程上改疊層參數(shù)或背鉆設(shè)置對(duì)比仿真眼圖前后變化。這種“假設(shè)-驗(yàn)證”的循環(huán)是設(shè)計(jì)方法學(xué)里高效的工作方式比盲目改設(shè)計(jì)可靠得多。4.4 電源完整性與DDR時(shí)域仿真的聯(lián)動(dòng)DDR信號(hào)質(zhì)量很容易被電源噪聲干擾。高速翻轉(zhuǎn)時(shí)IO電源VDDQ瞬間抽電流如果電源網(wǎng)絡(luò)阻抗過(guò)高會(huì)造成VDDQ紋波直接反映在信號(hào)眼圖里。Speed 2000既可以做純信號(hào)仿真也可以做信號(hào)-電源協(xié)同仿真。實(shí)操思路是先用PowerDC跑一下VDDQ和VTT的直流壓降確認(rèn)靜態(tài)IR-Drop在允許范圍通常VDDQ需要保持在標(biāo)稱(chēng)值正負(fù)3%~5%以?xún)?nèi)。再在Speed 2000里加入去耦電容模型包括寄生RLGC打開(kāi)電源完整性與信號(hào)互連的聯(lián)合仿真。對(duì)比有無(wú)電源噪聲時(shí)的DDR時(shí)序余量。往往會(huì)發(fā)現(xiàn)某些margin比較小的lane在單獨(dú)信號(hào)仿真時(shí)通過(guò)但聯(lián)合電源仿真后就不夠了。這個(gè)提前量很有價(jià)值。這類(lèi)聯(lián)合仿真的缺點(diǎn)是耗時(shí)長(zhǎng)。所以我一般先跑純信號(hào)仿真篩選出問(wèn)題線網(wǎng)再對(duì)問(wèn)題線網(wǎng)單獨(dú)加電源噪聲條件做驗(yàn)證兼顧效率與準(zhǔn)確。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄做DDR仿真做得多了碰到的坑基本也就是那么幾類(lèi)。我把自己實(shí)操中記錄的典型問(wèn)題整理成表方便你對(duì)照查找。常見(jiàn)現(xiàn)象可能原因排查思路與解決動(dòng)作眼圖完全閉合波形異?;靵y激勵(lì)配置有誤控制器信號(hào)時(shí)序和協(xié)議對(duì)不上檢查DDR協(xié)議版本選擇、虛擬控制器配置是否正確眼圖有大量過(guò)沖ODT阻值太小驅(qū)動(dòng)強(qiáng)度過(guò)大掃描ODT檔位和驅(qū)動(dòng)強(qiáng)度組合選擇最優(yōu)配置信號(hào)上升沿異常緩慢走線阻抗偏低或過(guò)長(zhǎng)驅(qū)動(dòng)能力不足檢查走線阻抗是否在目標(biāo)值范圍內(nèi)考慮增大驅(qū)動(dòng)強(qiáng)度DQ和DQS相對(duì)偏移大導(dǎo)致時(shí)序不通過(guò)組內(nèi)等長(zhǎng)未嚴(yán)格對(duì)齊在Layout中檢查DQ-DQS電氣長(zhǎng)度重新繞線對(duì)齊地址線在遠(yuǎn)端顆粒信號(hào)質(zhì)量差Fly-by拓?fù)浞种н^(guò)長(zhǎng)或末端端接缺失檢查遠(yuǎn)端分支長(zhǎng)度確保末端有正確端接VTT上拉結(jié)果有直流偏移波形整體抬升端接電阻網(wǎng)絡(luò)識(shí)別錯(cuò)誤或漏統(tǒng)計(jì)確認(rèn)所有端接電阻被正確納入總線仿真模型仿真運(yùn)行時(shí)間過(guò)長(zhǎng)甚至跑不完網(wǎng)絡(luò)數(shù)量多激勵(lì)碼型過(guò)長(zhǎng)仿真步長(zhǎng)太小精簡(jiǎn)到關(guān)鍵網(wǎng)絡(luò)組仿真減少無(wú)關(guān)注入模型增大步長(zhǎng)VTT電源噪聲過(guò)大導(dǎo)致信號(hào)模糊電源網(wǎng)絡(luò)阻抗過(guò)高去耦電容不充分增加小封裝MLCC靠近端接電阻擺放優(yōu)化電源平面分割不同頻率/溫度下眼圖變化劇烈板材參數(shù)未考慮頻率特性粗糙度未設(shè)置核對(duì)疊層材料隨頻率的Dk/Df曲線加入銅箔粗糙度5.1 排查思路的優(yōu)先級(jí)仿真結(jié)果出問(wèn)題時(shí)第一個(gè)應(yīng)該排除的就是模型和激勵(lì)配置問(wèn)題因?yàn)樗鼈冊(cè)斐傻腻e(cuò)誤往往最“離譜”——比如眼圖整個(gè)找不到、信號(hào)只有一個(gè)高電平?jīng)]有翻轉(zhuǎn)。確認(rèn)無(wú)誤后再做設(shè)計(jì)尺寸和驅(qū)動(dòng)配置的調(diào)整。第二個(gè)高頻坑是疊層參數(shù)不準(zhǔn)確尤其是板材Dk和Df沒(méi)有設(shè)置到實(shí)際值。FR4在幾十個(gè)GHz帶寬和高低溫下Dk變化范圍很大如果仿真用的Dk比實(shí)際情況低了0.2前面算的阻抗全部偏差導(dǎo)致反射系數(shù)增加、眼圖劣化。所以排查時(shí)先看疊層再改設(shè)計(jì)。第三個(gè)常被忽視的坑是仿真步長(zhǎng)和算法選擇。Speed 2000求解器中仿真的“最大時(shí)間步長(zhǎng)”只會(huì)影響波形分辨率但“允許的最大頻率”設(shè)置會(huì)直接影響FDTD求解精度。頻率上限設(shè)太低高頻分量丟失過(guò)沖看不出來(lái)設(shè)太高仿真時(shí)間指數(shù)級(jí)增加。我的經(jīng)驗(yàn)是頻率上限設(shè)置為信號(hào)基頻的7~10倍就夠用了DDR4-2400的信號(hào)基頻約1.2GHz上限拉到10GHz左右既能看到三次諧波以上的失真也不至于跑一天。5.2 兩個(gè)非常實(shí)用的仿真提速技巧第一個(gè)技巧是拆組跑。DDR總線幾十上百條線全部塞在一個(gè)工程里跑資源開(kāi)銷(xiāo)巨大。實(shí)際工程中地址線和數(shù)據(jù)線行為差異比較大但同一組比如一條lane內(nèi)的信號(hào)互相耦合較強(qiáng)。我的做法是第一輪仿真只跑最關(guān)鍵的幾組——兩條DQS lane加一條地址組第二輪再擴(kuò)展。如果你做的是設(shè)計(jì)迭代要快速看效果這種拆組的方式效率翻倍。第二個(gè)技巧是用好Simulation Template。新建工程后先把疊層、激勵(lì)配置、DDR總線分組、輸出報(bào)告格式全部設(shè)好保存為模板文件。后續(xù)迭代新版本設(shè)計(jì)時(shí)直接從模板出發(fā)一分鐘就能進(jìn)入仿真狀態(tài)不用每次重新配置。注意每次迭代后疊層的更新要及時(shí)同步到模板否則你后面跑的可能是舊疊層。5.3 與實(shí)測(cè)對(duì)標(biāo)的經(jīng)驗(yàn)仿真結(jié)果最后一定要和實(shí)測(cè)對(duì)標(biāo)不然無(wú)從驗(yàn)證模型質(zhì)不準(zhǔn)確。實(shí)測(cè)建議在常溫下用示波器抓DQS和DQ的寫(xiě)操作波形找到眼圖最差的那一個(gè)bit記錄下來(lái)。接著用同樣條件、同樣觀察點(diǎn)位置導(dǎo)出一條仿真波形對(duì)比兩者的上升沿、過(guò)沖、下沖和眼圖睜開(kāi)位置。對(duì)不上的時(shí)候優(yōu)先懷疑三個(gè)維度探測(cè)點(diǎn)位置不一致仿真里板級(jí)測(cè)試點(diǎn)要和示波器探頭物理位置一致疊層介質(zhì)厚度、Dk具體值和板廠實(shí)際生產(chǎn)的偏差I(lǐng)BIS模型不同corner下的驅(qū)動(dòng)能力差異。只要這三個(gè)維度對(duì)齊了信號(hào)完整性的仿真和實(shí)測(cè)吻合度一般都不差DDR這條線的可信度就建立起來(lái)了。有了可信的模型后面再做什么優(yōu)化迭代你心里才有底。6. 不同設(shè)計(jì)場(chǎng)景下的仿真策略調(diào)整通用流程講完了再說(shuō)說(shuō)我在不同項(xiàng)目里摸索出來(lái)的差異化策略。DDR仿真不是一套流程打天下主板、嵌入式板卡、FPGA系統(tǒng)各有各的側(cè)重點(diǎn)。6.1 基于FPGA的DDR仿真要點(diǎn)現(xiàn)在很多項(xiàng)目用Zynq、Kintex、Cyclone之類(lèi)帶硬核DDR控制器的FPGA這種場(chǎng)景下仿真面臨最大的問(wèn)題是控制器的IBIS模型顆粒度。FPGA廠商提供的IO buffer模型往往支持很多種接口標(biāo)準(zhǔn)但DDR控制器出來(lái)到物理引腳這一段封裝寄生參數(shù)甚至Board Design KitBDK的支持程度各不相同。我的經(jīng)驗(yàn)是FPGA項(xiàng)目仿真一定要向原廠要“Board Design Files”或者“Simulation Kit”。Xilinx官方提供了DDR4仿真參考設(shè)計(jì)里面包含了完整的IBIS模型、仿真參考拓?fù)?、時(shí)序參數(shù)直接用這套東西在Speed 2000里跑比自己從芯片手冊(cè)摳參數(shù)靠譜太多。另外FPGA的DDR引腳分配往往受Bank位置約束地址線和DQ線的物理location可能離得很遠(yuǎn)這會(huì)讓繞線和等長(zhǎng)更困難仿真里更要重點(diǎn)觀察組內(nèi)時(shí)延差。6.2 SoC處理器系統(tǒng)的DDR仿真策略如果做的是帶CPU的整板系統(tǒng)比如RK、全志、NXP之類(lèi)特點(diǎn)是顆??梢赃B接到多通道且通道間走線長(zhǎng)拓?fù)湫螒B(tài)復(fù)雜。這種項(xiàng)目里地址命令線用Fly-by的居多數(shù)據(jù)線是點(diǎn)對(duì)點(diǎn)但散熱片、屏蔽罩、結(jié)構(gòu)件離走線很近時(shí)金屬件對(duì)阻抗和損耗的影響很大。在仿真策略上建議把“多通道之間的串?dāng)_”單獨(dú)建模驗(yàn)證。多通道DDR交錯(cuò)布局時(shí)相鄰?fù)ǖ赖臄?shù)據(jù)線可能并行走一段長(zhǎng)距離由于同步翻轉(zhuǎn)噪聲SSN的存在某個(gè)通道跳變時(shí)能量耦合到相鄰?fù)ǖ?。Speed 2000在仿真中可以看到每條lane的邊沿干擾情況如果發(fā)現(xiàn)某個(gè)lane的誤碼率風(fēng)險(xiǎn)高就要考慮拉開(kāi)間距或加屏蔽地線。6.3 低功耗與續(xù)航優(yōu)先產(chǎn)品的DDR仿真低功耗產(chǎn)品對(duì)DDR的IO功耗非常敏感一般用較低驅(qū)動(dòng)強(qiáng)度和優(yōu)化ODT來(lái)節(jié)省功耗但會(huì)犧牲部分信號(hào)質(zhì)量。這時(shí)仿真要做的是功耗與信號(hào)質(zhì)量的平衡。操作上把驅(qū)動(dòng)強(qiáng)度、ODT、工作頻率做多組組合分別跑仿真并記錄功耗評(píng)估Speed 2000有功耗分析功能最后選一組功耗在預(yù)算內(nèi)、信號(hào)余量合格的配置。這種產(chǎn)品還常遇到低電壓DDR如1.2V VDDQ的DDR4L場(chǎng)景Vref和噪聲容限更小仿真時(shí)對(duì)電源噪聲的控制要求更高要更加留意VDDQ紋波對(duì)眼圖的影響。7. 從一次實(shí)戰(zhàn)案例看完整流程光講原則和方法可能還是有點(diǎn)抽象我挑一個(gè)近期的案例把從開(kāi)始到結(jié)論的完整鏈路串一遍你更能理解每一步的取舍。項(xiàng)目背景是一塊8層板主控是四核ARM SoC掛1片DDR4 x16速率2400MT/s。板子投板前客戶(hù)要求做DDR信號(hào)完整性和時(shí)序仿真。我拿到的文件包括Allegro版圖、主控和顆粒的IBIS模型DDR4、疊層表8層板厚1.6mmFR4材料表層1oz內(nèi)層0.5oz阻抗目標(biāo)單端40歐、差分80歐。先過(guò)疊層校正發(fā)現(xiàn)疊層表里表層銅厚給的是成品銅厚1oz但半固化片和芯板的Dk/Df數(shù)據(jù)沒(méi)給我按材料品牌默認(rèn)值補(bǔ)上了同時(shí)在疊層編輯器里增加了銅箔粗糙度0.6um并單獨(dú)跑了一下走線阻抗微調(diào)。導(dǎo)入后DDR Awareness自動(dòng)識(shí)別出全部DQS/DQ/DM/AC網(wǎng)絡(luò)大概80多條線自動(dòng)分成16個(gè)lane和1組AC。檢查分組沒(méi)問(wèn)題然后配置激勵(lì)DDR4-2400寫(xiě)操作為主PRBS9碼型VDDQ1.2VVref0.6V按標(biāo)準(zhǔn)配置訓(xùn)練模式全開(kāi)。第一次仿真默認(rèn)參數(shù)跑完眼圖總體能看但DQ4 lane的寫(xiě)眼圖明顯比其他lane小一圈setup margin只有三四十皮秒hold margin更吃緊只有二十皮秒左右對(duì)于量產(chǎn)設(shè)計(jì)來(lái)說(shuō)有點(diǎn)懸。排查思路走起來(lái)先看DQ4這條lane的走線結(jié)果發(fā)現(xiàn)DQ4在布局中走線繞了一大圈比同組DQS長(zhǎng)了差不多3mm組內(nèi)等長(zhǎng)沒(méi)做好。然后我用掃描功能掃了這條lane的ODT配置從RZQ/6切到RZQ/3眼寬增加了但是過(guò)沖增大RZQ/7下過(guò)沖改善但眼寬變小。最終選了RZQ/3配合驅(qū)動(dòng)強(qiáng)度稍微降檔再結(jié)合走線層調(diào)整把DQ4繞線長(zhǎng)度剪短了約2mm最終仿真出來(lái)的setup/hold margin都拉到了80ps以上眼高也正常了。整個(gè)過(guò)程從拿到設(shè)計(jì)文件到出報(bào)告一天時(shí)間完成中間做了一次設(shè)計(jì)修改建議板廠改線后回給我迭代仿真。如果當(dāng)時(shí)沒(méi)有仿真板子投出去回來(lái)發(fā)現(xiàn)DQ4不穩(wěn)定找問(wèn)題和改板的時(shí)間成本就不是一天能解決的了。這個(gè)案例里最實(shí)用的一個(gè)決策就是先看裕量報(bào)表再?zèng)Q定要不要?jiǎng)釉O(shè)計(jì)。如果沒(méi)有仿真數(shù)據(jù)你單憑肉眼在Layout上看不出DQ4比別的lane差在哪而有了裕量數(shù)據(jù)就能精準(zhǔn)定位到那條線再去看它的走線效率就完全不一樣。