1 引言
DDR2(Double Data Rate2)SDRAM是由JEDEC(電子設(shè)備工程聯(lián)合委員會(huì))制定的新生代內(nèi)存技術(shù)標(biāo)準(zhǔn),,它與上一代DDR內(nèi)存技術(shù)標(biāo)準(zhǔn)最大的不同:雖然采用時(shí)鐘的上升/下降沿同時(shí)傳輸數(shù)據(jù)的基本方式,但DDR2卻擁有2倍的DDR預(yù)讀取能力(即4位預(yù)存取技術(shù)),。此外,,DDR2還增加ODT(內(nèi)建核心終結(jié)電阻器)功能,內(nèi)建合適的端接電阻,,避免了以往因片外連接大片終結(jié)電阻帶來(lái)的制板成本增加,。
基于FPGA的SDRAM控制器,以高可靠性,、強(qiáng)可移植性,、易于集成的特點(diǎn),,逐漸取代以往的專(zhuān)用控制器而成為主流解決方案,。本文采用Xilinx公司的Spartan-3A系列FPGA和Hynix公司的DDR2 SDRAM器件HY5PS121621實(shí)現(xiàn)DDR2控制器的設(shè)計(jì),。
2 FPGA與DDR2存儲(chǔ)器接口
圖1所示為DDR2與FPGA的外圍接口連接圖,,DDR2的信號(hào)線(xiàn)分為:時(shí)鐘信號(hào)線(xiàn)CK/CK ,;數(shù)據(jù)信號(hào)線(xiàn)Data/DQS/DM,;地址信號(hào)線(xiàn)Address/BA1/BA0,;命令信號(hào)線(xiàn)RAS/CAS/WE,;控制信號(hào)線(xiàn)CS/CKE/ODT,。FPGA除與DDR2的所有信號(hào)線(xiàn)相連外,還引出外部環(huán)回信號(hào)線(xiàn)(圖中虛線(xiàn)所示),,此信號(hào)輸出送至輸入輸出模塊(IOB),,以補(bǔ)償FPGA與存儲(chǔ)器之間的IOB、器件和跡線(xiàn)的延遲,。
差分時(shí)鐘線(xiàn)CK/CK為DDR2數(shù)據(jù)傳輸提供時(shí)鐘,,在CK的上升沿和下降沿均有數(shù)據(jù)被觸發(fā);雙向差分線(xiàn)DQS/DQS看作數(shù)據(jù)的同步信號(hào),,寫(xiě)入時(shí)由控制器發(fā)出,,讀取時(shí)由DDR2產(chǎn)生DQS向控制器發(fā)送,它與讀數(shù)據(jù)邊沿對(duì)齊而與寫(xiě)數(shù)據(jù)中心對(duì)齊,。DN為數(shù)據(jù)信號(hào)屏蔽位在突發(fā)寫(xiě)傳輸時(shí)屏蔽不存儲(chǔ)的數(shù)據(jù),;RAS/CAS/WE作為命令信號(hào)線(xiàn)向DDR2發(fā)出讀取、寫(xiě)人,、刷新或預(yù)充電命令,;片內(nèi)終結(jié)信號(hào)線(xiàn)ODT控制是否需要DDR2進(jìn)行片內(nèi)終結(jié)。
3 DDR2控制器的設(shè)計(jì)原理
基于FPGA的DDR2控制器設(shè)計(jì)是由時(shí)鐘生成模塊,、存儲(chǔ)控制模塊和讀寫(xiě)數(shù)據(jù)接口模塊組成如圖2所示,。
控制器中所有模塊時(shí)鐘均來(lái)自于時(shí)鐘生成模塊,,它由數(shù)字時(shí)鐘管理器(DCM)控制,輸出90°,、180°和270°時(shí)鐘,。該模塊還包含延遲校準(zhǔn)監(jiān)視器,用于校準(zhǔn)讀取數(shù)據(jù)(DQ)對(duì)讀取數(shù)據(jù)選通脈沖(DQS)的延遲,,以便讀取數(shù)據(jù)選通脈沖邊沿能夠正確對(duì)齊DQ有效窗口的中間位置,。
讀寫(xiě)數(shù)據(jù)接口模塊是整個(gè)控制器設(shè)計(jì)的關(guān)鍵,它負(fù)責(zé)將用戶(hù)寫(xiě)入的數(shù)據(jù)DQ和DOS按照DDR2 SDRAM時(shí)序要求發(fā)送給DDR2,,DDR2在DQS的每一個(gè)時(shí)鐘沿采集寫(xiě)數(shù)據(jù),。在讀取數(shù)據(jù)時(shí),DDR2 SDRAM將DQS和相關(guān)數(shù)據(jù)發(fā)送到與DQ對(duì)齊邊沿的FPGA,。FPGA將接收到的DQS信號(hào)經(jīng)過(guò)延遲校準(zhǔn),,作為內(nèi)部存儲(chǔ)讀數(shù)據(jù)的FIFO的寫(xiě)時(shí)鐘。FPGA為DDR2的每個(gè)數(shù)據(jù)位配置一對(duì)讀寫(xiě)異步的FIFO,,每個(gè)數(shù)據(jù)位都輸入到上升沿(FIFO0)和下降沿(FIFO1)的FIFO中,,實(shí)現(xiàn)原理如圖3所示。
存儲(chǔ)控制模塊用于產(chǎn)生DDR2所需的地址和命令信號(hào),。DDR2在正常的讀寫(xiě)操作前要初始化,,因此需向DDR2發(fā)送初始化命令,待初始化完成后才能發(fā)送讀寫(xiě)命令,。對(duì)DDR2 SDRAM的讀寫(xiě)訪(fǎng)問(wèn)為突發(fā)模式,。突發(fā)寫(xiě)操作需向DDR2提供寫(xiě)命令(User_command)、寫(xiě)數(shù)據(jù)(User_input_data)和寫(xiě)地址(User_address)信號(hào),,在最后一個(gè)寫(xiě)地址發(fā)送突發(fā)操作完成信號(hào)(User_burst_done),,并保持2個(gè)時(shí)鐘周期有效下終止寫(xiě)操作,突發(fā)寫(xiě)時(shí)序如圖4所示,。突發(fā)讀操作需向DDR2提供讀命令(User_comm-and)和讀地址(User-address),,在最后一讀地址發(fā)送突發(fā)完成信號(hào)(User-burst_done),并保持2個(gè)周期有效下終止讀操作,,突發(fā)讀時(shí)序如圖5所示
4 DDR2控制器的設(shè)計(jì)及應(yīng)用
為了縮短開(kāi)發(fā)周期,,采用Xilinx的MIG軟件工具直接生成DDR2控制器設(shè)計(jì)模塊,包括HDL代碼和約束文件,。用戶(hù)可在MIG的GUI圖形界面選擇對(duì)應(yīng)模板,、總線(xiàn)寬度和速度級(jí)別,并設(shè)置CAS延遲,、突發(fā)長(zhǎng)度,、引腳分配等關(guān)鍵參數(shù)。如果設(shè)計(jì)者所選器件與MIG所列模板不相符,,可在代碼生成后靈活修改代碼,,達(dá)到系統(tǒng)要求,。代碼添加到工程前需硬件驗(yàn)證,采用MIG自動(dòng)生成的測(cè)試模塊進(jìn)行驗(yàn)證,。該模塊向存儲(chǔ)器發(fā)出一系列的寫(xiě)入命令和讀取命令,,并對(duì)寫(xiě)入數(shù)據(jù)和讀回?cái)?shù)據(jù)進(jìn)行比較,通過(guò)比較信號(hào)(led_error)驗(yàn)證控制器的正確與否,。用ChipScope抓取的讀數(shù)據(jù)和相關(guān)控制信號(hào)時(shí)序分別如圖6和圖7所示,,讀寫(xiě)比較信號(hào)(led_error)在檢測(cè)到讀寫(xiě)數(shù)據(jù)相等時(shí)輸出'0'電平。
在硬件驗(yàn)證通過(guò)后,,把控制器代碼導(dǎo)入到系統(tǒng)工程中,,設(shè)計(jì)者只需輸入相應(yīng)命令(包括讀、寫(xiě)和初始化命令),,控制器模塊將自動(dòng)產(chǎn)生命令和控制信號(hào)并按照DDR2的時(shí)序要求送至DDR2,,命令發(fā)送完畢提供給用戶(hù)一個(gè)命令應(yīng)答信號(hào)(User_cmd_ack),設(shè)計(jì)者根據(jù)這一信號(hào)判斷是否可以發(fā)送下一個(gè)命令,。至于自動(dòng)刷新,、激活和預(yù)充電命令則由控制器自動(dòng)完成,無(wú)需用戶(hù)干涉,。
5 結(jié)束語(yǔ)
通過(guò)MIG工具輔助設(shè)計(jì),,實(shí)現(xiàn)500 M/s帶寬的DDR2接口數(shù)據(jù)采集,,占用FPGA資源分別為15%IOB資源,,17%邏輯Slice資源和2個(gè)DCM。在FPGA中實(shí)現(xiàn)DDR2控制器,,節(jié)省功耗和空間,,并縮短系統(tǒng)開(kāi)發(fā)周期,滿(mǎn)足大多數(shù)低成本系統(tǒng)設(shè)計(jì)要求,。
本文來(lái)源于與非網(wǎng)
原文地址:http://www.eefocus.com/article/10-09/2075521283948931.html