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