国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Kintex?7 FPGA 的DDR3 SDRAM接口應(yīng)用研究

2018-01-02 23:35吳長瑞徐建清蔣景紅
現(xiàn)代電子技術(shù) 2017年24期

吳長瑞+徐建清+蔣景紅

摘 要: 針對FPGA中使用DDR3進(jìn)行大容量數(shù)據(jù)的緩存應(yīng)用背景,采用模塊化設(shè)計方法,提出基于Xilinx Kintex?7 FPGA的DDR3 SDRAM FIFO接口設(shè)計方案。在分析DDR3用戶接口特點和用戶接口時序的基礎(chǔ)上,對不同讀/寫模式進(jìn)行效率測試。借鑒標(biāo)準(zhǔn)FIFO的設(shè)計思想,結(jié)合DDR3 SDRAM控制器的特點,設(shè)計遍歷狀態(tài)機(jī)對該FIFO接口進(jìn)行讀/寫測試。最后,原型機(jī)平臺驗證了該接口不僅具有標(biāo)準(zhǔn)FIFO簡單易用的功能,而且具有存儲空間大等優(yōu)勢。

關(guān)鍵詞: DDR3 SDRAM; FIFO; FPGA; 遍歷狀態(tài)機(jī)

中圖分類號: TN43?34; TP332.3 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2017)24?0021?04

Abstract: Aiming at the application background of using DDR3 for large?capacity data caching in FPGA, a design scheme of DDR3 SDRAM FIFO interface based on Xilinx Kintex?7 FPGA is presented according to the modularized design method. Based on the analysis of DDR3 user interface characteristics and user interface time sequence, the efficiency of different read?write modes was tested. In combination with the design thought of standard FIFO and characteristics of DDR3 SDRAM controller, the traversal state machine is designed to perform the read?write test of the FIFO interface. The interface was verified with the prototype platform. The result demonstrates that the interface has the simple and easy?to?use functions of standard FIFO, and large storage space.

Keywords: DDR3 SDRAM; first?in first?out; field programmable gate array; traversal state machine

0 引 言

在高速實時數(shù)據(jù)信號處理領(lǐng)域,緩存是不可缺少的部分,利用FPGA外接DDR3 SDRAM(Synchronous Dynamic Random Access Memory) 進(jìn)行大容量數(shù)據(jù)緩存是近期研究的熱點。異步FIFO以其接口時序簡單、易于操作、讀寫速度高等優(yōu)點廣泛應(yīng)用于數(shù)據(jù)實時采集和跨時鐘域數(shù)據(jù)傳輸?shù)南到y(tǒng)中。由于工藝的限制,常見的FIFO芯片或者FPGA內(nèi)部的FIFO IP核容量非常有限,很難滿足數(shù)據(jù)吞吐量較大的系統(tǒng)。DDR3 SDRAM具有集成度高、讀寫速度快、價格便宜等優(yōu)點成為目前數(shù)據(jù)緩存的主流;但其操作復(fù)雜,增加了系統(tǒng)的開發(fā)周期和開發(fā)成本[1?2]。

本文提出基于FPGA的DDR3 SDRAM FIFO接口方案,該方案既具有DDR3 SDRAM容量大、成本低等優(yōu)點又具有異步FIFO接口簡單、易于操作的優(yōu)點。從用戶接口信號入手分析接口速度、接口效率和接口時序,在此基礎(chǔ)上設(shè)計基于DDR3的FIFO接口,并編寫測試程序?qū)υ撛O(shè)計進(jìn)行遍歷測試。目前,該方案已經(jīng)在某項目的高速數(shù)據(jù)緩存中得到了應(yīng)用。

1 DDR3 SDRAM

DDR3 SDRAM即同步動態(tài)隨機(jī)存取存儲器,同步是指Memory工作需要同步時鐘,內(nèi)部命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機(jī)是指數(shù)據(jù)不是線性依次存儲,而是由指定地址進(jìn)行數(shù)據(jù)讀寫。

與靜態(tài)隨機(jī)存儲器(Static Random Access Memory,SRAM)靠雙穩(wěn)態(tài)觸發(fā)器來記憶信息的原理不同,SDRAM是靠MOS電路中的柵極電容來記憶信息。由于電容上的電荷會泄漏,需要定時給與補(bǔ)充,所以SDRAM需要設(shè)置刷新電路。但SDRAM比SRAM集成度高、功耗低,成本也低,適于作大容量存儲器[3?4]。表1為兩種類型的存儲器特點。

2 DDR3用戶接口

本設(shè)計選用Micron公司MT41J128M16HA?15EIT 芯片,單片DDR3位寬16 b,深度128 Mb,即DDR3的容量為128 Mb×16 b=2 Gb。Xilinx DDR3控制器的作用是將雙時鐘沿觸發(fā)接口轉(zhuǎn)換為用戶易操作的單時鐘沿觸發(fā)接口[5]。

2.1 DDR3接口速度

表2為Kintex?7 FFG封裝系列FPGA在不同存儲器類型、不同Bank類型、不同F(xiàn)PGA速度等級等條件下DDR3最大接口速率[2]。

從表1中可以得出如下結(jié)論:

(1) 同等條件下,4:1 DDR3接口控制器的速率要高于2:1 DDR3接口控制器的速率。

(2) 同等條件下,HP (High Performance)Bank對應(yīng)接口控制器的速率要高于HR (High Range) Bank對應(yīng)接口控制器的速率;設(shè)計時根據(jù)不同應(yīng)用需求選擇HP Bank還是HR Bank。endprint

(3) 從文獻(xiàn)[6]還可以看出,同等條件下,F(xiàn)FG封裝的FPGA對應(yīng)DDR3接口控制器的速率要高于FBG封裝FPGA對應(yīng)的DDR3接口控制器的速率。

2.2 DDR3接口效率

由于DDR3存在預(yù)充電、刷新、行激活等操作,所以DDR3就存在一個接口效率的問題。 如果不考慮開銷,單純從時鐘和數(shù)據(jù)位寬的角度看,一個工作時鐘為533 MHz,數(shù)據(jù)位寬為16 b的DDR3顆粒,由于接口是雙倍數(shù)據(jù)速率(Double Data Rate,DDR),那么單片DDR3顆粒理論最大帶寬為8.528 GB/s。但是,DDR3的讀/寫共用同一組數(shù)據(jù)總線,同時DDR3內(nèi)部是以Bank/行/列的組織結(jié)構(gòu),讀/寫切換、同Bank不同行間切換都需要比較長的時間,同時不同指令之間也有各種時間間隙要求[7]。應(yīng)用模式不同,DDR3接口效率差異非常大[8]。本文對相同Bank內(nèi)單行寫不同數(shù)量的burst數(shù)據(jù)進(jìn)行分析研究。

測試方法為給Xilinx的DDR3控制器中輸入指定的激勵,利用chipscope查看讀/寫遍歷DDR3所需要的時間,根據(jù)DDR3的容量和遍歷讀/寫所用的時間計算出有效讀寫帶寬。

本設(shè)計采用的DDR3的芯片一行對應(yīng)1 024列。圖1為單行寫不同burst數(shù)量數(shù)據(jù)的示意圖。圖1(a)為每行寫一個burst數(shù)據(jù),然后切換到下一行,圖1(b)為每行寫2個burst數(shù)據(jù),然后切換到下一行,圖1(c)為每行寫4個burst數(shù)據(jù),然后切換到下一行。

相同Bank內(nèi)單行寫不同burst數(shù)量的讀/寫效率如表3所示。

經(jīng)驗證發(fā)現(xiàn),Xilinx 的DDR3控制器對于按地址連續(xù)讀/寫,效率還是比較高,可以達(dá)到89%~90%之間,但是Xilinx的DDR3控制器對于DDR3的隨機(jī)地址存儲效率比較低。單行單個burst讀/寫操作,讀/寫效率只有9.8%~12%。對于一些需要隨機(jī)讀/寫的應(yīng)用,提高帶寬的方法是避免同Bank行切換以及讀/寫頻繁切換。

2.3 DDR3接口時序

Xilinx DDR3 控制器接口信號包括地址信號、寫數(shù)據(jù)信號和讀數(shù)據(jù)信號等。DDR3讀/寫共用同一個地址信號。Kintex?7系列FPGA 外接的DDR3 僅支持突發(fā)長度BL(Burst Length)為8,即一個地址對應(yīng)讀/寫8個數(shù)據(jù)。DDR3 控制器內(nèi)部由兩部分組成,控制部分和數(shù)據(jù)部分??刂撇糠钟糜诳刂谱x操作還是寫操作,讀寫地址是什么;數(shù)據(jù)部分用于傳輸要寫入DDR3的數(shù)據(jù)或讀出的數(shù)據(jù)[10]。

從圖2可以得到連續(xù)寫命令的控制要點如下:

(1) 當(dāng)app_rdy(DDR3地址準(zhǔn)備好信號)和app_en(DDR3地址使能信號)同時拉高時,寫命令和寫地址有效或者讀命令和讀地址有效,這根據(jù)app_cmd的值判斷。

(2) 當(dāng)app_wdf_rdy(DDR3寫FIFO準(zhǔn)備好信號)和app_wdf_en(DDR3寫FIFO使能信號)同時拉高的時候,寫入數(shù)據(jù)有效。

(3) 讀命令和讀有效相差14~20個時鐘周期。

(4) Kintex?7系列的FPGA BL=8,寫數(shù)據(jù)位寬和讀數(shù)據(jù)位寬是顆粒位寬的8倍,所以一個命令地址對應(yīng)一個數(shù)據(jù)。

3 DDR3 FIFO接口設(shè)計

由于本設(shè)計采用型號MT41J128M16HA?15EIT,單片位寬16 b,深度128 M,即DDR3的容量為128 Mb×16 b=16 Mb×128 b,因此可以將DDR3 FIFO接口模擬成一個深度為16 Mb,位寬128 b的FIFO。

圖3為DDR3 FIFO接口模塊框圖。該模塊主要由寫FIFO(wr_fifo)、讀FIFO(rd_fifo)和讀控制模塊(wr_rd_ctrl)三部分組成。本節(jié)利用硬件描述語言Verilog HDL闡述讀/寫控制模塊在Kirtex?7中的主要實現(xiàn)過程。

wr_fifo 和rd_fifo的數(shù)據(jù)位寬和DDR3 控制器的用戶接口位寬一致。筆者看到的就是FIFO接口,wr_fifo為寫數(shù)據(jù)FIFO,用來緩存當(dāng)DDR3 SDRAM 控制器處于非空閑狀態(tài)時,外部發(fā)送過來的數(shù)據(jù),以免造成數(shù)據(jù)丟失;rd_fifo 為讀數(shù)據(jù)FIFO,用來緩存從DDR3 SDRAM 中讀出的數(shù)據(jù)。

為了防止DDR3 FIFO出現(xiàn)上溢或者下溢的現(xiàn)象,即防止FIFO寫滿或者讀空,設(shè)計中使用計數(shù)器ddr3_wr_cnt表示DDR3 FIFO中當(dāng)前緩存的數(shù)據(jù)個數(shù)。當(dāng)DDR3 FIFO寫操作時,ddr3_wr_cnt增加1;當(dāng)DDR3 FIFO讀操作時,ddr3_wr_cnt減少1;DDR3 FIFO讀控制模塊的部分Verilog代碼如下:

if(ddr3_app_en_wr & (ddr3_wr_cnt < 32′h1000000))

ddr3_wr_cnt <= ddr3_wr_cnt + 1′b1;

else if(ddr3_app_en_rd & (ddr3_wr_cnt > 32′h0))

ddr3_wr_cnt <= ddr3_wr_cnt ? 1′b1;

讀操作和寫操作共用同一個app_addr地址和app_cmd命令。所以DDR3 FIFO不能同時讀寫。設(shè)計默認(rèn)寫數(shù)據(jù)優(yōu)先級為高于讀數(shù)據(jù)優(yōu)先級,保證了緩存外部數(shù)據(jù)的實時性。

圖4給出了讀/寫控制模塊的狀態(tài)機(jī)跳轉(zhuǎn)圖。狀態(tài)描述如下:

(1) Idle 是狀態(tài)機(jī)的初始狀態(tài)。在這個狀態(tài)中,等待DDR3校準(zhǔn)完成,若完成,狀態(tài)機(jī)跳入Check data in狀態(tài)。

(2) Check data in狀態(tài):判斷是否進(jìn)行寫DDR3操作,當(dāng)wr_fifo 有數(shù)據(jù)且DDR3顆粒有空間并寫ready時,跳入Write狀態(tài),否則跳入Check data out判斷是否進(jìn)行讀DDR3操作。endprint

(3) Write狀態(tài):在該狀態(tài)讀wr_fifo的數(shù)據(jù)并寫入DDR3顆粒中。

(4) Check data out狀態(tài):在該狀態(tài)判斷是否進(jìn)行讀DDR3操作。當(dāng)rd_fifo 有數(shù)據(jù)且DDR3顆粒有空間并讀ready時,跳入Read狀態(tài),否則跳回Check data in狀態(tài),循環(huán)往復(fù)。

(5) Read狀態(tài): 在該狀態(tài)讀DDR3顆粒中的數(shù)據(jù)并寫入rd_fifo中。

圖5為DDR3遍歷讀寫狀態(tài)機(jī)跳轉(zhuǎn)圖。

狀態(tài)描述如下:

(1) Idle 是狀態(tài)機(jī)的初始狀態(tài)。在這個狀態(tài)中,等待DDR3校準(zhǔn)完成,若完成,狀態(tài)機(jī)跳入Write狀態(tài);否則繼續(xù)在Idle狀態(tài)等待。

(2) Write狀態(tài):對DDR3進(jìn)行寫操作遍歷,寫操作遍歷完成,跳入Write_Done狀態(tài)。

(3) Write_Done狀態(tài):讀/寫操作的中間狀態(tài),主要為計算DDR3的寫操作效率而設(shè)計。

(4) Read狀態(tài):對DDR3進(jìn)行讀操作遍歷,由于讀命令和讀數(shù)據(jù)有效之間有一定的時間延時,因此設(shè)計Read_Valid狀態(tài)。

(5) Read_Valid狀態(tài):等待DDR3的讀數(shù)據(jù)全部讀出并比較輸出數(shù)據(jù)的正確性。狀態(tài)機(jī)繼續(xù)跳入Write狀態(tài)。循環(huán)遍歷。其中設(shè)置如下寄存器完成對DDR3遍歷讀/寫效率測試:

ddr3_test_cnt: 完成一次DDR3的讀/寫操作遍歷,該計數(shù)器增1,用于查看遍歷次數(shù);

ddr3_error_flag:讀數(shù)據(jù)校驗出錯為1,ddr3_error_cnt為ddr3_error_flag的計數(shù)器;

ddr3_wr/rd_time: ddr3遍歷一遍寫/讀操作所需要的時間,用于計算DDR3的寫/讀效率。

利用板載Kintex?7 FPGA和DDR3 SRAM的板卡對本文設(shè)計的DDR3 FIFO模塊進(jìn)行讀/寫測試,即利用FIFO接口實現(xiàn)DDR3 SDRAM存儲空間的遍歷讀寫測試。圖6是Kintex?7 FPGA中使用Chipscope捕獲的DDR3 FIFO模塊時序圖。

4 結(jié) 語

本文設(shè)計的DDR3 FIFO模塊具有標(biāo)準(zhǔn)FIFO功能,筆者利用該模塊可以按照FIFO時序?qū)崿F(xiàn)DDR3 SDRAM存儲空間的遍歷讀寫測試[9?10]。DDR3 FIFO與標(biāo)準(zhǔn)FIFO主要有兩個不同點:DDR3 FIFO存儲空間比標(biāo)準(zhǔn)FIFO大,本文設(shè)計的DDR3 FIFO容量為1 Gb,而FPGA內(nèi)部標(biāo)準(zhǔn)FIFO容量為18 Kb或36 Kb;DDR3 FIFO 有讀/寫優(yōu)先級,寫優(yōu)先級高于讀優(yōu)先級,而標(biāo)準(zhǔn)FIFO沒有讀/寫優(yōu)先級。

參考文獻(xiàn)

[1] 馬其琪,鮑愛達(dá).基于DDR3 SDRAM的高速大容量數(shù)據(jù)緩存設(shè)計[J].計算機(jī)測量與控制,2015,23(9):3112?3118.

[2] 馬游春,王悅凱,丁寧.基于DDR3 SDRAM的高速視頻傳輸系統(tǒng)[J].電子技術(shù)應(yīng)用,2015,41(12):69?71.

[3] 李逍楠.DDR3控制器的研究[D].西安:西安電子科技大學(xué),2013.

[4] JEDEC Solid State Technology Association. JESD79?3F: DDR3 SDRAM specification [S]. Virginia: JEDEC Solid State Technology Association, 2012.

[5] Xilinx Co., Ltd. 7 series FPGAs memory interface solutions user guide [EB/OL]. [2012?10?20]. http://www.xilinx.com/support/documentation/ip_documentation/ug586_7Series_MIS.pdf.

[6] Xilinx Co., Ltd. Kintex?7 FPGAs data sheet: DC and AC switching characteristics [EB/OL]. [2015?02?11]. http://www.xilinx.com.

[7] 張剛,賈建超,趙龍.基于FPGA的DDR3 SDRAM控制器設(shè)計及實現(xiàn)[J].電子科技,2014,27(1):70?73.

[8] 殷曄,李麗斯,常路,等.基于FPGA的DDR3存儲控制的設(shè)計與驗證[J].計算機(jī)測量與控制,2015,23(3):969?971.

[9] Micron Technology Inc. DDR3 point?to?point design support [EB/OL]. [2013?06?13]. http://www.micron.com/~/media/Documents/Products/Technical%20Note/DRAM/tn4113_ddr3_point_to_point_design.pdf.

[10] Xilinx Co., Ltd. Achieving high performance DDR3 data rates in Virtex?7 and Kintex?7 FPGAs [EB/OL]. [2013?08?29]. http://www.xilinx.com/support/documentation/white_papers/wp383_Achieving_High_Performance_DDR3.pdf.endprint

梅州市| 深圳市| 德保县| 安新县| 乌什县| 陇西县| 阳春市| 宜川县| 临沭县| 开鲁县| 六盘水市| 宜阳县| 马龙县| 保亭| 东海县| 天等县| 华池县| 云林县| 保亭| SHOW| 巩留县| 介休市| 囊谦县| 左贡县| 孝感市| 调兵山市| 科技| 祥云县| 宝丰县| 江阴市| 紫阳县| 晋江市| 中宁县| 漳州市| 读书| 准格尔旗| 剑阁县| 太保市| 通榆县| 托克托县| 郸城县|