<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > DDR內存接口的設計與實(shí)現

DDR內存接口的設計與實(shí)現

作者: 時(shí)間:2007-06-14 來(lái)源:網(wǎng)絡(luò ) 收藏

摘 要: 針對當今電子系統對高速大容量的需要,本文闡述了使用控制器IP核來(lái)設計實(shí)現接口的方法。該方法能使設計盡可能簡(jiǎn)單,讓設計者更專(zhuān)注于關(guān)鍵邏輯設計,以便達到更高的性能。該設計經(jīng)過(guò)仿真顯示,完全符合要求。
關(guān)鍵字 IP核 地址產(chǎn)生邏輯 FIFO

1.引言
在當今的電子系統設計中內存被使用的越來(lái)越多,用來(lái)存放數據和程序。并且對內存的要求越來(lái)越高,要求內存讀寫(xiě)速度盡可能的快,容量盡可能的大。面對這種趨勢,設計實(shí)現大容量高速讀寫(xiě)的內存顯得尤為重要。

本文結合筆者承擔的T比特路由器項目,對其中的大容量高速DDR內存實(shí)現進(jìn)行了詳細闡述。本文第2節對與DDR內存相關(guān)的知識做了簡(jiǎn)單的介紹,從總體上對DDR內存有個(gè)認識;第3節闡述了DDR內存接口模塊的整體設計;第4節對整個(gè)設計中的關(guān)鍵設計地址產(chǎn)生邏輯進(jìn)行了詳細闡述;最后總結全文。

2.DDR內存相關(guān)知識介紹
DDR SDRAM是雙數據率同步動(dòng)態(tài)隨機存儲器的縮寫(xiě)。它能夠在一個(gè)時(shí)鐘周期內傳送兩次數據,也就是說(shuō)數據速率是時(shí)鐘頻率的兩倍,可以達到很高的數據讀寫(xiě)速度。此外它通過(guò)對地址線(xiàn)的分時(shí)復用,可以做到很大的容量。比如我們設計實(shí)現的DDR內存時(shí)鐘頻率可達到150MHz,數據速率為300MHz,容量達到1M x 72bit。

DDR內存為了更精確的同步使用若干對差分時(shí)鐘;它還有一個(gè)獨特的數據脈沖信號(DQS)。DDR內存就是根據DQS來(lái)分割一個(gè)時(shí)鐘周期內的兩次數據。更需要注意的是:DDR內存沒(méi)有一個(gè)信號是發(fā)送讀或寫(xiě)的明確命令的,而是通過(guò)芯片的可寫(xiě)狀態(tài)來(lái)達到讀/寫(xiě)的目的。具體為:片選信號(CS),行地址有效信號(RAS),列地址有效信號(CAS),寫(xiě)允許信號(WE)。它們都是低電平有效,它們的不同組合構成了對DDR內存的不同命令。比如CS,CAS有效,RAS無(wú)效,WE無(wú)效,表示從現在地址線(xiàn)指示的存儲單元處讀出一個(gè)數據放到數據線(xiàn)上;再如CS,CAS有效,RAS無(wú)效,WE有效,表示將數據線(xiàn)上的數據寫(xiě)入現在地址線(xiàn)指示的存儲單元處。

DDR內存可以支持突發(fā)讀寫(xiě),并能根據不同的需要選擇不同的突發(fā)長(cháng)度(BL);位寬也可以選擇,并能利用掩碼技術(shù)靈活的選擇每次讀寫(xiě)的有效數據寬度(以8bit為單位);此外由于DDR內存讀寫(xiě)時(shí)需要先激活(Active)將要讀寫(xiě)的存儲單元行,然后再讀寫(xiě),但DDR內存任何時(shí)候只能有一存儲行是打開(kāi)的(處于激活態(tài)),因此在需要讀寫(xiě)不同存儲行時(shí),要先關(guān)閉前已打開(kāi)的存儲行,才能打開(kāi)現在將要讀寫(xiě)的存儲單元行,這一操作被稱(chēng)為預充電(precharge)。另外由于DDR內存是動(dòng)態(tài)存儲器,需要對存儲體進(jìn)行周期性的刷新(refresh)。

從上面的介紹中可以看出DDR內存的性能雖然好,但接口控制很復雜。為了快速實(shí)現DDR內存接口,縮短設計周期,我們使用已經(jīng)成熟的商業(yè)化內存控制器 IP 核對DDR內存進(jìn)行控制。我們使用的是Altera公司的DDR Controller IP核,版本為2.2.0,使用的開(kāi)發(fā)工具為Quartus II 4.1,使用VHDL語(yǔ)言進(jìn)行描述。

3.獨立內存接口模塊整體設計
為了將內存接口模塊設計成相對獨立的模塊,也為了調整不同模塊之間的時(shí)鐘相位差,使數據穩定輸入輸出,我們給DDR內存接口模塊前端增加了一個(gè)入口FIFO,出口增加了一個(gè)出口FIFO。我們的功能需求是根據出口FIFO的狀態(tài)確定是否將數據送往DDR內存條中進(jìn)行緩存,并且設計中必須充分考慮DDR內存條存儲器帶寬的利用效率,設計成批量讀寫(xiě)的模式,減少讀寫(xiě)切換工作的開(kāi)銷(xiāo)。該內存模塊具體完成以下功能:
1)使用DDR控制器IP核完成對DDR內存的初始化配置,產(chǎn)生讀寫(xiě)命令和其他各種控制信號;
2)根據出口FIFO狀態(tài)產(chǎn)生對DDR內存接口的讀寫(xiě)請求;
3)并且整個(gè)系統對數據的緩存處理應該公平,不能有系統差別,也就是說(shuō)要保證在任何情況下讀出的數據都是有效的數據,寫(xiě)入的數據不覆蓋DDR中的原有效數據;DDR內存接口模塊主要功能由DDR控制器IP核完成,對DDR內存進(jìn)行初始化配置,產(chǎn)生讀寫(xiě)命令和其他各種控制信號。DDR控制器有兩個(gè)接口:DDR-interface和local-interface。DDR-interface直接與DDR內存條相連,不需要干預。local-interface就是根據不同需要輸入不同信號,可以增加自己的邏輯。我們需要設計的邏輯就是產(chǎn)生讀寫(xiě)請求信號和對應的地址信息送給DDR控制器,DDR控制器把這些請求轉換為對DDR內存的數據讀寫(xiě)。因此DDR內存接口模塊的重點(diǎn)是對地址產(chǎn)生邏輯的設計。我們的內存模塊設計框圖詳見(jiàn)圖1。

圖1 DDR內存接口模塊設計框圖

4.內存讀寫(xiě)地址產(chǎn)生邏輯的FPGA設計實(shí)現
根據本模塊的功能需求,在出口FIFO的狀態(tài)為忙時(shí),要將數據送往DDR內存條緩存,當出口FIFO的狀態(tài)為非忙時(shí),要將數據從DDR內存條讀出送到出口FIFO。并且設計必須充分考慮DDR內存條存儲器帶寬的利用效率,設計成批量讀寫(xiě)的模式,減少讀寫(xiě)切換工作的開(kāi)銷(xiāo)。出口FIFO的狀態(tài)能由門(mén)限信號th1和th2反映出來(lái),從而根據th1和th2反饋控制地址產(chǎn)生邏輯。

此外還要注意數據的次序,要保證對數據的公平處理,不能對數據造成系統差別,因此整個(gè)DDR內存邏輯上是一個(gè)循環(huán)隊列。還要保證:DDR內存滿(mǎn)時(shí),不應再寫(xiě)DDR內存;DDR內存空時(shí),不應再讀DDR內存。DDR內存的空滿(mǎn)對地址產(chǎn)生邏輯也有重要影響。

從上面分析中看出:對地址產(chǎn)生邏輯有影響的信號是出口FIFO的狀態(tài)指示信號th1和th2,DDR內存的空滿(mǎn)信號;輸出信號為對DDR內存的讀請求rd_req和寫(xiě)請求wr_req,地址addr。規定:th1=1表示出口FIFO幾乎空,出口FIFO狀態(tài)為非忙,可以對DDR內存發(fā)出讀請求,直到th2=1為止;th2=1表示出口FIFO幾乎滿(mǎn),出口FIFO狀態(tài)為忙,可以對DDR內存發(fā)出寫(xiě)請求,直到th1=1為止。

DDR內存的空滿(mǎn)由讀寫(xiě)地址的比較得出,并且要提前幾個(gè)時(shí)鐘周期置出。非空標志由這樣的地址比較得出:rdaddr/= wraddr-2 and rdaddr/= wraddr-1 and rdaddr/=wraddra;非滿(mǎn)標志由這樣的地址比較得出:wraddr+2/=rdaddr and wraddr+3/=rdaddr and rdaddr/= wraddr+1。
讀請求rd_req產(chǎn)生條件是: ①DDR內存非空,DDR內存滿(mǎn)且th2=0;
②DDR內存非空,DDR內存非滿(mǎn)且th1=1至th2=1。
寫(xiě)請求wr_req產(chǎn)生條件是:①DDR內存非滿(mǎn),DDR內存空;
②DDR內存非滿(mǎn),DDR內存非空且th2=1至th1=1。
DDR內存模塊的地址產(chǎn)生邏輯使用VHDL語(yǔ)言在Quartus II 4.1上實(shí)現,最后編程例化到Altera公司的Stratix GX系列FPGA中物理實(shí)現。具體仿真波形詳見(jiàn)圖2。



圖 2 DDR內存模塊地址產(chǎn)生程序的信號仿真波形
仿真說(shuō)明:輸入時(shí)鐘為150M,復位信號高有效,ready為DDR控制器準備好信號,th1=1表示出口FIFO幾乎空,在DDR內存非空時(shí),應該讀DDR內存;th2=1表示出口FIFO幾乎滿(mǎn),在DDR內存非滿(mǎn)時(shí),應該寫(xiě)DDR內存;輸出數據為讀請求信號rdreq,寫(xiě)請求信號wrreq,輸出地址信號ddraddr(為仿真方便,仿真時(shí)的地址位寬設定為5bit)。

通過(guò)仿真從Quartus II 4.1的報告中可以看到如此設計的時(shí)鐘可以最高達到162.92MHz,符合設計要求的150MHz。其它功能要求也能滿(mǎn)足。

5.結束語(yǔ)
本文根據電子系統對高速大容量?jì)却娴男枰?,使用成熟商業(yè)化DDR控制器IP核來(lái)設計獨立的DDR內存接口模塊,不僅能從控制的細節中解脫出來(lái),專(zhuān)注于系統的關(guān)鍵功能設計,并且能夠獲得更高的性能,完全滿(mǎn)足我們的功能性能需要。經(jīng)測試該設計性能穩定,整個(gè)工作流程簡(jiǎn)單實(shí)用,符合設計要求。

參考文獻
1 stratix_GX_datasheet. Altera公司,2003
2 Double Data Rate(DDR)SDRAM Handbook.Micron公司,2004
3邊計年,薛宏熙.用VHDL設計電子線(xiàn)路[M].北京:清華大學(xué)出版社,2000



關(guān)鍵詞: DDR 內存 接口的設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>