昨天在調(diào)試Lattice EVDK開(kāi)發(fā)板上的DDR3 Demo時(shí),遇到一個(gè)莫名其妙的問(wèn)題,今天來(lái)總結(jié)一下,并與大家分享。
一、問(wèn)題描述
在Demo的頂層文件ddr3_test_top.v中有如下幾句話:
inputtest1; outputout_test1; assignout_test1=test1;
且test1和out_test1與Design中的其他邏輯沒(méi)有任何的關(guān)系,然而,當(dāng)我把它刪除的時(shí)候,卻發(fā)現(xiàn)原本運(yùn)行正常的Demo卻出錯(cuò)了?。?!
于是乎,先去檢查這兩個(gè)引腳是否和硬件相關(guān),在LPF文件中找到其相關(guān)約束:
LOCATECOMP"test1"SITE"F5"; IOBUFPORT"test1"IO_TYPE=SSTL15_I; LOCATECOMP"out_test1"SITE"B1"; IOBUFPORT"out_test1"IO_TYPE=SSTL15_I;
然后查看EVDK開(kāi)發(fā)板的原理圖:
握草,這是什么鬼?
于是乎,進(jìn)一步做測(cè)試,把test1和out_test1替換為其他的引腳試試看呢。結(jié)果發(fā)現(xiàn):當(dāng)test1在Bank7上時(shí),Demo功能正常,當(dāng)test1不在Bank7上時(shí),功能則不正常!
想了好久,奈何我這種小菜鳥(niǎo)卻怎么也想不明白,于是請(qǐng)教了大牛!
二、問(wèn)題分析
首先,還是檢查原理圖和LPF文件,由于EVDK板子上有兩個(gè)Mircon的DDR3的內(nèi)存顆粒,且均為x16的Configuration。也就是DQ的寬度為16bit,兩個(gè)顆粒合并為32bit的DQ。其中顆粒一對(duì)應(yīng)DQ0~DQ15,顆粒二對(duì)應(yīng)DQ16~DQ31。DQ0~DQ15連接到了Bank6上面,而DQ16~DQ31連接到了Bank7上面。但是需要注意的是,一些控制信號(hào)(如RST、CS、WE、DM等)則分布在Bank6和Bank7上,換句話說(shuō),即使Design中只需要使用一個(gè)DDR3顆粒,也需要同時(shí)使用Bank6和Bank7。
因?yàn)镈DR3采用的是SSLT15 I電平標(biāo)準(zhǔn),所以需要設(shè)置Bank6和Bank7的VREF。在LPF文件中,我們可以找到:
LOCATEVREF"BANK_6_VREF"SITE"V4"; LOCATEVREF"BANK_7_VREF"SITE"J7";
檢查原理圖,發(fā)現(xiàn)V4和J7引腳也正確地連接到了參考電壓上。
此時(shí),我們?cè)俅螌⑸衔奶岬降膁dr3_test_top.v中的test1和out_test1相關(guān)的幾條語(yǔ)句刪除,并刪除LPF文件中的相關(guān)語(yǔ)句。
然后從新綜合、MAP,并PAR,此時(shí)在PAR的報(bào)告中可以發(fā)現(xiàn)如下的警告:
WARNING - par: LOCATE VREF "BANK_7_VREF" preference has been ignored, because no PIO in bank "7" uses this VREF.
也就是說(shuō)Diamond認(rèn)為,我們的Design中并沒(méi)有使用Bank7中的PIO,所以不需要VREF,并忽略了LPF文件中給出的約束。所以Bank7的VREF引腳并未被設(shè)置為VREF模式,而是作為普通IO的(默認(rèn)模式)。但是DDR3使用的是SSLT15 I電平標(biāo)準(zhǔn),需要VERF引腳為其提供0.75V的參考電壓(一般使用1.5V的VCCIO分壓即可),如下圖所示:
檢查ECP5數(shù)據(jù)手冊(cè),發(fā)現(xiàn)如下一句話:
The VREF voltage is used to set the threshold for the referencedinputbuffers, such as SSTL.
注意是input!這就解釋了為什么當(dāng)test1引腳分配在Bank7上可以,分配在其他引腳上就不行的原因了。因?yàn)槿绻鸅ank7上沒(méi)有input的話,Diamond就會(huì)認(rèn)為此時(shí)為Bank7設(shè)置VREF是沒(méi)有必要的,所以也就忽略了LPF中的約束。
難道是ECP5的數(shù)據(jù)手冊(cè)寫(xiě)錯(cuò)了?難道是DDR的output也需要VREF?
其實(shí)不然,再次檢查EVDK板的原理圖,發(fā)現(xiàn)Bank6和Bank7的VREF實(shí)際上連接的是同一個(gè)電壓(換句話說(shuō),這兩個(gè)VREF是直接連在一起的)。但是合理的硬件設(shè)計(jì)方式是,不同Bank的VREF獨(dú)立(即不要連接在一起)。也正是這種不合理的設(shè)計(jì)方式,導(dǎo)致了本文所討論的問(wèn)題。
在我們的設(shè)計(jì)中實(shí)際上只需要給Bank6設(shè)置VREF即可,Bank7實(shí)際上是不需要的,但是為什么不給Bank7 VREF的話,DDR卻不能正常工作呢?原因在于,如果Bank7的J7引腳(VREF1_7)沒(méi)有被配置為VREF輸入模式的話,其默認(rèn)為上拉的。而J7引腳(VREF1_7)的上拉會(huì)影響到VREF的電壓,進(jìn)而影響到Bank6上的V4引腳(VREF1_6)的VREF輸入,最終導(dǎo)致Bank6沒(méi)有穩(wěn)定有效的VREF,因此DDR不能正常工作。
為了讓J7引腳(VREF1_7)不影響VREF的電壓,顯然最好是將其也設(shè)置成VREF輸入模式,為了防止我們的設(shè)置被Diamond優(yōu)化掉,才出現(xiàn)了本文前面所討論的這一問(wèn)題。
三、關(guān)于SSTL電平(更新內(nèi)容)
這里來(lái)分析一下為什么DDR3的相關(guān)IO的輸入需要參考電壓,而輸出卻不需要。DDRx SDRAM普通IO采用的是SSTL電平標(biāo)準(zhǔn)(clk和dqs等采用的是SSTL的差分版本SSTLD),而SSTL實(shí)際上是一種偽差分電平。
所謂偽差分電平,就是信號(hào)的接收端是一個(gè)差分的接收器,但是其中一端固定接參考電壓VREF,而另一端接單端信號(hào)線。輸入信號(hào)電壓與參考電壓之間進(jìn)行比較,作為判決輸入信號(hào)高低的標(biāo)準(zhǔn)。而偽差分標(biāo)準(zhǔn)的輸出驅(qū)動(dòng)器則是單端信號(hào)標(biāo)準(zhǔn)中常見(jiàn)的推挽式的結(jié)構(gòu)(Push-Pull),顯然是不需要參考電壓VREF的。
由于偽差分電平的信號(hào)輸出的擺幅較小,瞬態(tài)的電流較小,保持信號(hào)完整性要相對(duì)容易些。因此,這種電平主要應(yīng)用在高速的存儲(chǔ)器接口中,如DDRx SDRAM、QDR SRAM和RLDRAM等中。
這種結(jié)構(gòu)的好處是,其輸入信號(hào)只需要在VREF上下小幅度擺動(dòng)即可被輸入驅(qū)動(dòng)器正確地接收。這樣信號(hào)的噪聲余量就很大,信號(hào)能否被正確接收下來(lái),VREF將起到關(guān)鍵作用,因此設(shè)計(jì)時(shí)需要保證VREF較高的精度。
-
電平
+關(guān)注
關(guān)注
5文章
361瀏覽量
39978 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5121瀏覽量
98036
原文標(biāo)題:【博文連載】EVDK DDR3 Demo調(diào)試筆記(關(guān)于VREF的問(wèn)題)
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論