宋 明,趙英瀟,林錢強(qiáng)
(國(guó)防科學(xué)技術(shù)大學(xué) 電子科學(xué)與工程學(xué)院,湖南 長(zhǎng)沙 410073)
?
基于FPGA的DDR3 SDRAM控制器的設(shè)計(jì)與優(yōu)化
宋 明,趙英瀟,林錢強(qiáng)
(國(guó)防科學(xué)技術(shù)大學(xué) 電子科學(xué)與工程學(xué)院,湖南 長(zhǎng)沙 410073)
為解決超高速采集系統(tǒng)中的數(shù)據(jù)緩存問(wèn)題,文中基于Xilinx Kintex-7 FPGA MIG_v1.9 IP核進(jìn)行了DDR3 SDRAM控制器的編寫,分析并提出了提高帶寬利用率的方法。最終將其進(jìn)行類FIFO接口的封裝,屏蔽掉了DDR3 IP核復(fù)雜的用戶接口,為DDR3數(shù)據(jù)流緩存的實(shí)現(xiàn)提供便利。系統(tǒng)測(cè)試表明,該設(shè)計(jì)滿足大容量數(shù)據(jù)緩存要求,并具有較強(qiáng)的可移植性。
FPGA;DDR3 SDRAM;MIG;讀寫控制器;狀態(tài)機(jī)
隨著寬帶雷達(dá)技術(shù)的發(fā)展,超高速和寬帶采樣已成為基本要求[1],超高速采集系統(tǒng)需要相匹配的數(shù)據(jù)緩存設(shè)計(jì),DDR3 SDRAM是當(dāng)前最常用的高效方案[2-4]。
DDR SDRAM是同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,其采用雙倍速率存取,數(shù)據(jù)在工作時(shí)鐘的上升沿和下降沿采樣,有效提升了存儲(chǔ)速率。DDR SDRAM系列存儲(chǔ)設(shè)備經(jīng)歷了DDR、DDR2和DDR3幾個(gè)階段。DDR3 SDRAM在降低系統(tǒng)功耗的同時(shí)提高了系統(tǒng)性能,其利用“Fly_By”和動(dòng)態(tài)片上匹配技術(shù)對(duì)于信號(hào)完整性的改善效果明顯[5]。本文基于Xilinx的MIG_v1.9 IP核進(jìn)行了DDR3 SDRAM控制器的編寫,并在Kintex-7 FPGA芯片上完成了功能測(cè)試及實(shí)現(xiàn)。
設(shè)計(jì)選用8片Mircon公司型號(hào)為MT42J128M16的芯片作為緩存區(qū)。每片芯片的數(shù)據(jù)位寬為8 bit,行地址復(fù)用14條地址線,列地址復(fù)用10條地址線,共有8個(gè)Bank。每片容量為128 MB,8片DDR3共同組成位寬為64 bit,容量為1 GB的緩存區(qū)域[6]。
本文中DDR3控制器是基于Xilinx MIG IP核設(shè)計(jì)的。用戶首先需要在MIG IP核配置頁(yè)面對(duì)DDR3芯片型號(hào)、總線位寬、速度等級(jí)、引腳分配等參數(shù)進(jìn)行設(shè)置。設(shè)置完成后即可得到DDR3控制器接口解決方案, Xilinx Kintex-7系列FPGA內(nèi)存接口解決方案如圖1所示[7]。
該方案由用戶控制模塊、用戶接口模塊、內(nèi)存控制模塊和物理層接口模塊4部分組成。用戶接口模塊位于設(shè)計(jì)的最前端,通過(guò)呈現(xiàn)一個(gè)扁平化的地址空間和緩沖器,提供了一個(gè)簡(jiǎn)單的用戶接口,用以代替本地接口進(jìn)行數(shù)據(jù)的讀寫操作。內(nèi)存控制模塊位于用戶接口模塊和物理層模塊之間,其前端為用戶接口模塊提供本地接口。本地接口支持用戶設(shè)計(jì)提交存儲(chǔ)器讀寫請(qǐng)求,并提供用戶設(shè)計(jì)模塊與外部存儲(chǔ)設(shè)備之間的數(shù)據(jù)傳輸機(jī)制。內(nèi)存控制模塊還提供了一個(gè)具有重排序的功能選項(xiàng),可以對(duì)接收到的請(qǐng)求進(jìn)行重新排序,進(jìn)而優(yōu)化數(shù)據(jù)傳輸?shù)耐掏铝考皶r(shí)延。內(nèi)存控制器后端連接至物理層接口,并處理所有該模塊的接口請(qǐng)求。物理層接口前端連接至內(nèi)存控制器模塊,后端連接外部存儲(chǔ)設(shè)備,其主要功能是捕獲DDR3發(fā)出的數(shù)據(jù),產(chǎn)生DDR3所需要的控制指令信號(hào),并通過(guò)輸入輸出緩存發(fā)送所有DDR3的控制信號(hào)、地址信號(hào)以及數(shù)據(jù)信號(hào),同時(shí)保證指令與地址、數(shù)據(jù)的同步和信號(hào)的維持[5]。
用戶使用時(shí),只需設(shè)計(jì)DDR3讀寫控制模塊即可通過(guò)IP核對(duì)DDR3進(jìn)行讀寫操作。app_rdy信號(hào)是用戶接口模塊準(zhǔn)備就緒的標(biāo)識(shí),在進(jìn)行讀操作時(shí),只需在app_rdy信號(hào)為1時(shí)更新讀地址即可,讀操作時(shí)序如圖2所示[7]。而寫操作相對(duì)復(fù)雜,若要成功進(jìn)行寫操作,則必須保證寫地址和寫數(shù)據(jù)都有效,而寫地址和寫數(shù)據(jù)不必同時(shí)有效,可以相差幾個(gè)周期,當(dāng)用戶接口反饋的app_rdy信號(hào)和用戶控制的app_en信號(hào)同時(shí)為1時(shí),寫操作指令app_cmd以及寫地址app_addr有效。而對(duì)于需要寫入的數(shù)據(jù)app_wdf_data來(lái)說(shuō),只有當(dāng)用戶接口反饋的app_wdf_rdy信號(hào)和用戶控制的app_wdf_wren信號(hào)同時(shí)拉高時(shí)才是有效的。寫操作對(duì)應(yīng)的時(shí)序如圖3所示[7]。
圖1 Xilinx Kintex-7 FPGA內(nèi)存接口解決方案
圖2 讀操作時(shí)序圖
圖3 寫操作時(shí)序圖
本文基于Verilog HDL硬件描述語(yǔ)言[8],設(shè)計(jì)如圖4所示的狀態(tài)機(jī)實(shí)現(xiàn)DDR3的連續(xù)寫操作。在IDLE狀態(tài)下,當(dāng)DDR3 IP核完成校準(zhǔn)后,經(jīng)過(guò)幾十μs的延時(shí),寫地址和寫數(shù)據(jù)被同時(shí)送入IP核,狀態(tài)機(jī)進(jìn)入WRITE狀態(tài)。如果寫地址與寫數(shù)據(jù)均得到響應(yīng)(app_rdy & app_wdf_rdy為1),寫地址和寫數(shù)據(jù)將得到更新,狀態(tài)機(jī)繼續(xù)處于WRITE狀態(tài)。如果只有寫數(shù)據(jù)得到響應(yīng)(!app_rdy & app_wdf_rdy為1),則停止寫數(shù)據(jù)更新,狀態(tài)機(jī)進(jìn)入WAIT1狀態(tài),待寫地址得到響應(yīng)后,再更新寫地址和寫數(shù)據(jù),并返回到WRITE狀態(tài)。如果只有寫地址得到響應(yīng)(app_rdy & !app_wdf_rdy為1),則停止寫地址更新,進(jìn)入WAIT2狀態(tài),待寫數(shù)據(jù)得到響應(yīng)后,更新寫地址和寫數(shù)據(jù),并返回WRITE狀態(tài)。經(jīng)實(shí)際測(cè)試狀態(tài)WAIT2并不會(huì)出現(xiàn),所以可以將WAIT2狀態(tài)去掉,對(duì)狀態(tài)機(jī)進(jìn)行優(yōu)化。
圖4 DDR3連續(xù)寫控制模塊狀態(tài)機(jī)
本文設(shè)計(jì)的狀態(tài)機(jī),通過(guò)對(duì)IP核的控制,成功實(shí)現(xiàn)了DDR3連續(xù)寫操作。用Chipscope軟件進(jìn)行信號(hào)觀測(cè),波形如圖5所示。由于連續(xù)讀操作比較簡(jiǎn)單,文中不再贅述。
圖5 DDR3連續(xù)寫操作Chipscope相關(guān)信號(hào)波形
為滿足高速數(shù)據(jù)傳輸?shù)囊?,DDR3需要保證較高的帶寬利用率。DDR3的極限速率為兩倍工作時(shí)鐘頻率與數(shù)據(jù)總線位寬的乘積。但是,DDR3的讀寫共用同一組數(shù)據(jù)總線,同時(shí)DDR3內(nèi)部是以BANK/行/列的形式組織起來(lái)的。在對(duì)新的BANK/行進(jìn)行讀寫前,需要執(zhí)行預(yù)充命令和激活命令等[9-10]。同時(shí)不同指令之間也有各種時(shí)間間隙要求。因此,DDR3的實(shí)際傳輸速率與極限速率有一定差距。根據(jù)使用方式的不同,DDR3的接口帶寬利用率會(huì)存在差異[11-13]。
本文通過(guò)測(cè)試不同使用情形下DDR3的帶寬利用率來(lái)尋求具有較高效率的讀寫控制方式。本測(cè)試計(jì)算帶寬效率的方式是,向IP核中輸入指定的激勵(lì),觀察DDR3芯片接口上的有效數(shù)據(jù)所占的比例,由此計(jì)算出有效帶寬。
本文對(duì)以下3種DDR3讀寫方式進(jìn)行了帶寬利用率的測(cè)試:
(1)固定Bank多行切換測(cè)試。單Bank內(nèi),每完成一次寫操作,則進(jìn)入下一個(gè)行的相同列。由于兩列的打開操作有時(shí)間間隙要求,打開列到寫操作也有時(shí)間間隙要求,導(dǎo)致單Bank內(nèi)行切換時(shí),測(cè)得的帶寬利用率較低,僅為11%;
(2)讀寫切換測(cè)試。對(duì)DDR3同一地址空間,每進(jìn)行完1次寫操作之后,進(jìn)行1次讀操作。由于相鄰讀寫操作間有時(shí)間間隙要求,導(dǎo)致該方式下,帶寬利用率較低,僅為10.7%。接著按照先進(jìn)行N次寫操作,再進(jìn)行N次讀操作的讀寫方式進(jìn)行測(cè)試,其結(jié)果記錄如表1所示;
(3)兩Bank不換行平滑過(guò)渡測(cè)試。先在Bank0的同一個(gè)行內(nèi)連續(xù)寫8次然后過(guò)渡到Bank1的同一個(gè)行內(nèi)連續(xù)寫8次。結(jié)果顯示,在Bank0的寫操作過(guò)程中打開Bank1的一個(gè)Row,而不影響B(tài)ank0的寫操作。由于提前了足夠的時(shí)間打開Bank1,那么等Bank0的寫操作結(jié)束后,可以直接平滑的過(guò)渡到Bank1的寫操作階段,中間沒有等待。該方式下,帶寬利用率為91%。
經(jīng)測(cè)試項(xiàng)驗(yàn)證可發(fā)現(xiàn):Xilinx MIG IP核對(duì)DDR3芯片進(jìn)行按地址連續(xù)存儲(chǔ),效率較高。但Xilinx MIG IP核對(duì)DDR3的隨機(jī)地址存取效率比較低。使讀寫效率降低的主要原因有:同Bank行切換、讀寫切換、IP核Bank管理方式。故可采取以下方式提高DDR3帶寬利用率:(1)降低讀寫切換的頻率;(2)采用連續(xù)地址存取的方式,減少Bank和行的切換;(3)在對(duì)MIG IP核進(jìn)行配置時(shí),用戶接口地址映射方式采用“ROW—BANK—COLUMN”方式,降低行切換的頻率。
表1 先寫后讀:先寫N個(gè)數(shù)據(jù),然后讀N個(gè)數(shù)據(jù)
為便于DDR3模塊與其他模塊對(duì)接,方便用戶的使用,對(duì)其進(jìn)行類FIFO接口封裝[14-15],整個(gè)模塊結(jié)構(gòu)框圖如圖6所示??梢姺庋b后的DDR3模塊外部接口與FIFO非常相似,因此有效提升了使用的便捷性。DDR3模塊是由寫FIFO模塊、讀FIFO模塊、DDR3讀寫控制模塊、DDR3 IP核4部分組成。寫FIFO模塊用來(lái)接收數(shù)據(jù)。讀FIFO模塊用來(lái)輸出從DDR3內(nèi)讀取的數(shù)據(jù)。DDR3讀寫控制模塊用來(lái)控制DDR3的讀寫操作,合理切換讀寫狀態(tài),保證讀寫效率。DDR3 IP核模塊為FPGA與DDR3的物理接口。
圖6 類FIFO接口封裝結(jié)構(gòu)圖
可以看出,DDR3模塊設(shè)計(jì)的關(guān)鍵是讀寫控制狀態(tài)機(jī)的編寫。此狀態(tài)機(jī)共有3種狀態(tài),IDLE狀態(tài)下不進(jìn)行讀寫操作,WRITE狀態(tài)下進(jìn)行連續(xù)寫操作,READ狀態(tài)下進(jìn)行連續(xù)讀操作。根據(jù)上述分析,為保證較高的讀寫效率就要避免頻繁的讀寫切換。因此,寫FIFO的編程空信號(hào)wr_fifo_prog_empty和讀FIFO的編程滿信號(hào)rd_fifo_prog_full均采用雙門限的設(shè)置。若寫FIFO滿,則數(shù)據(jù)會(huì)丟失,而讀FIFO滿只會(huì)使數(shù)據(jù)在DDR3內(nèi)緩存,因此,寫操作的優(yōu)先級(jí)高于讀操作,狀態(tài)機(jī)如圖7所示。
圖7 DDR3讀寫狀態(tài)機(jī)
為確保設(shè)計(jì)的可行性及可靠性,對(duì)編寫的DDR3讀寫控制器進(jìn)行板級(jí)驗(yàn)證,硬件測(cè)試中選用Xilinx公司的Kintex-7 FPGA以及Micron公司的DDR3 SDRAM芯片。DDR3工作頻率為500 MHz,經(jīng)測(cè)試其可對(duì)3 GB/s的數(shù)據(jù)流進(jìn)行穩(wěn)定緩存。
本文對(duì)DDR3讀寫狀態(tài)機(jī)進(jìn)行了設(shè)計(jì)與優(yōu)化,并對(duì)DDR3在不同讀寫方式下的帶寬利用率進(jìn)行了測(cè)試與分析,提出了保證帶寬率的相應(yīng)措施。在此基礎(chǔ)上,將FPGA的DDR3的讀寫控制模塊封裝成簡(jiǎn)單的類FIFO接口。并將其在Xilinx公司的Kintex-7系列FPGA芯片上實(shí)現(xiàn),工作穩(wěn)定可靠、有較高的工作效率、接口簡(jiǎn)單、可移植性高,為DDR3在高速數(shù)據(jù)流緩存中的應(yīng)用提供了便利。
[1] 楊劍,張?jiān)?宿紹瑩,等.高分辨寬帶雷達(dá)高速數(shù)據(jù)大容量存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(16):23-26.
[2] 董岱岳.基于FPGA的DDR3 SDRAM控制器設(shè)計(jì)[D].濟(jì)南:山東大學(xué):2015.
[3] 楊軍.基于FPGA的DDR3控制器IP設(shè)計(jì)與驗(yàn)證[D].南昌:南昌航空大學(xué),2015.
[4] 基于FPGA的DDR3內(nèi)存控制器的研究與設(shè)計(jì)[D].成都:成都理工大學(xué),2015.
[5] 黃萬(wàn)偉.Xilinx FPGA應(yīng)用進(jìn)階[M].北京:電子工業(yè)出版社,2014.
[6] JEDEC Organization.JEDEC standard DDR3 SDRAM specification [M].USA: JEDEC Organization,2008.
[7] Xilinx Corporation.Xilinx corporation 7 series devices memory interface solutions (UG586) [M].PD,USA: Xilinx Corporation,2013.
[8] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2008.
[9] 王正宇.DDR3內(nèi)存控制器的IP核設(shè)計(jì)及FPGA驗(yàn)證[D].蘭州:蘭州交通大學(xué),2012.
[10] 萬(wàn)軼.高性能DDR3存儲(chǔ)控制器的研究與實(shí)現(xiàn)[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2008.
[11] 馬志超.DDR3控制器的設(shè)計(jì)與驗(yàn)證[D].西安:西安電子科技大學(xué),2013.
[12] 李逍楠.DDR3控制器的研究[D].西安:西安電子科技大學(xué),2013.
[13] 孟曉東.基于FPGA的DDR3控制器設(shè)計(jì)與驗(yàn)證[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2012.
[14] 張剛,賈建超,趙龍.基于FPGA的DDR3 SDRAM控制器設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技,2014,27(1):70-73.
[15] 佘顏.基于DDR3控制器的高速存儲(chǔ)接口系統(tǒng)的設(shè)計(jì)與驗(yàn)證[D].西安:西安電子科技大學(xué),2015.
Design and Optimization of DDR3 SDRAM Controller Based on FPGA
SONG Ming,ZHAO Yingxiao,LIN Qianqiang
(School of Electronic Science and Engineering,National University of Defense Technology,Changsha 410073,China)
In order to solve the problem of data cache in ultrahigh speed sampling system, a DDR3 SDRAM controller is designed in this paper based on Kintex-7 FPGA MIG_v1.9 IP core. A method to improve the bandwidth utilization ratio is proposed and analyzed. Finally, it is packaged as the FIFO interface, while shielding the complex user interface of DDR3 IP core, so that the DDR3 reading and writing operation can be as simple as FIFO’s. System tests show that the proposed method meets the requirements of large capacity data cache, and provides with high portability.
FPGA;DDR3 SDRAM;MIG;reading-writing controller;state machine
2016- 05- 30
宋明(1992-),男,碩士研究生。研究方向:信息獲取等。趙英瀟(1990-),男,博士研究生。研究方向:數(shù)字陣列雷達(dá)信號(hào)處理。林錢強(qiáng)(1983-),男,博士,講師。研究方向:高速數(shù)據(jù)采集和雷達(dá)信號(hào)處理。
10.16180/j.cnki.issn1007-7820.2016.11.015
TN919.3
A
1007-7820(2016)11-047-04