基于FPGA的一種DDR4存儲模塊設計
0 引言
本文引用地址:http://dyxdggzs.com/article/202108/427904.htm隨著(zhù)通信技術(shù)的不斷發(fā)展,5G 技術(shù)作為當前新一代通信的熱點(diǎn)技術(shù)將面臨很多研究課題,除了要傳輸低速率、小帶寬數據外,還需要分析高速率、大帶寬數據,分析帶寬從100 MHz 提高到1 GHz,甚至更高帶寬。當前最大的難題就是5G 高速率的傳輸將會(huì )導致信號的帶寬變大,因此對這些高速率的數據流進(jìn)行實(shí)時(shí)處理將變得更加困難[1]。伴隨著(zhù)數字化的高速發(fā)展,目前存儲是大容量數據存儲系統的核心部分,甚至會(huì )影響到系統的性能。DDR最大的特點(diǎn)就是傳輸速率是時(shí)鐘的兩倍,數據同時(shí)在上升沿和下降沿同時(shí)采樣[2]。本文提出一種基于DDR4 SDRAM 的高速數據緩存技術(shù),主控器選用Xilinx 公司XCVU9P 系列FPGA 芯片,數據緩存器選用MT40A512M16HA-083E,通過(guò)對DDR4 SDRAM 的存儲尋址原理及DDR4 IP 核的讀寫(xiě)控制邏輯的研究,實(shí)現了在250 MHz 的時(shí)鐘下,DDR4SDRAM 能夠正常進(jìn)行讀寫(xiě)操作。經(jīng)過(guò)測試驗證,讀寫(xiě)數據正常,無(wú)數據丟失。
1 整體設計方案
整體設計方案使用模塊化,主要包括光口傳輸模塊、DDR4 存儲模塊、SRIO 接口模塊。本設計主要對控制芯片FPGA 內部邏輯進(jìn)行了優(yōu)化設計,其中包括DDR4控制器、不同時(shí)鐘域之間的數據緩存FIFO。整體方案傳輸流程如圖1 所示。
● 光口模塊:主要是接收采集模塊傳輸過(guò)來(lái)的數據。
● DDR4 存儲模塊:用于緩存數據,由于SRIO 接口的數據傳輸速率慢,需要通過(guò)DDR4 存儲模塊先將高速數據存儲到DDR4 中,然后再通過(guò)SRIO 的時(shí)鐘將數據傳輸給SRIO 接口模塊。
● SRIO 接口模塊:接收DDR4 讀出來(lái)的數據,然后傳輸給上位機進(jìn)行測試分析。
2 DDR4 SDRAM內部結構
DDR4 SDRAM 是一種內部可配置高速動(dòng)態(tài)隨機存儲器,其內部由多個(gè)Bank 組成,Bank 又是由很多行和列構成[3],DDR4 的尋址操作就是對行列地址進(jìn)行操作。DDR4存儲器有幾個(gè)重要概念,即Bank、Bank Group及Page, 例如512Mx16 的8 Gb 容量的DDR4, 內部主要包括2 個(gè)Bank Group,每個(gè)Bank Group 包括4 個(gè)Bank[3]。每個(gè)Bank 是由多個(gè)Page 組成的,通過(guò)多Page地址去選擇相應的Page。
3 DDR4控制器模塊設計
DDR4 控制器模塊設計如圖2 所示,將控制器分為IDLE、WR-DELAY、DDR-WR_s、RD_DELAY 和DDR_RD_s 五個(gè)模塊。
● IDLE:初始化狀態(tài)。主要對DDR4 內部的信號進(jìn)行初始化。當收到rd_en_reg 和rd_dat_s_reg 信號同時(shí)有效時(shí),將進(jìn)入RD_DELAY 狀態(tài);當收到wr_en_reg 信號有效時(shí),進(jìn)入WR_DELAY 狀態(tài);如果在該狀態(tài)下沒(méi)有收到相應的有效信號將繼續保持該狀態(tài)。
● WR-DELAY:寫(xiě)等待狀態(tài)。當在此狀態(tài)下收到rd_en_reg 有效時(shí)將會(huì )跳到IDLE 狀態(tài);在沒(méi)有收到rd_en_reg 有效時(shí),根據條件app_bl_cnt >= WR_BURST_CNT 來(lái)判斷是否已經(jīng)寫(xiě)到規定的數據量,如果已經(jīng)寫(xiě)到規定的數據量,將繼續保持在該狀態(tài),等待其他有效信號的到來(lái),如果沒(méi)有寫(xiě)到規定的數據量,判斷寫(xiě)FIFO的wr_prog_empty 信號,如果wr_prog_empt 無(wú)效則跳轉到DDR_WR_S狀態(tài),反之wr_prog_empt 有效, 則繼續在該狀態(tài)下等待有效信號到來(lái)。
● DDR_WR_s:寫(xiě)狀態(tài)。此狀態(tài)主要是往DDR4 里寫(xiě)數據,由于DDR4 IP 核內的Burst Length 設為了8[4],所以根據條件ddr_cnt ==WR_BURST_NUM 來(lái)判斷,當ddr_cnt 計數到了WR_BURST_NUM 的值時(shí),會(huì )跳轉到WR-DELAY 狀態(tài),如果沒(méi)有計數到WR_BURST_NUM 的值,則繼續保持在該狀態(tài)。
● RD_DELAY:讀等待狀態(tài)。當在此狀態(tài)下收到wr_en_reg 有效時(shí)將會(huì )跳轉到IDLE 狀態(tài);在沒(méi)有收到wr_en_reg 有效時(shí),根據讀FIFO 的rd_prog_full 信號來(lái)判斷,如果rd_prog_full 有效時(shí)則繼續在該狀態(tài)下等待,若無(wú)效則根據條件app_bl_cnt >= RD_BURST_CNT 來(lái)判斷,如果計數達到了設定的讀數據量,則會(huì )跳轉到IDLE 狀態(tài),若沒(méi)有到達設定的讀數據量,則跳轉到DDR_RD_s 狀態(tài)。
● DDR_RD_s:讀狀態(tài)。此狀態(tài)主要是將DDR4里的數據往外讀,根據條件ddr_cnt >= RD_BURST_CNT 來(lái)判斷,當計數達到設定的讀數據量時(shí)則會(huì )跳轉到IDLE 狀態(tài),如果沒(méi)有達到設定的讀數據量,且讀FIFO 的rd_prog_full 信號有效,則會(huì )繼續在該狀態(tài)下讀取DDR4 里的數據。
4 仿真驗證
采用Vivado 2018.3 軟件,其中FPGA 芯片型號為XCVU9P-flga2104-1-i,進(jìn)行開(kāi)發(fā)板上驗證。在光口模塊產(chǎn)生一組遞增數,通過(guò)光口將數據發(fā)送給DDR4 存儲模塊。通過(guò)在ILA 抓取相應的信號來(lái)觀(guān)察DDR4。圖3 是通過(guò)ILA 抓取的DDR4 內部信號狀態(tài)圖[5]。
圖3 DDR4寫(xiě)狀態(tài)1
通過(guò)圖3 可以看出,一開(kāi)始DDR4 處于初始化狀態(tài),當wr_en_reg 變成高電平時(shí),state 跳轉到WR_DELAY狀態(tài);當wr_prog_empty 變成低電平時(shí),state 跳轉到DDR_WR_s 狀態(tài)。之后,當app_bl_cnt 計數到96250時(shí),state 跳轉到WR_DELAY;如果對寫(xiě)數據部分放大,可以看出數據是遞增數;當rd_en_reg 和rd_dat_s_reg同時(shí)有效時(shí),state 從IDLE 狀態(tài)跳轉到RD_DELAY 狀態(tài),當rd_prog_full 為低電平時(shí),且app_bl_cnt 未計數到RD_BURST_CNT, 這個(gè)state 從RD_DELAY 狀態(tài)跳轉到DDR_RD_s 狀態(tài);當ddr_cnt 計數到768000 時(shí),state 從DDR_RD_s 狀態(tài)跳轉到IDLE 狀態(tài);圖4 是對讀數據部分放大,可以看出數據是正整數。
圖4 DDR4讀狀態(tài)3
5 結束語(yǔ)
本研究在Xilinx 公司的XCVU9P 系列FPGA 芯片上完成了DDR4 存儲模塊的讀寫(xiě)狀態(tài)機的設計、代碼編寫(xiě)以及驗證。使用其內部自帶的DDR4 SDRAM(MIG)IP 核進(jìn)行例化核設計。經(jīng)過(guò)開(kāi)發(fā)板上驗證,實(shí)現在250 MHz 時(shí)鐘下對DDR4 SDRAM 的讀/ 寫(xiě)操作,數據無(wú)丟失,能夠保證高速率、大帶寬數據正常傳輸,該傳輸機制具有良好的可靠性、適用性及有效性。
參考文獻:
[1] 袁行猛,陳亮,徐蘭天.基于CPRI協(xié)議的5G基帶數據傳輸技術(shù)的研究與實(shí)現[J].電子產(chǎn)品世界,2019,26(04):41-45+61.
[2] 張亞軍.實(shí)時(shí)頻譜儀的數字中頻處理設計與實(shí)現[D].成都:電子科技大學(xué),2017.
[3] 汪繼友.一種特殊應用場(chǎng)景下的DDR4寫(xiě)緩沖設計與驗證[D].合肥:安徽大學(xué),2019.
[4] 蘇健淵.基于A(yíng)RM+FPGA的多屏圖像顯示系統研究[D].西安:西安電子科技大學(xué),2014.
[ 5 ] 武春鋒. 基于DDR4 SDRAM的光電圖像實(shí)時(shí)存儲技術(shù)研究[D].北京:中國科學(xué)院大學(xué),2018.
(本文來(lái)源于《電子產(chǎn)品世界》雜志2021年8月期)
評論