文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.175167
中文引用格式: 張鳳麒,張延彬,王忠勇. 基于FPGA的DDR3六通道讀寫防沖突設計[J].電子技術應用,2018,44(7):68-71,80.
英文引用格式: Zhang Fengqi,Zhang Yanbin,Wang Zhongyong. Anti-conflict design for reading and writing of DDR3 six channels based on FPGA[J]. Application of Electronic Technique,2018,44(7):68-71,80.
0 引言
基于FPGA的期貨行情數據加速處理過程中,不同的消息類型采用并行處理的方式,并且每一次的處理結果需要使用內存來緩存一次行情數據信息。行情數據信息容量巨大,片上存儲難以滿足需求,采用DDR3 SDRAM成為首選方法[1]。但由于DDR3只有一套數據訪問通道,不能滿足多個通道同時訪問的需求[2]。此前的對于SDRAM的多通道解決方案中,比如曹一江[3]等設計的基于NPI總線的片外存儲器,最大帶寬可達743 Mb/s;樊博[4]等使用UI接口,DDR3通信的最大帶寬可達3.8 Gb/s;張宇嘉[5]等設計的基于AXI4的DDR3多端口方案雖然傳輸速率有所提高,但由于AXI4協議本身的復雜性增加了開發使用的難度。本文實現并驗證了期貨行情數據加速處理中基于FPGA的DDR3六通道UI接口讀寫防沖突設計,簡化了DDR3多通道讀寫的復雜度,隨著有效數據周期的提升,最高端口速率可達5.0 GB/s以上,帶寬利用率可達80%以上。
1 總體設計架構
本文所設計的六通道讀寫防沖突總體架構如圖1所示,主要包括通道判優仲裁模塊、讀寫邏輯控制模塊和DDR3存儲器控制模塊。
DDR3存儲控制器模塊采用Xilinx公司的MIG核,用戶只需要通過IP核的GUI選擇內存芯片并進行相關參數設置,即可完成DDR3的配置工作[6]。
通道判優仲裁模塊將對六路通道進行仲裁,對于同一時刻有讀寫請求的不同通道,該模塊按照優先級的高低判定訪問DDR3的順序,利用中斷思想解決多通道讀寫的沖突問題。
讀寫邏輯控制模塊控制DDR3的接口生成,根據不同操作完成對應接口的時序控制[7],進而實現對DDR3的正確讀寫訪問。
2 DDR3存儲器控制模塊設計
DDR3 IP核生成的控制器邏輯框圖如圖2所示,采用UI接口的方式相比于AXI4接口,不需要自己組織數據,容易操作,大大簡化了DDR3的使用復雜度,為DDR3的擴展使用帶來了方便[8]。
2.1 存儲控制模塊寫操作
DDR3寫操作接口信號如表1所示。
寫操作過程:當app_rdy和app_wdf_rdy同時為高的情況下,寫入DDR3的地址app_addr與app_cmd綁定對齊,寫入DDR3的數據app_wdf_data與數據掩碼app_wdf_mask綁定對齊,app_cmd置為3′b000,與此同時app_en、app_wdf_wren、app_wdf_end置高,即可將數據寫到對應的地址中。
因為DDR3的寫時序不只一種,為了簡化系統設計,本文設計的用戶接口寫操作時序為地址和數據完全對齊,便于理解和操作[9]。
2.2 存儲控制模塊讀操作
DDR3的讀操作接口信號如表2所示。
讀操作過程:在app_rdy為高時,用戶發送讀命令并同時將app_en置高,則讀命令和讀地址會寫到DDR3中,DDR3會返回數據和有效指示信號,兩者共同決定返回的數據是否有效。
通常情況下,DDR3的讀請求結束之后不會馬上返回數據,需要延遲一定的時鐘周期。
3 通道判優仲裁模塊設計
通常情況下,由于DDR3只有一組控制、地址和數據總線,因此同一時刻只能有一個通道在訪問。根據期貨交易的處理規則,優先級由高到低的順序依次為合約信息消息、市場狀態消息、品種交易狀態消息、成交統計行情消息、多檔定單簿行情消息、多檔成交量統計行情消息。在通道判優的過程中,首先將6種不同的消息經封裝后分別寄存到相應的消息緩存中,每一通道寫入消息緩存中的數據格式,從高到低位依次為寫使能、讀使能、寫數據、寫地址、讀地址;然后首先判斷合約信息消息緩存是否為空,如果不為空,則證明當前有合約信息消息的請求發生,此時狀態機會跳轉到合約信息消息處理狀態;待合約信息消息的緩存全部讀取完畢之后,再次按優先級順序判斷其他消息緩存是否為空,狀態機隨即做相應的跳轉,完成不同通道之間的切換,如圖3所示。
對于不同的消息類型,對應著不同的消息處理單元,目的是增加系統的并行處理操作,降低處理延遲。
4 讀寫邏輯控制模塊
讀寫邏輯控制模塊主要對不同類型消息做并行化處理,生成DDR3的接口信號,每個消息的處理流程如圖4所示。
對于期貨交易中的各種合約行情,種類多,但占用空間小,通常DDR3中一個地址就可完成一個行情的存儲,在行情的還原、計算、發布中,需要讀取多個行情。由于DDR3的突發長度為8,為了便于對行情的準確存取,6個通道的數據位寬均設定為DDR3位寬的1/8,即一次只存取一個地址的數據。
對于通道判優仲裁模塊輸出的數據,寫使能與讀使能均為1 bit位寬,高電平表示請求發生;寫數據為64 bit位寬;寫地址和讀地址為28 bit位寬,DDR3的數據位寬在IP核中配置為512 bit,地址位寬為28 bit。因寫數據位寬與DDR3數據位寬不匹配,所以DDR3的寫操作需要掩碼配合共同完成。
處理過程如下:首先進行讀寫判斷,若寫使能置高,則跳轉到寫操作狀態;若讀使能置高,則跳轉到讀操作狀態,若無讀寫操作,處于等待狀態。(期貨行情消息處理中不會出現同一通道讀寫同時進行的情況,因此同一通道讀寫使能同為高電平的情況不會出現。)
如果是寫操作,一方面生成寫入DDR3的地址和命令,另一方面將寫數據封裝成512 bit位寬。其中寫入DDR3的地址app_addr為{寫地址[27:3],3′d0},寫入的數據app_wdf_data和掩碼app_wdf_mask由寫地址[2:0]確定。數據地址命令控制模塊也會相應的產生app_en、app_wdf_wren、app_wdf_end控制信號,這些信號共同作用關于DDR3 SDRAM存儲器,配合完成DDR3的寫入操作,如圖5所示。
如果是讀操作,地址命令選擇模塊將讀地址[27:3]賦值給app_addr作為寫入DDR3的基地址,同時將讀地址[2:0]作為寫入DDR3的偏移地址存入對應通道的偏移地址緩存中,在數據地址命令控制模塊生成其他的控制信號傳送給DDR3 SDRAM存儲器。DDR3 SDRAM根據地址返回相應的512 bit位寬的數據。在返回數據的同時讀取對應通道偏移地址緩存中的偏移地址,并根據此偏移提取對應的64 bit數據從而完成DDR3的一次讀取操作,如圖6所示。
5 實驗結果與分析
5.1 實驗結果
本文以Xilinx公司的Kintex-7系列XC7K325T FPGA芯片和Micron公司的JBF9C256x72AKZ DDR3芯片為硬件平臺,并以此來驗證本文設計的正確性,分析其性能。
測試方法:六通道在同一時刻發起DDR3的讀寫請求,其中1~4通道進行DDR3的寫請求,5、6通道進行DDR3的讀請求,狀態機按照消息優先級的順序依次進行狀態跳轉完成處理,最后將數據分別返回到相應通道中,ChipScope結果如圖7所示。
5.2 實驗分析
為了更好描述設計的性能,本文引入以下參數。仲裁時間:請求信號發生到通道開始處理的時間間隔;IP核處理時間:DDR3 IP核從接收指令到返回數據的時間;有效提取時間:從512 bit的DDR3返回數據中提取對應的64 bit的時間間隔;有效數據時間:數據有效的維持時間;總時間:消息請求到數據返回的時間,即仲裁時間、IP核處理時間與有效數據時間之和。因此:
在本設計中,實測仲裁時間為3個時鐘周期,IP核處理時間為22個時鐘周期,有效提取時間2個時鐘周期,如圖8所示。
每個通道的有效數據時間不相同,性能也不相同,具體測試結果如表3所示。
測試結果表明,本設計能穩定高效地完成多通道對DDR3的訪問,隨著有效數據周期的提升,通道速率可達5 GB/s以上,帶寬利用率可達80%以上,能夠滿足期貨行情數據處理過程中的實時性要求。
6 結論
本文設計并實現了基于FPGA的DDR3六通道讀寫防沖突設計,能有效地解決在期貨行情數據處理中多通道同時訪問DDR3的沖突問題,在現有的Kintex-7系列FPGA平臺期貨行情數據處理系統中取得了良好的應用效果。測試結果表明該防沖突設計能高效正確地完成多通道對DDR3的訪問,具有穩定性好、仲裁時間固定、效率高等特點。本文設計的DDR3多通道讀寫防沖突設計簡化了多通道讀寫DDR3的復雜度,降低了在期貨行情數據處理過程中的延遲,提高了并行處理速度。
參考文獻
[1] 曠立強.基于FPGA的DDR3設計與實現[D].長沙:國防科學技術大學,2014.
[2] 吳連慧.基于FPGA的DDR3多端口讀寫存儲管理設計[J].單片機與嵌入式系統應用,2015,14(11):71-74.
[3] 曹一江,馬寧,王建民.MPMC高速存儲器接口IP核設計[J].哈爾濱理工大學學報,2012,17(6):75-80.
[4] 樊博,王延東,孫宏海,等.FPGA實現高速實時多端口SDRAM控制器的研究[J].計算機工程與應用,2013,49(12):60-64.
[5] 張宇嘉,楊曉非,姚行中.基于AXI4的衛星接收機DDR3多端口存儲的設計[J].電子器件,2016,39(3):74-78.
[6] 梁晨,趙邦信.基于FPGA和DDR3 SDRAM的大規模查找表設計與實現[J].電子器件,2017,40(4):849-855.
[7] 宋明,趙英瀟,林錢強.基于FPGA的DDR3 SDRAM控制器的設計與優化[J].電子科技,2016,29(11):47-50.
[8] 姜文博,陳維蛇,司蓉蓉.Xilinx系列FPGA對DDR3的訪問接口設計[J].通訊世界,2016,15(5):243-247.
[9] 潘一飛,余海.基于FPGA的DDR3用戶接口設計[J].電子制作,2013,24(15):9-13.
作者信息:
張鳳麒,張延彬,王忠勇
(鄭州大學 產業技術研究院,河南 鄭州450000)