基于FPGA的一種DDR4存儲模塊設計
5G通信的主要特征包括“高速率、大帶寬”,為了滿足高速率、大帶寬數據的傳輸要求,需要一種存儲技術對數據進行存儲。本文就存儲技術結合DDR4協議,設計了一種DDR4傳輸機制,本研究采用高性能的XCVU9P系列的FPGA芯片作為控制芯片,使用其內部自帶的DDR4 SDRAM(MIG)IP核進行例化核設計。經過驗證,實現在250 MHz時鐘下對DDR4 SDRAM的讀/寫操作,數據無丟失,能夠保證高速率、大帶寬數據正常傳輸,該傳輸機制具有良好的可靠性、適用性及有效性。
關鍵詞:DDR4,高速率,大帶寬,FPGA
作者:謝晨、卓敏,安徽財經大學
隨著通信技術的不斷發展,5G技術作為當前新一代通信的熱點技術將面臨很多研究課題,除了要傳輸低速率、小帶寬數據外,還需要分析高速率、大帶寬數據,分析帶寬從100MHz提高到1GHz,甚至更高帶寬。當前最大的難題就是5G高速率的傳輸將會導致信號的帶寬變大,因此對這些高速率的數據流進行實時處理將變得更加困難[1]。伴隨著數字化的高速發展,目前存儲是大容量數據存儲系統的核心部分,甚至會影響到系統的性能。DDR最大的特點就是傳輸速率是時鐘的兩倍,數據同時在上升沿和下降沿同時采樣[2]。
本文提出一種基于DDR4 SDRAM的高速數據緩存技術,主控器選用Xilinx公司XCVU9P系列FPGA芯片,數據緩存器選用MT40A512M16HA-083E,通過對DDR4 SDRAM的存儲尋址原理及DDR4IP核的讀寫控制邏輯的研究,實現了在250MHz的時鐘下,DDR4SDRAM能夠正常進行讀寫操作。經過測試驗證,讀寫數據正常,無數據丟失。
1 整體設計方案
整體設計方案使用模塊化,主要包括光口傳輸模塊、DDR4存儲模塊、SRIO接口模塊。本設計主要對控制芯片FPGA內部邏輯進行了優化設計,其中包括DDR4控制器、不同時鐘域之間的數據緩存FIFO。整體方案傳輸流程如圖1所示。
光口模塊:主要是接收采集模塊傳輸過來的數據。
DDR4存儲模塊:用于緩存數據,由于SRIO接口的數據傳輸速率慢,需要通過DDR4存儲模塊先將高速數據存儲到DDR4中,然后再通過SRIO的時鐘將數據傳輸給SRIO接口模塊。
SRIO接口模塊:接收DDR4讀出來的數據,然后傳輸給上位機進行測試分析。
2 DDR4 SDRAM內部結構
DDR4 SDRAM是一種內部可配置高速動態隨機存儲器,其內部由多個Bank組成,Bank又是由很多行和列構成[3],DDR4的尋址操作就是對行列地址進行操作。DDR4存儲器有幾個重要概念,即Bank、Bank Group及Page, 例如512Mx16的8Gb容量的DDR4, 內部主要包括2個Bank Group,每個Bank Group包括4個Bank[3]。每個Bank是由多個Page組成的,通過多Page地址去選擇相應的Page。
3 DDR4控制器模塊設計
DDR4控制器模塊設計如圖2所示,將控制器分為IDLE、WR-DELAY、DDR-WR_s、RD_DELAY和DDR_RD_s五個模塊。
IDLE:初始化狀態。主要對DDR4內部的信號進行初始化。當收到rd_en_reg和rd_dat_s_reg信號同時有效時,將進入RD_DELAY狀態;當收到wr_en_reg信號有效時,進入WR_DELAY狀態;如果在該狀態下沒有收到相應的有效信號將繼續保持該狀態。
WR-DELAY:寫等待狀態。當在此狀態下收到rd_en_reg有效時將會跳到IDLE狀態;在沒有收到rd_en_reg有效時,根據條件app_bl_cnt>=WR_BURST_CNT來判斷是否已經寫到規定的數據量,如果已經寫到規定的數據量,將繼續保持在該狀態,等待其他有效信號的到來,如果沒有寫到規定的數據量,判斷寫FIFO的wr_prog_empty信號,如果wr_prog_empt無效則跳轉到DDR_WR_S狀態,反之wr_prog_empt有效, 則繼續在該狀態下等待有效信號到來。
DDR_WR_s:寫狀態。此狀態主要是往DDR4里寫數據,由于DDR4 IP核內的Burst Length設為了8[4],所以根據條件ddr_cnt==WR_BURST_NUM來判斷,當ddr_cnt計數到了WR_BURST_NUM的值時,會跳轉到WR-DELAY狀態,如果沒有計數到WR_BURST_NUM的值,則繼續保持在該狀態。
RD_DELAY:讀等待狀態。當在此狀態下收到wr_en_reg有效時將會跳轉到IDLE狀態;在沒有收到wr_en_reg有效時,根據讀FIFO的rd_prog_full信號來判斷,如果rd_prog_full有效時則繼續在該狀態下等待,若無效則根據條件app_bl_cnt>=RD_BURST_CNT來判斷,如果計數達到了設定的讀數據量,則會跳轉到IDLE狀態,若沒有到達設定的讀數據量,則跳轉到DDR_RD_s狀態。
DDR_RD_s:讀狀態。此狀態主要是將DDR4里的數據往外讀,根據條件ddr_cnt>=RD_BURST_CNT來判斷,當計數達到設定的讀數據量時則會跳轉到IDLE狀態,如果沒有達到設定的讀數據量,且讀FIFO的rd_prog_full信號有效,則會繼續在該狀態下讀取DDR4里的數據。
4 仿真驗證
采用Vivado 2018.3軟件,其中FPGA芯片型號為XCVU9P-flga2104-1-i,進行開發板上驗證。在光口模塊產生一組遞增數,通過光口將數據發送給DDR4存儲模塊。通過在ILA抓取相應的信號來觀察DDR4。圖3是通過ILA抓取的DDR4內部信號狀態圖[5]。
圖3 DDR4寫狀態1
通過圖3可以看出,一開始DDR4處于初始化狀態,當wr_en_reg變成高電平時,state跳轉到WR_DELAY狀態;當wr_prog_empty變成低電平時,state跳轉到DDR_WR_s狀態。之后,當app_bl_cnt計數到96250時,state跳轉到WR_DELAY;如果對寫數據部分放大,可以看出數據是遞增數;當rd_en_reg和rd_dat_s_reg同時有效時,state從IDLE狀態跳轉到RD_DELAY狀態,當rd_prog_full為低電平時,且app_bl_cnt未計數到RD_BURST_CNT,這個state從RD_DELAY狀態跳轉到DDR_RD_s狀態;當ddr_cnt計數到768000時,state從DDR_RD_s狀態跳轉到IDLE狀態;圖4是對讀數據部分放大,可以看出數據是正整數。
圖4 DDR4讀狀態3
5 結束語
本研究在Xilinx 公司的XCVU9P系列FPGA芯片上完成了DDR4存儲模塊的讀寫狀態機的設計、代碼編寫以及驗證。使用其內部自帶的DDR4 SDRAM(MIG)IP核進行例化核設計。經過開發板上驗證,實現在250MHz時鐘下對DDR4 SDRAM的讀/ 寫操作,數據無丟失,能夠保證高速率、大帶寬數據正常傳輸,該傳輸機制具有良好的可靠性、適用性及有效性。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















