提出一種便于用戶操作并能快速運(yùn)用到產(chǎn)品的DDR2控制器IP核的FPGA實(shí)現(xiàn),使用戶不需要了解DDR2的原理和操作方式的情況下,依然可以通過(guò)IP核控制DDR2。簡(jiǎn)單介紹了DDR2的特點(diǎn)和操作原理,并對(duì)DDR2控制器的IP核進(jìn)行了模塊化的劃分,分析了每個(gè)模塊的功能。強(qiáng)調(diào)了用戶接口功能的完善,并介紹了IP核的操作流程,使每個(gè)用戶都能輕松的使用該IP核。
1 引言
DDR2作為主流的內(nèi)存具有存取速度快、存儲(chǔ)量大、成本較低等特點(diǎn),因此被廣泛地運(yùn)用到計(jì)算機(jī)、汽車導(dǎo)航系統(tǒng)、高清數(shù)字電視、數(shù)碼相機(jī)等電子行業(yè)的各大領(lǐng)域當(dāng)中。隨著科技的發(fā)展,F(xiàn)PGA的技術(shù)也在不斷進(jìn)步,F(xiàn)PGA的性能、穩(wěn)定性、容量等指標(biāo)已經(jīng)有了很大的提高。鑒于FPGA的發(fā)展和DDR2高性能的表現(xiàn),越來(lái)越多的研發(fā)人員會(huì)通過(guò)FPGA直接對(duì)DDR2進(jìn)行控制,這時(shí)他們必須對(duì)DDR2的工作原理有深入的了解,但這樣就很可能加大了研發(fā)周期,直接影響了公司的經(jīng)濟(jì)效益。因此設(shè)計(jì)一款開發(fā)人員完全不需要了解DDR2工作原理的DDR2控制器IP核是非常具有實(shí)際意義的。
本文提出了一款方便用戶使用的DDR2控制器方案。用戶不需要了解DDR2的工作原理,只用控制有限的幾個(gè)用戶接口就可以對(duì)DDR2進(jìn)行操作,在產(chǎn)品開發(fā)時(shí)可以大大縮短開發(fā)周期。
2 DDR2的特點(diǎn)
DDR2是基于JEDEC(Joint Electronic Device Engineering Council)標(biāo)準(zhǔn)的外部存儲(chǔ)設(shè)備,并且DDR2還有著低功耗,高密度和高頻率等特點(diǎn)。與DDR相比DDR2具有如下特點(diǎn):
1)相同的核心的頻率的情況下,DDR2的工作頻率是DDR的兩倍。
2)ODT(on.Die Termination)片內(nèi)終結(jié)器:為了防止信號(hào)反射問(wèn)題,DDR2中集成了ODT。ODT能夠吸收線路終端的信號(hào)的影響,而且能使得信號(hào)質(zhì)量更高和數(shù)據(jù)傳輸更快。
3)OCD(Off-Chip Driver)離線驅(qū)動(dòng)調(diào)整:通過(guò)調(diào)整輸出驅(qū)動(dòng)的上拉/下拉電阻值,使得充、放電動(dòng)作的電壓誤差減到最小,調(diào)整DQS和DQS#的波形交叉點(diǎn),平衡參考時(shí)鐘的上升沿和下降沿波形,從而保證內(nèi)部輸出驅(qū)動(dòng)的穩(wěn)定。
4)前置CAS(Posted Column Address Strobe)前置列地址選通:通過(guò)將CAS信號(hào)插到RAS(Row Address Strobe)信號(hào)的后一個(gè)時(shí)鐘周期,避免命令和CAS信號(hào)的沖突,提高命令總線和數(shù)據(jù)總線的速度。
3 DDR2的操作原理
對(duì)DDR2的操作是一個(gè)復(fù)雜又繁瑣的過(guò)程,它的主要操作如下:
1)初始化:DDR2的工作方式是由內(nèi)部和外部寄存器所控制的,因此在上電時(shí)先需要對(duì)DDR2的寄存器進(jìn)行配置,即初始化。通過(guò)初始化可以對(duì)DLL,Burst Length(突發(fā)長(zhǎng)度),Burst type(突發(fā)類型),CAS Latency(CAS延時(shí)),CL latency(CL延時(shí)),ODT,OCD,等的配置。
2)行激活和列選址:在DDR2內(nèi)部存儲(chǔ)就好是被分成幾個(gè)表格一樣,L-BANK表示有幾張表格,而在每一張表格中首先確定它的行,再確定列來(lái)選取所存放的地方。根據(jù)DDR2的特征,對(duì)DDR2的地址選擇分為兩步:第一步行激活:片選CS#拉低,通過(guò)BAO、BA1(BA2)來(lái)選擇L-BANK,把行選通RAS#拉低,通過(guò)地址線輸入行地址。第二步列選通:在行激活的下個(gè)周期,列選通CAS#拉低,通過(guò)地址線輸入列地址。如果是在同一行進(jìn)行操作時(shí),就可以省略行激活。
3)讀/寫指令的發(fā)布:當(dāng)列選址完成后,經(jīng)過(guò)AL的延時(shí)就可以發(fā)出讀/寫命令對(duì)DDR2進(jìn)行操作了,再經(jīng)過(guò)CL個(gè)周期(從讀操作的命令發(fā)出到第一個(gè)數(shù)據(jù)的延時(shí))的延時(shí)第一
個(gè)讀數(shù)據(jù)輸出或者是經(jīng)過(guò)CL-1個(gè)周期(寫操作命令的延時(shí)比讀操作命令的延時(shí)少一個(gè)周期)的延時(shí)輸入第一個(gè)數(shù)據(jù)。
4)預(yù)充電(Precharge):DDR2為動(dòng)態(tài)儲(chǔ)存體,它的儲(chǔ)存體上的電容電壓會(huì)因?yàn)闀r(shí)間或干擾的情況下使電壓值變化,從而使數(shù)據(jù)產(chǎn)生變化。在對(duì)另一行進(jìn)行操作時(shí)必須關(guān)閉原來(lái)的行,重新發(fā)送行/列地址,這時(shí)會(huì)對(duì)DDR2產(chǎn)生干擾,因此在重新?lián)Q行時(shí)要對(duì)其電容進(jìn)行有選擇的充電操作即進(jìn)行預(yù)充電。
5)刷新(refresh):DDR2的儲(chǔ)存體是體積極小的電容,由于漏電的存在,電容中的電量會(huì)不斷的減小,而儲(chǔ)存體是根據(jù)電容電量的多少來(lái)判斷數(shù)據(jù)是1或者是0的,為了保證數(shù)據(jù)的可靠性,就需要定時(shí)對(duì)存儲(chǔ)體上的電容進(jìn)行有選擇的充電,即刷新。
4 DDR2控制器IP核的架構(gòu)思想
一方面DDR2具有動(dòng)態(tài)存儲(chǔ)的特點(diǎn),它需要在一定的時(shí)間和特殊的情況下進(jìn)行充電,因此在數(shù)據(jù)傳輸?shù)臅r(shí)候不能進(jìn)行不間斷傳輸,而要對(duì)傳輸?shù)臄?shù)據(jù)量進(jìn)行有效的實(shí)時(shí)控制。另一方面DDR2又具有高速的特點(diǎn),在DDR2數(shù)據(jù)傳輸方面頻率很高,而在FPGA內(nèi)部的控制方面又不需要達(dá)到這么高的頻率,因此在FPGA的內(nèi)部就形成一個(gè)跨頻域的操作形式?;谏鲜鰞煞矫娴脑颍贒DR2控制器的IP核上采用控制模塊和數(shù)據(jù)模塊分離的方式,再用時(shí)鐘模塊為兩個(gè)模塊輸入時(shí)鐘,最后加了用戶接口使用戶可以快速和方便的使用IP核。
5 DDR2控制器IP核中各模塊的功能
DDR2控制器是有四個(gè)模塊組成:時(shí)鐘模塊,控制模塊,數(shù)據(jù)鏈路模塊,用戶接口模塊。
5.1 時(shí)鐘模塊
時(shí)鐘模塊是由Xilinx的DCM 核構(gòu)成,主要用來(lái)接收FPGA外部時(shí)鐘,然后通過(guò)分頻和倍頻產(chǎn)生用戶接口時(shí)鐘、數(shù)據(jù)鏈路模塊使用的時(shí)鐘、控制模塊使用的時(shí)鐘和DDR2的時(shí)鐘。它還有一個(gè)作用就是用復(fù)位信號(hào)對(duì)整個(gè)IP核進(jìn)行全局復(fù)位。
5.2 控制模塊
控制模塊作為控制器的中樞,它主要負(fù)責(zé)對(duì)DDR2的初始化和命令的操作,因此控制模塊基本上是由初始化和命令控制兩部分組成。
初始化:在DDR2上電后經(jīng)過(guò)20μs的穩(wěn)定期,我們把時(shí)鐘使能信號(hào)CKE置高,等待400ns的時(shí)間后進(jìn)行第一次的預(yù)充電,然后對(duì)外部寄存器和模式寄存器進(jìn)行配置,緊接著執(zhí)行第二次預(yù)充電和兩次刷新,再判斷DLL是否正確鎖定,配置OCD,最后等待初始化完成。如果初始化結(jié)束,我們就把信號(hào)initial_done置高表示初始化完成用戶可以對(duì)DDR2進(jìn)行操作了。
命令控制:命令控制部分主要用作DDR2初始化后,產(chǎn)生控制信號(hào)和每個(gè)操作中的延時(shí),并分析用戶命令對(duì)DDR2進(jìn)行自動(dòng)刷新、讀操作、寫操作、預(yù)充電等操作。當(dāng)用戶寫入讀寫命令的時(shí)候,狀態(tài)機(jī)(圖3)可以自動(dòng)的進(jìn)行判斷初始化是否完成、行激活、列尋址、預(yù)充電、自動(dòng)刷新、讀寫命令發(fā)布等操作。
5.3 讀/寫數(shù)據(jù)鏈路模塊
DDR2是一個(gè)高速的,并且是時(shí)鐘上、下沿都采樣數(shù)據(jù)的芯片,因此對(duì)于數(shù)據(jù)鏈路模塊的時(shí)序要求非常嚴(yán)格。為了能夠嚴(yán)格控制時(shí)序問(wèn)題,采用了Xilinx的SPARTAN6的特殊原語(yǔ)模塊IIDDR和ODDR對(duì)數(shù)據(jù)進(jìn)行處理。在數(shù)據(jù)鏈路模塊中采用讀數(shù)據(jù)鏈路和寫數(shù)據(jù)的鏈路獨(dú)立的方式,這樣使讀/寫數(shù)據(jù)完全獨(dú)立,使用戶更容易對(duì)數(shù)據(jù)進(jìn)行控制。
5.4 用戶接口模塊
用戶接口模塊作為和用戶直接連接的模塊,它功能的強(qiáng)大與否直接影響用戶對(duì)IP核控制的難易度。為了使用戶很容易把控制器的IP核運(yùn)用到工程項(xiàng)目中,整個(gè)模塊中包含了READ
FIFO、WRITE FIFO、COMMAND FIFO、命令子模塊、用戶數(shù)據(jù)鏈路子模塊,用戶控制模塊子模塊。READ FIFO、WRITE FIFO、 COMMAND FIFO 使用戶可以的控制命令和數(shù)據(jù)連續(xù)的輸入和輸出。命令子模塊可以翻譯用戶輸入的命令,用戶只需要發(fā)送讀或?qū)懨?、命令要操作的首地址和總共讀/寫多少個(gè)數(shù)據(jù),命令子模塊就可以根據(jù)情況發(fā)送命令控制給用戶控制子模塊。用戶控制子模塊再以狀態(tài)機(jī)的形式控制COMMAND FIFO、WRITE FIFO、READ FIFO對(duì)與用戶接口模塊相連的主控制模塊和數(shù)據(jù)鏈路模塊進(jìn)行控制,對(duì)DDR2進(jìn)行讀/寫等操作。
6 如何控制IP核對(duì)DDR2進(jìn)行操作
這個(gè)設(shè)計(jì)的DDR2控制器IP核不需要用戶了解DDR2的工作特性就能很好的操作IP核對(duì)DDR2進(jìn)行讀寫等操作,如圖4所示。
1)首先通過(guò)INITIAL_DONE初始化完成信號(hào)判斷DDR2是否初始化完成,初始化完成INITIAL_DONE置1,否則為0。
2)開始操作時(shí)把開始信號(hào)START置1,通過(guò)WRITE_BUSY和READ_BUSY信號(hào)來(lái)判斷是否可進(jìn)行命令的發(fā)送。WRITE_BUSY信號(hào)為2位寬,WRITE_BUSY[1]表示命令信號(hào),為1時(shí)表示忙,0時(shí)表示不忙可以發(fā)送命令。WRITE_BUSY[0]表示數(shù)據(jù)信號(hào),為1時(shí)表示忙不能發(fā)送數(shù)據(jù),0時(shí)可以發(fā)送數(shù)據(jù)。READ_BUSY信號(hào)與WRITE_BUSY信號(hào)有著相同的功能,并且只有在READ_BUSY[1]和WRITE_BUSY[1]信號(hào)都為0時(shí)才能發(fā)送命令,也就是命令不能同時(shí)進(jìn)行。當(dāng)WRITE_BUSY=01和READ_BUSY=01時(shí),CMD=000為寫操作。
3)當(dāng)WRITE_BUSY[1:0]信號(hào)為10時(shí)可以在時(shí)鐘的上升沿時(shí)對(duì)WRITE_DATA輸入數(shù)據(jù),并且可以通過(guò)對(duì)WRITE_M(jìn)ASK相應(yīng)的位賦1來(lái)屏蔽不想要的數(shù)據(jù)或者是避免當(dāng)數(shù)據(jù)不夠而寫入0的情況。
4)當(dāng)寫入結(jié)束時(shí)WRITE_BUSY=01時(shí)可以把START信號(hào)置0,結(jié)束寫入。
7 結(jié)語(yǔ)
為了驗(yàn)證此DDR2控制器IP核的實(shí)用性,我們通過(guò)Xilinx公司的xc6slx45t器件以及美光的MT47H12816XX-3DDR2模型做了仿真,并在Xilinx的sp601開發(fā)板進(jìn)行了實(shí)驗(yàn)。通過(guò)測(cè)試代碼往DDR2中寫入132個(gè)128位的數(shù)據(jù)(如圖5),并從DDR2中讀取寫入的數(shù)據(jù)(如圖6)。通過(guò)實(shí)驗(yàn)證明了即使用戶不很清楚DDR2的工作原理,也可以很方便的通過(guò)本文設(shè)計(jì)的DDR2控制器IP核對(duì)DDR2進(jìn)行讀寫操作。
評(píng)論
查看更多