摘要:為解決超高速采集系統(tǒng)中的數(shù)據(jù)緩存問題,文中基于Xilinx Kintex-7 FPGA MIG_v1.9 IP核進行了DDR3 SDRAM控制器的編寫,分析并提出了提高帶寬利用率的方法。最終將其進行類FIFO接口的封裝,屏蔽掉了DDR3 IP核復(fù)雜的用戶接口,為DDR3數(shù)據(jù)流緩存的實現(xiàn)提供便利。系統(tǒng)測試表明,該設(shè)計滿足大容量數(shù)據(jù)緩存要求,并具有較強的可移植性。
隨著寬帶雷達技術(shù)的發(fā)展,超高速和寬帶采樣已成為基本要求[1],超高速采集系統(tǒng)需要相匹配的數(shù)據(jù)緩存設(shè)計,DDR3 SDRAM是當(dāng)前最常用的高效方案[2-4]。
DDR SDRAM是同步動態(tài)隨機存儲器,其采用雙倍速率存取,數(shù)據(jù)在工作時鐘的上升沿和下降沿采樣,有效提升了存儲速率。DDR SDRAM系列存儲設(shè)備經(jīng)歷了DDR、DDR2和DDR3幾個階段。DDR3 SDRAM在降低系統(tǒng)功耗的同時提高了系統(tǒng)性能,其利用“FlyBy”和動態(tài)片上匹配技術(shù)對于信號完整性的改善效果明顯[5]。本文基于Xilinx的MIG_v1.91 IP核進行了DDR3 SDRAM控制器的編寫,并在Kintex-7 FPGA芯片上完成了功能測試及實現(xiàn)。
?
1 DDR3連續(xù)讀寫操作的FPGA 實現(xiàn)
設(shè)計選用8片Mircon公司型號為 MT42J128M16的芯片作為緩存區(qū)。每片芯片的數(shù)據(jù)位寬為8bit,行地址復(fù)用14條地址線,列地址復(fù)用10條地址線,共有8個Bank。每片容量為128MB,8片DDR3共同組成位寬為64bit,容量為1GB的緩存區(qū)域[6]。
本文中DDR3控制器是基于Xilinx MIG IP核設(shè)計的。用戶首先需要在MIG IP核配置頁面對DDR3芯片型號、總線位寬、速度等級、引腳分配等參數(shù)進行設(shè)置。設(shè)置完成后即可得到DDR3控制器接口解決方案,Xilinx Kintex-7系列FPGA內(nèi)存接口解決方案如圖1所示[7]。
該方案由用戶控制模塊、用戶接口模塊、內(nèi)存控制模塊和物理層接口模塊4部分組成。用戶接口模塊位于設(shè)計的最前端,通過呈現(xiàn)一個扁平化的地址空間和緩沖器,提供了一個簡單的用戶接口,用以代替本地接口進行數(shù)據(jù)的讀寫操作。內(nèi)存控制模塊位于用戶接口模塊和物理層模塊之間,其前端為用戶接口模塊提供本地接口。本地接口支持用戶設(shè)計提交存儲器讀寫請求,并提供用戶設(shè)計模塊與外部存儲設(shè)備之間的數(shù)據(jù)傳輸機制。內(nèi)存控制模塊還提供了一個具有重排序的功能選項,可以對接收到的請求進行重新排序,進而優(yōu)化數(shù)據(jù)傳輸?shù)耐掏铝考皶r延。內(nèi)存控制器后端連接至物理層接口,并處理所有該模塊的接口請求。物理層接口前端連接至內(nèi)存控制器模塊,后端連接外部存儲設(shè)備,其主要功能是捕獲DDR3發(fā)出的數(shù)據(jù),產(chǎn)生DDR3所需要的控制指令信號,并通過輸入輸出緩存發(fā)送所有DDR3的控制信號、地址信號以及數(shù)據(jù)信號,同時保證指令與地址、數(shù)據(jù)的同步和信號的維持[5]。
用戶使用時,只需設(shè)計DDR3讀寫控制模塊即可通過IP核對DDR3進行讀寫操作。app_rdy信號是用戶接口模塊準備就緒的標識,在進行讀操作時,只需在app_rdy信號為1時更新讀地址即可,讀操作時序如圖2所示[7]。而寫操作相對復(fù)雜,若要成功進行寫操作,則必須保證寫地址和寫數(shù)據(jù)都有效,而寫地址和寫數(shù)據(jù)不必同時有效,可以相差幾個周期,當(dāng)用戶接口反饋的app_rdy信號和用戶控制的app_en信號同時為1時,寫操作指令app_cmd以及寫地址app_addr有效。而對于需要寫入的數(shù)據(jù)app_wdf_data來說,只有當(dāng)用戶接口反饋的app_wdf_rdy信號和用戶控制的app_wdf_wren信號同時拉高時才是有效的。寫操作對應(yīng)的時序如圖3所示[7]。
圖1 Xilinx Kintex-7 FPGA內(nèi)存接口解決方案
圖2 讀操作時序圖
圖3 寫操作時序圖
本文基于Verilog HDL 硬件描述語言[8],設(shè)計如圖4所示的狀態(tài)機實現(xiàn)DDR3的連續(xù)寫操作。在IDLE狀態(tài)下,當(dāng)DDR3 IP核完成校準后,經(jīng)過幾十μs的延時,寫地址和寫數(shù)據(jù)被同時送入IP核,狀態(tài)機進入WRITE狀態(tài)。如果寫地址與寫數(shù)據(jù)均得到響應(yīng)(app_rdy & app_wdf_rdy為1),寫地址和寫數(shù)據(jù)將得到更新,狀態(tài)機繼續(xù)處于WRITE狀態(tài)。如果只有寫數(shù)據(jù)得到響應(yīng)(! app_rdy & app_wdf_rdy為1),則停止寫數(shù)據(jù)更新,狀態(tài)機進入WAIT1狀態(tài),待寫地址得到響應(yīng)后,再更新寫地址和寫數(shù)據(jù),并返回到WRITE狀態(tài)。如果只有寫地址得到響應(yīng)(app_rdy & ! app_wdf_rdy為1),則停止寫地址更新,進入WAIT2狀態(tài),待寫數(shù)據(jù)得到響應(yīng)后,更新寫地址和寫數(shù)據(jù),并返回WRITE狀態(tài)。經(jīng)實際測試狀態(tài)WAIT2并不會出現(xiàn),所以可以將WAIT2狀態(tài)去掉,對狀態(tài)機進行優(yōu)化。
圖4 DDR3連續(xù)寫控制模塊狀態(tài)機"
本文設(shè)計的狀態(tài)機,通過對IP核的控制,成功實現(xiàn)了DDR3連續(xù)寫操作。用 Chipscope軟件進行信號觀測,波形如圖5所示。由于連續(xù)讀操作比較簡單,文中不再贅述。
圖5 DDR3連續(xù)寫操作Chipscope相關(guān)信號波形
2 DDR3讀寫效率測試與分析
為滿足高速數(shù)據(jù)傳輸?shù)囊?,DDR3需要保證較高的帶寬利用率。DDR3的極限速率為兩倍工作時鐘頻率與數(shù)據(jù)總線位寬的乘積。但是,DDR3的讀寫共用同一組數(shù)據(jù)總線,同時DDR3內(nèi)部是以BANK/行/列的形式組織起來的。在對新的BBANK/行進行讀寫前,需要執(zhí)行預(yù)充命令和激活命令等[9-10]。同時不同指令之間也有各種時間間隙要求。因此,DDR3的實際傳輸速率與極限速率有一定差距。根據(jù)使用方式的不同,DDR3的接口帶寬利用率會存在差異[11-13]。
本文通過測試不同使用情形下DDR3的帶寬利用率來尋求具有較高效率的讀寫控制方式。本測試計算帶寬效率的方式是,向IP核中輸入指定的激勵,觀察DDR3芯片接口上的有效數(shù)據(jù)所占的比例,由此計算出有效帶寬。
本文對以下3種DDR3讀寫方式進行了帶寬利用率的測試:
(1)固定Bank多行切換測試。單Bank內(nèi),每完成一次寫操作,則進入下一個行的相同列。由于兩列的打開操作有時間間隙要求,打開列到寫操作也有時間間隙要求,導(dǎo)致單Bank內(nèi)行切換時,測得的帶寬利用率較低,僅為11%;
(2)讀寫切換測試。對DDR3同一地址空間,每進行完1次寫操作之后,進行1次讀操作。由于相鄰讀寫操作間有時間間隙要求,導(dǎo)致該方式下,帶寬利用率較低,僅為10.7%。接著按照先進行N次寫操作,再進行N次讀操作的讀寫方式進行測試,其結(jié)果記錄如表1所示;
(3)兩Bank不換行平滑過渡測試。先在Bank0的同一個行內(nèi)連續(xù)寫8次然后過渡到Bank1的同一個行內(nèi)連續(xù)寫8次。結(jié)果顯示,在Bank0的寫操作過程中打開Bank1的一個Row,而不影響B(tài)ank0的寫操作。由于提前了足夠的時間打開Bank1,那么等Bank0的寫操作結(jié)束后,可以直接平滑的過渡到Bank1的寫操作階段,中間沒有等待。該方式下,帶寬利用率為91%。
經(jīng)測試項驗證可發(fā)現(xiàn):Xilinx MIG IP 核對DDR3芯片進行按地址連續(xù)存儲,效率較高。但Xilinx MIG IP 核對DDR3的隨機地址存取效率比較低。使讀寫效率降低的主要原因有:同Bank行切換、讀寫切換、IP核Bank管理方式。故可采取以下方式提高DDR3帶寬利用率:(1)降低讀寫切換的頻率;(2)采用連續(xù)地址存取的方式,減少Bank和行的切換;(3)在對MIG IP 核進行配置時,用戶接口地址映射方式采用“ROW——BANK——COLUMN”方式,降低行切換的頻率。
3 DDR3讀寫控制模塊的類FIFO封裝
為便于DDR3模塊與其他模塊對接,方便用戶的使用,對其進行類FIFO接口封裝[14-15],整個模塊結(jié)構(gòu)框圖如圖6所示。可見封裝后的DDR3模塊外部接口與FIFO非常相似,因此有效提升了使用的便捷性。DDR3模塊是由寫FIFO模塊、讀FIFO模塊、DDR3讀寫控制模塊、DDR3 IP 核4部分組成。寫FIFO模塊用來接收數(shù)據(jù)。讀FIFO模塊用來輸出從DDR3內(nèi)讀取的數(shù)據(jù)。DDR3讀寫控制模塊用來控制DDR3的讀寫操作,合理切換讀寫狀態(tài),保證讀寫效率。DDR3 IP核模塊為FPGA與DDR3的物理接口。
圖6 類FIFO接口封裝結(jié)構(gòu)圖
可以看出,DDR3模塊設(shè)計的關(guān)鍵是讀寫控制狀態(tài)機的編寫。此狀態(tài)機共有3種狀態(tài),IDLE狀態(tài)下不進行讀寫操作,WRITE狀態(tài)下進行連續(xù)寫操作,READ狀態(tài)下進行連續(xù)讀操作。根據(jù)上述分析,為保證較高的讀寫效率就要避免頻繁的讀寫切換。因此,寫FIFO的編程空信號
wr_fifo_prog_empty和讀FIFO的編程滿信號rd_fifo_prog_full均采用雙門限的設(shè)置。若寫FIFO滿,則數(shù)據(jù)會丟失,而讀FIFO滿只會使數(shù)據(jù)在DDR3內(nèi)緩存,因此,寫操作的優(yōu)先級高于讀操作,狀態(tài)機如圖7所示。
圖7 DDR3讀寫狀態(tài)機
為確保設(shè)計的可行性及可靠性,對編寫的DDR3讀寫控制器進行板級驗證,硬件測試中選用Xilinx公司的Kintex-7 FPGA以及Micron公司的DDR3 SDRAM芯片。DDR3工作頻率為500MHz,經(jīng)測試其可對3GB/s的數(shù)據(jù)流進行穩(wěn)定緩存。
4 結(jié)束語
本文對DDR3讀寫狀態(tài)機進行了設(shè)計與優(yōu)化,并對DDR3在不同讀寫方式下的帶寬利用率進行了測試與分析,提出了保證帶寬率的相應(yīng)措施。在此基礎(chǔ)上,將FPGA的DDR3的讀寫控制模塊封裝成簡單的類FIFO接口。并將其在Xilinx公司的Kintex-7 系列FPGA芯片上實現(xiàn),工作穩(wěn)定可靠、有較高的工作效率、接口簡單、可移植性高,為DDR3在高速數(shù)據(jù)流緩存中的應(yīng)用提供了便利。
評論
查看更多