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