你的位置:首頁 > 測試測量 > 正文

可盡早捕獲缺陷的DDR仿真策略,讓缺陷“無處遁形”

發(fā)布時間:2015-11-16 來源:EDN 責(zé)任編輯:wenwei

【導(dǎo)讀】DDR驗證是任何SoC設(shè)計過程中最關(guān)鍵也是最復(fù)雜的任務(wù)之一,因為它牽涉到位于待測器件內(nèi)的控制器和位于待測器件外的DDR存儲器。一個DDR系統(tǒng)由在一起工作的控制器、I/O、封裝、插座、電源、時鐘和外部存儲器組成。在數(shù)字驗證中,并不是所有這些元件都能驗證到,但主要是控制器、PHY、I/O和存儲器。由于在數(shù)字仿真中無法模擬所有元件的效應(yīng),驗證變得更加復(fù)雜,但門級仿真(GLS)給我們提供了一個很好的基礎(chǔ)架構(gòu),來報告主要從時序角度看可能影響控制器-PHY-I/O路徑的設(shè)計問題。

在門級仿真中驗證DDR時會遇到許多與時序有關(guān)的問題,從而導(dǎo)致驗證團隊與靜態(tài)時序分析(STA)團隊之間發(fā)生大量迭代工作。如果有徹底調(diào)試過的門級仿真環(huán)境,人們對運行于寄存器傳輸級(RTL)之上的DDR協(xié)議進行靜態(tài)時序分析將會充滿信心,并且會專注于解決數(shù)字和時序方面的問題。本文整理了DDR門級仿真驗證過程中由于RTL上的時序可見性而常常報告的各種問題,并通過一些例子強調(diào)了門級仿真環(huán)境中實現(xiàn)DDR快速有效收斂的重要調(diào)試標準。
 
借助多級IO處理慣性延時問題
 
RTL環(huán)境沒有任何時序意識,因此在設(shè)計中沒有慣性/傳播延時,但當我們轉(zhuǎn)移到門級仿真(GLS)設(shè)置時,就必須有效地考慮慣性/傳播延時了,以便模擬實際的硅片行為,同時不會使事情變得太過悲觀。在邏輯單元輸入端出現(xiàn)的持續(xù)時間小于慣性延時的脈沖,將不會導(dǎo)致該邏輯單元的輸出端發(fā)生任何的轉(zhuǎn)換,邏輯門表現(xiàn)出的這種現(xiàn)象被稱為慣性延時傳播。業(yè)界標準的門級仿真工具通常將傳播延時作為該邏輯門的慣性延時。仿真工具采用的這種建模方法是一種非常好的實際硅片行為提取的方法,事實上它確實很好地模擬了信號通過單級邏輯門的傳播。但這種行為在IO這樣的復(fù)雜門中并不是想要的,因為IO是多級結(jié)構(gòu),一旦信號通過第一級,就能保證它成功地通過IO單元傳輸。因為仿真工具不理解邏輯單元的這種內(nèi)部結(jié)構(gòu),所以即使是多級IO最終它也會抑制這種脈沖,如圖1所示。
 
圖1:默認的門級仿真(GLS)行為是抑制小于門延時的所有轉(zhuǎn)換。
圖1:默認的門級仿真(GLS)行為是抑制小于門延時的所有轉(zhuǎn)換。
 
解決這個問題現(xiàn)在有兩種解決方案。
 
第一種解決方案是人工更新標準延時格式(SDF)文件,并將延時更新到一些較小的值。在信號傳播正常的情況這種方法非常管用,但當新的延時不能代表實際延時時,這種方法并不合適,并可能會抑制其它潛在的功能性問題。
 
工業(yè)標準的GLS仿真器確實有這樣的功能/開關(guān),即允許/禁止特定寬度的脈沖通過單元。例如當使用“拒絕與誤差(Reject&Error)設(shè)置”時,將傳播寬度大于“誤差設(shè)置”值的所有信號。同時,這種仿真器在遇到寬度處于“拒絕與誤差設(shè)置”之間的信號時將傳播未知值,而且它會完全消除寬度小于“拒絕設(shè)置”的信號。下表1給出了一個例子。
 
表1: Pulse_e/Pulse_r行為
表1: Pulse_e/Pulse_r行為
 
根據(jù)時序小組所做的平衡結(jié)果進行時鐘選擇
 
在RTL設(shè)置中,由特定源驅(qū)動的時鐘將同時到達所有節(jié)點,但在使用GLS設(shè)置時,就要考慮時鐘偏移了,它可能造成時序問題,即源自相同源的兩個時鐘路徑可能產(chǎn)生偏移,以至于DDR數(shù)據(jù)/時鐘路徑并不是對所有可能組合邏輯來說都是平衡的。在DDR設(shè)計中輸入時鐘是最重要的參數(shù),因為所有其它信號都與輸入時鐘周期和占空比有關(guān)。也有這樣的情況,即可以將多個時鐘源用作控制器的輸入時鐘。一般來說,來自任何一個時鐘源的路徑只要是平衡的就可以推薦用作DDR輸入時鐘,不過對于傳播到外部DDR存儲器的DDR_CLK、DDR_DQS等信號來說,在占空比、高電平時間、低電平時間等方面有很嚴格的要求,必須滿足DDR正確工作所需的條件。在寫入側(cè)與占空比要求相關(guān)的大多數(shù)故障可能是DDR控制器輸入端時鐘的占空比不正確引起的。因此為了避免不必要的調(diào)試工作,必須確保我們使用了時序要求得到滿足的正確時鐘源。下面提到了同樣一個例子,其中捕獲到了存儲器輸入端的DQS占空比數(shù)據(jù),而且有兩個不同的時鐘源被選為DDR控制器時鐘。
 
DDR_CLK 頻率:400MHz(約2.5ns)
 
55%×2.524ns = 1.388200ns
 
45%×2.524ns = 1.13580ns
 
 
表2:位于系統(tǒng)中不同層次的時鐘占空比數(shù)據(jù)。
 
表2:位于系統(tǒng)中不同層次的時鐘占空比數(shù)據(jù)。
 
表2:位于系統(tǒng)中不同層次的時鐘占空比數(shù)據(jù)。
 
焊盤上的負載用于轉(zhuǎn)儲SDF
 
I/O在具有時序意識的門級仿真(GLS)DDR驗證中扮演著非常重要的角色。當滿足直到焊盤輸入端的時序要求時,就會從用于焊盤的許可文件提供的信息中轉(zhuǎn)儲出I/O延時數(shù)據(jù)。也有這樣的時候,即從控制器到焊盤輸入端的路徑得到了正確的平衡,但仍能見到故障發(fā)生。這可能是因為位于主控制器與外部DDR存儲器之間的路徑中的I/O引入了不正確的延時。這些延時實際上取決于施加到焊盤的負載。因此在產(chǎn)生SDF文件時,需要注意板子上必須應(yīng)用了正確且實際的負載。做不到這一點可能在SDF文件中產(chǎn)生相當悲觀的時序片段,并當在GLS仿真中進行反標時可能產(chǎn)生偽故障。這種問題很難調(diào)試,相當耗時耗力。
 
表3:悲觀負載與實際負載比較。
表3:悲觀負載與實際負載比較。
 
[page]
輸出緩沖使能(OBE)時序要求
 
大多數(shù)DDR控制器的設(shè)計是這樣的,它們?yōu)榱薉Q(數(shù)據(jù))和DQS(選通)焊盤本身而驅(qū)動OBE(輸出緩沖使能),因為相同的焊盤可以用于寫/讀。由于各種各樣的原因,OBE時序在服務(wù)路徑時一般會被忽略,但在DDR場合這樣做將導(dǎo)致災(zāi)難性結(jié)果。舉例來說,在DDR協(xié)議讀/寫過程中,在READ/WRITE命令之后、在DQS第一個上升沿之前的DQS上的低電平(LOW)狀態(tài)被認為是讀/寫先導(dǎo)碼;同樣,最后一個數(shù)據(jù)入單元之后在DQS上的低電平狀態(tài)被認為是讀/寫后導(dǎo)碼。前導(dǎo)部分為接收器件提供了一個時序窗口,用于激活其數(shù)據(jù)捕獲電路,同時在選通信號上呈現(xiàn)一個已知/有效的電平,從而避免錯誤觸發(fā)捕獲電路。在前導(dǎo)部分過后的數(shù)據(jù)串發(fā)生期間選通信號將以與時鐘信號相同的頻率觸發(fā)。在寫入操作過程中是有特定的時序要求的,對DDR2來說必須滿足比如0.35Ck的最小前導(dǎo)寬度,DDR3是0.9Ck。同樣,對寫后導(dǎo)時序也有要求。DDR2是0.4Ck至0.6Ck,DDR3最小是0.3Ck。如果在DDR GLS時遇到這種最常見的問題,這些參數(shù)可能會發(fā)生違例。
 
圖2:DDR的前導(dǎo)和后導(dǎo)。
圖2:DDR的前導(dǎo)和后導(dǎo)。
 
DDR焊盤的壓擺率設(shè)置
 
焊盤以不同的壓擺率進行表征,壓擺率決定了單位時間內(nèi)輸出電壓的變化率。這些設(shè)置在RTL仿真中是沒有任何作用的,因為RTL仿真中不關(guān)心延時。但在GLS仿真中要考慮延時因素,因此為了避免不必要的調(diào)試工作,正確的設(shè)置非常重要。系統(tǒng)中針對不同焊盤的時序要求一般是要滿足最大壓擺率,但根據(jù)不同的參數(shù)有不同的要求。一個這樣的例子是,像DDR等協(xié)議如果知道了最大壓擺率,就能發(fā)現(xiàn)反射和干擾問題。這個參數(shù)在不同的設(shè)置情況下焊盤延時會有很大的變化,具體取決于最終在實際電路板和測試儀上使用的負載和電阻值。我們必須確保在設(shè)置了正確的焊盤參數(shù)下開展仿真,以便消除期望結(jié)果和觀察結(jié)果之間的偏差。
 
表4提供了針對某個SoC的不同接口的推薦SRE設(shè)置值。
 
表4:針對SoC不同接口的推薦壓擺率設(shè)置。
表4:針對SoC不同接口的推薦壓擺率設(shè)置。
 
I/O中的表征問題
 
這方面的問題同樣只在門級仿真(GLS)中可見,在RTL中是不會遇到這種問題的。如果從一開始就得到保證,就可以確保能夠最大程度地減少驗證和靜態(tài)時序分析之間的反復(fù)調(diào)試和反饋。就背景而言,每個單元都有一個與上升沿和下降沿有關(guān)的延時。任何單元的延時都直接取自于擁有PVT間延時信息的許可文件。針對單元的這些上升和下降時間每個都不同。但DDR等協(xié)議對占空比、高電平時間、低電平時間等都有嚴格的要求,必要滿足這些要求才能確保協(xié)議正確工作。設(shè)計中常用上升和下降時間幾乎相同的對稱緩沖器和單元,確保CLK、DQS等關(guān)鍵信號路徑的平衡。但I/O的上升和下降時間也可能因為表征問題而存在很大差異,這種情況下將破壞占空比,進而在存儲器端導(dǎo)致違例。
 
圖3:上升下降延時差異導(dǎo)致占空比要求的違例。
圖3:上升下降延時差異導(dǎo)致占空比要求的違例。
 
SDF延時近似是高速門級仿真驗證的關(guān)鍵
 
測試平臺有一個時間刻度用于定義設(shè)計仿真時的事件顆粒度。在時間刻度語句中,第一個值是時間單位,第二個值是仿真的精度。對于高速電路來說定義時間刻度的精度必須非常謹慎。一般來說,測試平臺中的時間刻度定義為1ns/10ps,這意味著所有延時都將被近似為最接近的10ps。但在DDR等時序非常重要的高速協(xié)議中,裕量可能非常小(在ps數(shù)量級)。舉例來說,如果數(shù)據(jù)路徑中有10個緩沖器,每個的延時為26ps,那么如果時間刻度是1ns/10ps,所有這些延時都將被近似為30ps,進而在門級仿真中將引入40ps的不精確性。這將在門級仿真中導(dǎo)致錯誤的時序違例。有鑒于此,仿真環(huán)境必須更新到合適的時間刻度才能避免這樣的問題發(fā)生。
 
應(yīng)該解決來自存儲器的錯誤
 
一般來說,仿真中可以使用不同供應(yīng)商提供的模型。這些模型可以是Verilog模型或Denali模型。這些模型可能來自美光、Spansion、Macronix等存儲器供應(yīng)商。針對仿真目的最好選用Denali模型,因為這些模型對所有時序參數(shù)和協(xié)議都做了非常嚴格的檢查,而且還包括CK/DQS/DQ之間的抖動和偏移,因此非常接近于電路板中使用的實際存儲器。當在存儲器接口處違反任何時序規(guī)格時,模型將標記上錯誤信息。RTL仿真中是沒有延時的,如果時序參數(shù)得到了正確配置,那么正常情況下不會遇到這些錯誤。但在GLS仿真中需要考慮延時因素,因此很可能發(fā)生某些參數(shù)違例,錯誤信息被拋出來。對這些錯誤必須仔細審查,并加以解決。正常情況下,當信號由控制器給出并到達存儲器時,在寫周期中會遇到這些問題。在讀周期中,信號是模型自身產(chǎn)生的并到達控制器。Denali存儲器模型有許多開關(guān)用于控制各種參數(shù),如允許的差分偏移、將存儲器初始化到某個值、禁止來自存儲器的錯誤消息等。必須注意的是,沒有哪個開關(guān)可以忽略,這樣做很可能屏蔽重要的錯誤信息。
 
本文小結(jié)
 
從上述討論的各個要點看,很明顯門級仿真(GLS)有助于發(fā)現(xiàn)在RTL級無法預(yù)料的設(shè)計問題,并在做成硅片前得到解決。如果我們一味地從事重復(fù)勞動,那么在門級仿真中調(diào)試DDR可能是一個極具挑戰(zhàn)性的任務(wù),但通過經(jīng)驗并遵循基本的調(diào)試規(guī)則可以使工作順利開展。這些問題與門級仿真其它協(xié)議時常常遇到的問題不同,也更有技巧性,因此經(jīng)常耗費更長的調(diào)試時間。從一開始就關(guān)注這些關(guān)鍵的調(diào)試參數(shù)可以在門級仿真中實現(xiàn)高效快速的DDR調(diào)試,并有助于在更早的SoC設(shè)計階段發(fā)現(xiàn)隱藏的設(shè)計問題。


推薦閱讀:
 
避免無用功!低EMI電路設(shè)計和預(yù)兼容檢測的重要性
四招幫你輕松搞定電磁兼容測試故障!
以智能手機為例,教你如何搞定靜電擊穿

 
要采購焊盤么,點這里了解一下價格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉