摘要:為解決超高速采集系統(tǒng)中的數(shù)據(jù)緩存問題,文中基于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)測試表明,該設(shè)計(jì)滿足大容量數(shù)據(jù)緩存要求,并具有較強(qiáng)的可移植性。
隨著寬帶雷達(dá)技術(shù)的發(fā)展,超高速和寬帶采樣已成為基本要求[1],超高速采集系統(tǒng)需要相匹配的數(shù)據(jù)緩存設(shè)計(jì),DDR3 SDRAM是當(dāng)前最常用的高效方案[2-4]。
DDR SDRAM是同步動態(tài)隨機(jī)存儲器,其采用雙倍速率存取,數(shù)據(jù)在工作時(shí)鐘的上升沿和下降沿采樣,有效提升了存儲速率。DDR SDRAM系列存儲設(shè)備經(jīng)歷了DDR、DDR2和DDR3幾個(gè)階段。DDR3 SDRAM在降低系統(tǒng)功耗的同時(shí)提高了系統(tǒng)性能,其利用“FlyBy”和動態(tài)片上匹配技術(shù)對于信號完整性的改善效果明顯[5]。本文基于Xilinx的MIG_v1.91 IP核進(jìn)行了DDR3 SDRAM控制器的編寫,并在Kintex-7 FPGA芯片上完成了功能測試及實(shí)現(xiàn)。
?
1 DDR3連續(xù)讀寫操作的FPGA 實(shí)現(xiàn)
設(shè)計(jì)選用8片Mircon公司型號為 MT42J128M16的芯片作為緩存區(qū)。每片芯片的數(shù)據(jù)位寬為8bit,行地址復(fù)用14條地址線,列地址復(fù)用10條地址線,共有8個(gè)Bank。每片容量為128MB,8片DDR3共同組成位寬為64bit,容量為1GB的緩存區(qū)域[6]。
本文中DDR3控制器是基于Xilinx MIG IP核設(shè)計(jì)的。用戶首先需要在MIG IP核配置頁面對DDR3芯片型號、總線位寬、速度等級、引腳分配等參數(shù)進(jìn)行設(shè)置。設(shè)置完成后即可得到DDR3控制器接口解決方案,Xilinx Kintex-7系列FPGA內(nèi)存接口解決方案如圖1所示[7]。
該方案由用戶控制模塊、用戶接口模塊、內(nèi)存控制模塊和物理層接口模塊4部分組成。用戶接口模塊位于設(shè)計(jì)的最前端,通過呈現(xiàn)一個(gè)扁平化的地址空間和緩沖器,提供了一個(gè)簡單的用戶接口,用以代替本地接口進(jìn)行數(shù)據(jù)的讀寫操作。內(nèi)存控制模塊位于用戶接口模塊和物理層模塊之間,其前端為用戶接口模塊提供本地接口。本地接口支持用戶設(shè)計(jì)提交存儲器讀寫請求,并提供用戶設(shè)計(jì)模塊與外部存儲設(shè)備之間的數(shù)據(jù)傳輸機(jī)制。內(nèi)存控制模塊還提供了一個(gè)具有重排序的功能選項(xiàng),可以對接收到的請求進(jìn)行重新排序,進(jìn)而優(yōu)化數(shù)據(jù)傳輸?shù)耐掏铝考皶r(shí)延。內(nèi)存控制器后端連接至物理層接口,并處理所有該模塊的接口請求。物理層接口前端連接至內(nèi)存控制器模塊,后端連接外部存儲設(shè)備,其主要功能是捕獲DDR3發(fā)出的數(shù)據(jù),產(chǎn)生DDR3所需要的控制指令信號,并通過輸入輸出緩存發(fā)送所有DDR3的控制信號、地址信號以及數(shù)據(jù)信號,同時(shí)保證指令與地址、數(shù)據(jù)的同步和信號的維持[5]。
用戶使用時(shí),只需設(shè)計(jì)DDR3讀寫控制模塊即可通過IP核對DDR3進(jìn)行讀寫操作。app_rdy信號是用戶接口模塊準(zhǔn)備就緒的標(biāo)識,在進(jìn)行讀操作時(shí),只需在app_rdy信號為1時(shí)更新讀地址即可,讀操作時(shí)序如圖2所示[7]。而寫操作相對復(fù)雜,若要成功進(jìn)行寫操作,則必須保證寫地址和寫數(shù)據(jù)都有效,而寫地址和寫數(shù)據(jù)不必同時(shí)有效,可以相差幾個(gè)周期,當(dāng)用戶接口反饋的app_rdy信號和用戶控制的app_en信號同時(shí)為1時(shí),寫操作指令app_cmd以及寫地址app_addr有效。而對于需要寫入的數(shù)據(jù)app_wdf_data來說,只有當(dāng)用戶接口反饋的app_wdf_rdy信號和用戶控制的app_wdf_wren信號同時(shí)拉高時(shí)才是有效的。寫操作對應(yīng)的時(shí)序如圖3所示[7]。

圖1 Xilinx Kintex-7 FPGA內(nèi)存接口解決方案

圖2 讀操作時(shí)序圖

圖3 寫操作時(shí)序圖
本文基于Verilog HDL 硬件描述語言[8],設(shè)計(jì)如圖4所示的狀態(tài)機(jī)實(shí)現(xiàn)DDR3的連續(xù)寫操作。在IDLE狀態(tài)下,當(dāng)DDR3 IP核完成校準(zhǔn)后,經(jīng)過幾十μ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í)際測試狀態(tài)WAIT2并不會出現(xiàn),所以可以將WAIT2狀態(tài)去掉,對狀態(tài)機(jī)進(jìn)行優(yōu)化。

圖4 DDR3連續(xù)寫控制模塊狀態(tài)機(jī)"
本文設(shè)計(jì)的狀態(tài)機(jī),通過對IP核的控制,成功實(shí)現(xiàn)了DDR3連續(xù)寫操作。用 Chipscope軟件進(jìn)行信號觀測,波形如圖5所示。由于連續(xù)讀操作比較簡單,文中不再贅述。

圖5 DDR3連續(xù)寫操作Chipscope相關(guān)信號波形
2 DDR3讀寫效率測試與分析
為滿足高速數(shù)據(jù)傳輸?shù)囊?,DDR3需要保證較高的帶寬利用率。DDR3的極限速率為兩倍工作時(shí)鐘頻率與數(shù)據(jù)總線位寬的乘積。但是,DDR3的讀寫共用同一組數(shù)據(jù)總線,同時(shí)DDR3內(nèi)部是以BANK/行/列的形式組織起來的。在對新的BBANK/行進(jìn)行讀寫前,需要執(zhí)行預(yù)充命令和激活命令等[9-10]。同時(shí)不同指令之間也有各種時(shí)間間隙要求。因此,DDR3的實(shí)際傳輸速率與極限速率有一定差距。根據(jù)使用方式的不同,DDR3的接口帶寬利用率會存在差異[11-13]。
本文通過測試不同使用情形下DDR3的帶寬利用率來尋求具有較高效率的讀寫控制方式。本測試計(jì)算帶寬效率的方式是,向IP核中輸入指定的激勵(lì),觀察DDR3芯片接口上的有效數(shù)據(jù)所占的比例,由此計(jì)算出有效帶寬。
本文對以下3種DDR3讀寫方式進(jìn)行了帶寬利用率的測試:
(1)固定Bank多行切換測試。單Bank內(nèi),每完成一次寫操作,則進(jìn)入下一個(gè)行的相同列。由于兩列的打開操作有時(shí)間間隙要求,打開列到寫操作也有時(shí)間間隙要求,導(dǎo)致單Bank內(nèi)行切換時(shí),測得的帶寬利用率較低,僅為11%;
(2)讀寫切換測試。對DDR3同一地址空間,每進(jìn)行完1次寫操作之后,進(jìn)行1次讀操作。由于相鄰讀寫操作間有時(shí)間間隙要求,導(dǎo)致該方式下,帶寬利用率較低,僅為10.7%。接著按照先進(jìn)行N次寫操作,再進(jìn)行N次讀操作的讀寫方式進(jìn)行測試,其結(jié)果記錄如表1所示;
(3)兩Bank不換行平滑過渡測試。先在Bank0的同一個(gè)行內(nèi)連續(xù)寫8次然后過渡到Bank1的同一個(gè)行內(nèi)連續(xù)寫8次。結(jié)果顯示,在Bank0的寫操作過程中打開Bank1的一個(gè)Row,而不影響B(tài)ank0的寫操作。由于提前了足夠的時(shí)間打開Bank1,那么等Bank0的寫操作結(jié)束后,可以直接平滑的過渡到Bank1的寫操作階段,中間沒有等待。該方式下,帶寬利用率為91%。
經(jīng)測試項(xiàng)驗(yàn)證可發(fā)現(xiàn):Xilinx MIG IP 核對DDR3芯片進(jìn)行按地址連續(xù)存儲,效率較高。但Xilinx MIG IP 核對DDR3的隨機(jī)地址存取效率比較低。使讀寫效率降低的主要原因有:同Bank行切換、讀寫切換、IP核Bank管理方式。故可采取以下方式提高DDR3帶寬利用率:(1)降低讀寫切換的頻率;(2)采用連續(xù)地址存取的方式,減少Bank和行的切換;(3)在對MIG IP 核進(jìn)行配置時(shí),用戶接口地址映射方式采用“ROW——BANK——COLUMN”方式,降低行切換的頻率。

3 DDR3讀寫控制模塊的類FIFO封裝
為便于DDR3模塊與其他模塊對接,方便用戶的使用,對其進(jìn)行類FIFO接口封裝[14-15],整個(gè)模塊結(jié)構(gòu)框圖如圖6所示??梢姺庋b后的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è)計(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的編程空信號
wr_fifo_prog_empty和讀FIFO的編程滿信號rd_fifo_prog_full均采用雙門限的設(shè)置。若寫FIFO滿,則數(shù)據(jù)會丟失,而讀FIFO滿只會使數(shù)據(jù)在DDR3內(nèi)緩存,因此,寫操作的優(yōu)先級高于讀操作,狀態(tài)機(jī)如圖7所示。

圖7 DDR3讀寫狀態(tài)機(jī)
為確保設(shè)計(jì)的可行性及可靠性,對編寫的DDR3讀寫控制器進(jìn)行板級驗(yàn)證,硬件測試中選用Xilinx公司的Kintex-7 FPGA以及Micron公司的DDR3 SDRAM芯片。DDR3工作頻率為500MHz,經(jīng)測試其可對3GB/s的數(shù)據(jù)流進(jìn)行穩(wěn)定緩存。
4 結(jié)束語
本文對DDR3讀寫狀態(tài)機(jī)進(jìn)行了設(shè)計(jì)與優(yōu)化,并對DDR3在不同讀寫方式下的帶寬利用率進(jìn)行了測試與分析,提出了保證帶寬率的相應(yīng)措施。在此基礎(chǔ)上,將FPGA的DDR3的讀寫控制模塊封裝成簡單的類FIFO接口。并將其在Xilinx公司的Kintex-7 系列FPGA芯片上實(shí)現(xiàn),工作穩(wěn)定可靠、有較高的工作效率、接口簡單、可移植性高,為DDR3在高速數(shù)據(jù)流緩存中的應(yīng)用提供了便利。
電子發(fā)燒友App




















評論