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