Path: EDNTaiwan電子技術設計 >> 設計中心 >> 測試與量測 >> 能在早期擷取設計缺陷的DDR模擬策略
測試與量測 Share print

能在早期擷取設計缺陷的DDR模擬策略

2015年10月16日  | Ankit Khandelwal、Neha Srivastava

Share this page with your friends

DDR驗證是任何SoC設計過程中最關鍵也是最複雜的任務之一,因為它牽涉到位於待測物(DUT)之內的控制器,和位於待測物之外的DDR記憶體。一個DDR系統由共同運作的控制器、I/O、封裝、插座、電源、時脈和外部記憶體組成;在數位驗證中,並不能驗證到所有這些元件,主要是控制器、PHY、I/O和記憶體。由於在數位模擬中無法模擬所有元件的效應,因此驗證變得更加複雜,但閘級模擬(GLS)提供了一個很好的基礎架構,它能夠報告主要從時序角度看可能影響控制器PHY-I/O路徑的設計問題。


在閘級模擬中驗證DDR時會遇到許多與時序有關的問題,從而導致驗證與靜態時序分析(STA)團隊之間發生大量重複工作。擁有徹底除錯完成的GLS環境可以讓人們對執行於暫存器傳輸級(RTL)之上的DDR協定進行靜態時序分析充滿信心,並專注於解決數位和時序方面的問題。本文整理了DDR GLS驗證過程中由於RTL上的時序可見性而常常出現的各種問題,並透過一些案例強調了GLS環境中實現DDR快速、高效率收斂的重要除錯標準。


以多級IO處理慣性延遲問題

RTL環境沒有任何時序意識,因此在設計中沒有慣性/傳遞延遲,但當我們轉進GLS設置時,就必須將之納入考量並有效率地處理,以便模擬實際的晶片行為,同時不會使事情變得太過悲觀。在邏輯單元輸入端出現的、持續時間不超過慣性延遲的脈衝,不可能導致該邏輯單元輸出端產生任何電平變換,邏輯閘顯示的這種現象被稱為慣性延遲傳遞(inertial delaypropagation)。


工業標準GLS工具通常將傳遞延遲作為該邏輯閘的慣性延遲;模擬工具採用的這種建模方法是對實際晶片行為相當不錯的抽象過程,而且實際上它確實良好地仿真了通過單級邏輯閘的訊號傳遞;但這種行為在IO這樣複雜的閘極中並不是令人滿意的,因為IO在本質上是多級(multi-stage)結構,一旦訊號通過第一級,就能保證它成功地通過IO單元傳遞。因為模擬工具不理解邏輯單元的這種內部結構,因此即使是如圖1所示的多級IO,最終也會抑制這種脈衝。


圖 1 默認的 GLS行為是抑制小於閘延遲的所有轉換。
圖 1 默認的 GLS行為是抑制小於閘延遲的所有轉換。

解決這個問題現在有兩種可能的方案。第一個是手動更新標準延遲格式(SDF)檔,並將延遲更新到一些較小的值。在訊號傳遞正常的情況這種方法非常管用,但當新的延遲不能代表實際延遲時這種方法並不合適,可能會抑制其它潛在的功能性問題。


工業標準的GLS模擬器確實有這樣的功能/開關,即允許/禁止特定寬度的脈衝通過單元。例如當使用「拒絕與誤差(Reject & Error)設置」時,將傳遞寬度大於「誤差設置」值的所有訊號。同時,這種模擬器在遇到寬度處於「拒絕與誤差設置」之間的訊號時將傳遞未知值,而且它會完全消除寬度小於‘拒絕設置’的訊號。下表1給出了一個例子。


表1 Pulse_e/Pulse_r行為。
表1 Pulse_e/Pulse_r行為。

根據時序小組的平衡結果進行時脈選擇

在RTL設置中,由特定來源驅動的時脈將同時到達所有節點,但在使用GLS設置時,就要考慮時脈偏移了,它可能造成時序問題,即源自相同源的兩個時脈路徑可能產生偏移,以致DDR資料/時脈路徑並不是對所有可能組合邏輯來說都是平衡的。


在DDR設計中輸入時脈是最重要的參數,因為所有其它訊號都與輸入時脈週期和占空比有關。也有這樣的情況,即可以將多個時脈源用作控制器的輸入時脈。一般來說,來自任何一個時脈源的路徑只要是平衡的就可以推薦用作DDR輸入時脈,不過對於傳遞到外部DDR記憶體的DDR_CLK、DDR_DQS等訊號來說在占空比、高電平時間、低電平時間等方面有很嚴格的要求,必須滿足DDR正確工作所需的條件。


在寫入側與占空比要求相關的大多數故障可能是DDR控制器輸入端時脈的占空比不正確引起的。因此為了避免不必要的調試工作,必須確保我們使用了時序要求得到滿足的正確時脈源。


下面提到了同樣一個例子,其中擷取到了記憶體輸入端的DQS占空比資料,而且有兩個不同的時脈源被選為DDR控制器時脈。


用於轉儲SDF的焊墊上負載

I/O在具有時序意識的GLS DDR驗證中扮演著非常重要的角色。當滿足直到焊墊(pad)輸入端的時序要求時,I/O延遲資料就會從用於焊墊的許可檔(liberty file)資訊中轉儲(dump)。有時候從控制器到焊墊輸入端的路徑得到了正確的平衡,但仍能見到故障發生,這可能是因為位於主控制器與外部DDR記憶體之間的路徑中的I/O導入了不正確的延遲。


這些延遲實際上取決於施加到焊墊的負載,因此在產生SDF時,需要注意電路板上必須應用了正確且實際的負載。若做不到這一點,可能在SDF中產生相當悲觀的時序片段(timingarcs),並當在GLS模擬中進行反向註記(back-annotated)時可能產生偽故障。這種問題很難除錯,而且相當耗時耗力。


OBE時序要求

大多數DDR控制器的設計是這樣的,它們為了DQ(資料-Data)和DQS(選通-Strobe)焊墊本身而驅動OBE(Output bufferenable),因為相同的焊墊可以用於寫/讀。OBE時序在服務路徑時一般會被忽略,但在DDR案例如此做將導致災難性結果。舉例來說,在DDR協議讀/寫過程中,在READ/WRITE命令之後、DQS第一個升緣(risingedge)之前,DQS上的低電平(LOW)狀態被認為是讀/寫前置(preamble);同樣的,最後一個資料入單元之後在DQS上的低電平狀態被認為是讀/寫後置(post-amble)。


前置部分為接收元件提供了一個時序視窗,用於啟動其資料擷取電路,同時在選通訊號(strobesignal)上呈現一個已知/有效的電平,從而避免錯誤觸發擷取電路。在前置部分過後的資料串發生期間,選通訊號將以與時脈訊號相同的頻率觸發。


在寫入操作過程中是有特定的時序要求的,對DDR2來說必須滿足比如0.35Ck的最小前導寬度,DDR3是0.9Ck。同樣,對寫入後置時序也有要求。DDR2是0.4Ck至0.6Ck,DDR3最小是0.3Ck。如果在DDR GLS時遇到這種最常見的問題,這些參數可能會發生違例。


圖 2 DDR的前置和後置。
圖 2 DDR的前置和後置。

DDR焊墊的迴轉率設定

焊墊是以不同的迴轉率(slewrate)進行表徵(characterization),迴轉率決定了單位時間內輸出電壓的變化率。這些設置在RTL模擬中是沒有任何作用的,因為RTL模擬不考慮延遲,但在GLS模擬卻會將延遲納入其中,因此為了避免不必要的除錯工作,正確的設定非常重要。系統中針對不同焊墊的時序要求一般是要滿足最大迴轉率,但根據不同的參數有不同的要求。


一個這樣的案例是,像DDR等協議如果知道了最大迴轉率,就能發現反射和干擾問題。這個參數在不同的設置情況下焊墊延遲會有很大的變化,具體取決於最終在實際電路板和測試儀器上使用的負載和電阻值。我們必須確保模擬是在設定了正確的焊墊參數之情況下進行,以便消除期望結果和觀察結果之間的偏差。表2提供了針對某個SoC的不同介面的推薦SRE設置值。


表2 提供了針對某個 SoC的不同介面的推薦 SRE設置值。
表2 提供了針對某個 SoC的不同介面的推薦 SRE設置值。

I/O中的表徵問題

這方面的問題同樣只在GLS中可見,在RTL中是不會遇到這種問題的。如果從一開始就得到保證,就可以確保能夠最大程度地減少驗證和靜態時序分析之間的反復除錯和回饋。就背景而言,每個單元都有一個與上升弧(risingarc)和下降弧(falling arc)有關的延遲。任何單元的延遲都直接取自於擁有跨PVT延遲資訊的許可檔。


針對單元的這些上升和下降時間各自不同。但DDR等協議對占空比、高電平時間(hightime)、低電平時間(low time)等都有嚴格的要求,必要滿足這些要求才能確保協議正確工作。設計中常用上升和下降時間幾乎相同的對稱緩衝器(symmetricbuffers)和單元,確保CLK、DQS等關鍵訊號路徑的平衡。但I/O的上升和下降時間也可能因為表徵問題而存在很大差異,這種情況下將破壞占空比,進而在記憶體端導致違例。


圖3 上升-下降延遲差異導致占空比要求的違例。
圖3 上升-下降延遲差異導致占空比要求的違例。

SDF延遲化整(round-off)是高速GLS驗證關鍵

測試平台有一個時間刻度(timescale)用於定義設計模擬時的事件顆粒度(granularity);在時間刻度陳述中,第一個值是時間單位,第二個值是模擬的精度。對於高速電路來說,定義時間刻度的精度必須非常謹慎。一般來說,測試平台中的時間刻度定義為1ns/10ps,這意味著所有延遲都將被近似為最接近的10ps;但在DDR等時序非常重要的高速協議中,餘裕(margin)可能非常小(在Picosecnd等級)。


舉例來說,如果資料路徑中有10個緩衝器,每個的延遲為26ps,那麼如果時間刻度是1ns/10ps,所有這些延遲都將被化整為30ps,進而在GLS中將導入40ps的精確性。這將在GLS中導致錯誤的時序違例;因此模擬環境必須更新到合適的時間刻度才能避免這樣的問題發生。


應該解決的記憶體錯誤

一般來說,模擬中可以使用不同供應商提供的模型;可以是Verilog模型或Denali模型,可能來自美光(Micron)、Spansion、旺宏(Macronix)等記憶體供應商。為了模擬之目的,最好選用Denali模型,因為這些模型對所有時序參數和協議都做了非常嚴格的檢查,而且還包括CK/DQS/DQ之間的抖動和偏移,因此非常接近於電路板上使用的實際記憶體。


當在記憶體介面處違反任何時序規格時,模型將標記錯誤資訊。RTL模擬中是沒有延遲的,如果時序參數得到了正確配置,那麼正常情況下不會遇到這些錯誤。但在GLS模擬中需要考慮延遲因素,因此很可能發生某些參數違例,而錯誤資訊會被丟出來。這些錯誤應該要仔細審查並必須解決。


在正常情況下,當訊號由控制器發出並到達記憶體時,在寫入週期中會遇到這些問題。在讀取週期中,訊號是模型自身產生的並到達控制器。Denali記憶體模型有許多開關用於控制各種參數,如允許的差分偏移、將記憶體初始化到某個值、禁止來自記憶體的錯誤消息等。必須注意的是,每一個開關都不可以忽略,否則很可能會遮蔽錯誤資訊。


小結

綜合以上的各方面討論,顯然GLS有助於發現在RTL層面無法預料的設計問題,並在晶片生產前修正;如果我們一直重複相同的工作,在GLS為DDR除錯可能是極具挑戰性的任務。不過透過經驗累積並遵循基本的除錯規則,可以使工作順利開展。問題可能很棘手,也不同於GLS中常為其他協議所考量的,因此會耗費更長的除錯時間;從一開始就謹慎考量這些關鍵的除錯參數,可以在GLS中實現快速有效的DDR除錯,並有助於在更早的SoC設計階段發現隱藏的設計問題。





想要免費接收更多的技術設計資訊嗎?

馬上訂閱《電子技術設計》郵件速遞,透過郵箱輕鬆接收最新的設計理念和產品新聞。

為確保您的資訊安全,請輸入右方顯示的代碼.

啟動您的訂閱申請

我們已給您的註冊郵箱發送了確認信,請點擊信中的連結啟動您的訂閱申請。

這將有助於我們很好地保護您的個人隱私同時確保您能成功接收郵件。


添加新評論
遊客 (您目前以遊客身份發表,請 登入 | 註冊)
*驗證碼:

新聞 | 產品 | 設計實例