丁 輝,張會新,龐俊奇
(中北大學(xué),電子測試技術(shù)重點實驗室,山西太原 030051)
隨著科學(xué)技術(shù)的快速發(fā)展,人類在信息科學(xué)技術(shù)上有著越來越高的需求,主要的表現(xiàn)形式是更快和更多地接收信息,因此需要專用的設(shè)備來對這些信息進行高速接收與精確的處理[1]。在許多的產(chǎn)品中,F(xiàn)PGA外掛DDR3作為存儲器有著廣泛的應(yīng)用,通常采用的是FPGA自帶的IP Core 進行開發(fā)設(shè)計,縮短開發(fā)周期[2]。由于DDR3只有一套數(shù)據(jù)訪問通道,無法滿足多通道數(shù)據(jù)輸入的要求,本設(shè)計提出一種分地址存儲技術(shù)可以對多通道數(shù)據(jù)進行分別存儲,加速了數(shù)據(jù)存儲的速度,并且使用2組DDR3,采用乒乓讀寫的方式,極大地縮短了數(shù)據(jù)讀寫的時間。
高速大容量數(shù)據(jù)緩存器是針對一些高速大容量數(shù)據(jù)無法及時存儲和處理而設(shè)計的一種緩存器,如圖1所示,本設(shè)計中使用的是高速串行接口GTP進行數(shù)據(jù)的傳輸,單通道GTP接口速度最快可達6.6 Gbit/s,數(shù)據(jù)輸入后進入接收總線模塊,此模塊主要用于將傳輸?shù)妮斎霐?shù)據(jù)位寬進行匹配,然后產(chǎn)生數(shù)據(jù)的寫地址信號與寫數(shù)據(jù)信號同時接收來自下一級的寫反饋信號[3]。
圖1 高速大容量數(shù)據(jù)緩存器整體設(shè)計框圖
接收總線產(chǎn)生地址與數(shù)據(jù)信號后,將信號輸入到寫仲裁模塊,本設(shè)計中采用的是2片DDR3切換進行讀寫的方式,所以數(shù)據(jù)進入寫仲裁模塊進行相應(yīng)的判斷,將數(shù)據(jù)與地址輸出到相對應(yīng)的DDR3模塊中,設(shè)計中是2片DDR3讀寫切換進行,所以在完成對一片DDR3寫入時,要接著進行讀取,所以讀仲裁模塊在進行相應(yīng)的判斷之后,產(chǎn)生相應(yīng)的讀數(shù)據(jù)地址信號輸入到DDR3中對其進行數(shù)據(jù)的讀取操作,最后數(shù)據(jù)在讀數(shù)據(jù)模塊進行整合后輸出到外部進行存儲或者直接處理[4]。
本設(shè)計中使用的是GTP高速串行接口進行數(shù)據(jù)傳輸,輸入為4路的高速GTP,為了傳輸信號的穩(wěn)定,每路的輸入速率為3 Gbit/s,當(dāng)4路同時進行數(shù)據(jù)傳輸時,接收模塊瞬間接收到高達12 Gbit/s的數(shù)據(jù)輸入[5],如圖2所示,四通道串行數(shù)據(jù)經(jīng)過解串之后輸出為位寬32位的并行數(shù)據(jù),同時總線接收模塊產(chǎn)生相應(yīng)的地址信號輸入到寫仲裁模塊中。此時FPGA使用的時鐘頻率為400 MHz,當(dāng)輸入為12 Gbit/s的數(shù)據(jù)量時,將串行數(shù)據(jù)轉(zhuǎn)為32位的并行數(shù)據(jù)進行存儲,可以滿足速率要求。
圖2 接收總線模塊示意圖
數(shù)據(jù)緩存部分主要包括3部分,數(shù)據(jù)寫入仲裁模塊,數(shù)據(jù)讀出仲裁模塊,2組DDR3緩存單元。數(shù)據(jù)寫入仲裁模塊主要是將外部傳來的數(shù)據(jù)經(jīng)過仲裁之后將數(shù)據(jù)與地址輸入到相應(yīng)的存儲單元,數(shù)據(jù)讀出模塊是及時地經(jīng)過仲裁將已有數(shù)據(jù)的緩存單元中的數(shù)據(jù)及時讀出,避免造成大量數(shù)據(jù)的堆積導(dǎo)致數(shù)據(jù)出現(xiàn)覆蓋、丟失[6]。
DDR SDRAM是雙倍數(shù)據(jù)速率端口動態(tài)隨機存儲器。DDR SDRAM在每個時鐘中期的上升和下降沿各傳送一次數(shù)據(jù),提高了數(shù)據(jù)傳輸帶寬[7]。DDR3緩存單元采用的是2個DDR3組成一組DDR3,每個DDR3的存取位寬為16位,2個DDR3并聯(lián)通過一個DDR3控制器控制,形成32位寬的存取接口,滿足數(shù)據(jù)輸入端口的位寬要求。為了提高總線的利用率,DDR3 SDRAM使用的是8n預(yù)取結(jié)構(gòu),其中n表示DRAM芯片的數(shù)據(jù)I/O寬度,8是指數(shù)據(jù)的突發(fā)長度,突發(fā)長度是指數(shù)據(jù)單次可以采集到的數(shù)據(jù)量,指的是當(dāng)發(fā)送單個地址時,數(shù)據(jù)引腳會傳送8n個總線字的數(shù)據(jù),本緩存單元數(shù)據(jù)位寬為32位,采用8 bit預(yù)取的方式進行讀寫時,核心頻率使用100 MHz時,存取的速度可達32×8×2×100=50 Gbit/s,考慮到一些控制信號的總線資源利用以及考慮到實際DDR3總線利用率不高的因素外,50 Gbit/s的存取速率數(shù)完全可以滿足12 Gbit/s數(shù)據(jù)量。本單元采用的是2組DDR3存儲單元進行乒乓交互讀取,在第一組DDR3_0寫入數(shù)據(jù)時,另一組DDR3_1進行數(shù)據(jù)的讀出,兩組進行交互讀取,實現(xiàn)了數(shù)據(jù)總的存取速率到達24 Gbit/s以上,圖3為緩存單元的結(jié)構(gòu)示意圖。
圖3 緩存單元結(jié)構(gòu)示意圖
仲裁模塊為每個通道分配地址空間進行數(shù)據(jù)存儲,2個通道傳輸數(shù)據(jù)時獨立進行,互相沒有干擾,當(dāng)數(shù)據(jù)流進入仲裁模塊時,仲裁模塊進行判斷,當(dāng)仲裁模塊將數(shù)據(jù)與地址寫入到DDR3_0通道時,在DDR3_0通道寫入數(shù)據(jù)的同時,仲裁模塊可以產(chǎn)生新的地址信號輸入到DDR3_1的模塊中去,等到下一幀數(shù)據(jù)到來的時候,直接將數(shù)據(jù)輸入到DDR3_1模塊中去,可以極大地縮短地址輸入DDR模塊時的等待時間,同時這種交替數(shù)據(jù)輸入的方式可以使2個通道的負載均衡[8]。數(shù)據(jù)交替流入的結(jié)構(gòu)圖如圖4所示。
圖4 數(shù)據(jù)交替寫入示意圖
本設(shè)計中采用的是兩通道DDR3緩存單元,因此可以直接采用flag標(biāo)志位置為0或者1來對通道進行選通,設(shè)計中地址輸入總線和數(shù)據(jù)輸入總線是相互獨立,所以可以分別對其設(shè)置狀態(tài)標(biāo)志位,分別為flag_waddr和flag_wdata兩個信號。寫標(biāo)志位的邏輯發(fā)生變化是以寫入數(shù)據(jù)的一個突發(fā)長度為單位,當(dāng)?shù)谝粋€通道寫入一個突發(fā)長度數(shù)據(jù)時,寫標(biāo)志位發(fā)生翻轉(zhuǎn),開始準(zhǔn)備將下一個突發(fā)長度的數(shù)據(jù)寫入第二個通道[9]。具體的流程如圖5所示,首先初始化flag_waddr=0,awaddr地址信號發(fā)出,同時使能awvalid信號,此時表示輸入DDR3控制器的地址信號有效,DDR3發(fā)出app_rdy信號為高時表示允許接收地址信號,此時完成地址的傳輸,flag_waddr信號翻轉(zhuǎn)為1,開始向另一個通道傳輸?shù)刂沸盘枴H鐖D6,當(dāng)寫入數(shù)據(jù)時,第一個通道地址傳輸同時,即可將數(shù)據(jù)寫入到通道中,等到一個數(shù)據(jù)突發(fā)長度完成后,flag_wdata標(biāo)志翻轉(zhuǎn),開始往另一個通道傳輸數(shù)據(jù)。2個通道相互獨立,寫入第一個通道數(shù)據(jù)的同時,可以將地址寫入到第二個通道內(nèi),節(jié)省等待數(shù)據(jù)傳輸完成的時間。
圖5 地址信號寫入仲裁邏輯圖
圖6 數(shù)據(jù)信號寫入仲裁流程圖
DDR3緩存單元的數(shù)據(jù)讀出時,地址輸入和數(shù)據(jù)輸出是2組不同的通道,是相互獨立的,所以分別為讀地址和讀數(shù)據(jù)設(shè)置1個判斷標(biāo)志位,分別為flag_raddr和flag_rdata 2個信號,讀標(biāo)志位的判斷也是以1次突發(fā)長度為單位[10]。讀數(shù)據(jù)仲裁邏輯判斷如圖7所示。
圖7 讀數(shù)據(jù)仲裁模塊邏輯圖
DDR3數(shù)據(jù)的讀寫使用的是同一組地址線,因此在同一時刻我們只能對同一組DDR3芯片進行讀或者寫操作,為了提高總線的數(shù)據(jù)讀取效率,所以讀取和寫入數(shù)據(jù)緩存單元數(shù)據(jù)時,本設(shè)計采用的是乒乓讀寫的方式,在對其中一個通道寫入/讀取時,同時對另一個通道進行讀取/寫入,兩組通道同時進行工作,大大縮短了數(shù)據(jù)讀出緩存單元的時間,同時也可以使數(shù)據(jù)得到更加快速的處理,圖8為數(shù)據(jù)讀寫時的控制邏輯[11]。
圖8 數(shù)據(jù)讀寫控制流程圖
本設(shè)計采用AXI4總線控制的方式進行數(shù)據(jù)傳輸,AXI協(xié)議適合高帶寬低延時的設(shè)計,而且可以使互聯(lián)模塊之間的靈活性和獨立性很強,其地址、數(shù)據(jù)、控制總線的輸出相互分離,而且使用基于burst的數(shù)據(jù)傳輸方式,綜合以上特點,本設(shè)計中緩存單元的讀寫控制采用AXI4總線[12]。設(shè)計中生成的DDR3控制器設(shè)計帶有AXI4接口的控制器,總線接收模塊和總線發(fā)送模塊通過AXI4總線分別向?qū)懼俨媚K和讀仲裁模塊輸入相應(yīng)的命令、地址、數(shù)據(jù)進行控制,圖9為AXI4總線接口信號圖。AXI4也具有握手機制,當(dāng)主機準(zhǔn)備好地址信息,且當(dāng)awvalid信號為高時,表示地址數(shù)據(jù)有效,同時接收到從機發(fā)送來的awready信號為高時,說明從機可以接收地址信號,完成一次地址信號的傳輸。數(shù)據(jù)信號也是在從機wready信號為高時,主機將數(shù)據(jù)輸入到從機中,wlast信號是提醒從機發(fā)送最后一個數(shù)據(jù)。
圖9 AXI4總線接口數(shù)據(jù)信號
圖10為寫仲裁模塊對寫入2個通道DDR3的地址進行分配和數(shù)據(jù)寫入,圖11為讀仲裁模塊將接收的數(shù)據(jù)分別從2個通道DDR3數(shù)據(jù)讀出時的仿真圖。
圖10 Vivado軟件下寫仲裁模塊地址與數(shù)據(jù)寫入仿真
圖11 Vivado軟件下讀仲裁模塊地址寫入和數(shù)據(jù)讀出仿真
對于高速數(shù)據(jù)緩存單元的設(shè)計,設(shè)計中采用2通道DDR3進行存儲,采用2通道交替寫入的方式,對其中一通道寫數(shù)據(jù)時,另一通道寫地址,一方面節(jié)省了等待時間,另一方面2片存儲器存入的數(shù)據(jù)均衡,同時采用了乒乓讀寫的方式,提高了整體讀寫的速率,有助于數(shù)據(jù)及時進行處理,也避免大量數(shù)據(jù)堆積的情況,采用這2種優(yōu)化的方式,極大提升了緩存單元的性能,解決了因采集數(shù)據(jù)速率快,數(shù)據(jù)量大,無法進行及時存儲導(dǎo)致數(shù)據(jù)丟失、覆蓋等問題,將在高速設(shè)計中得到廣泛的應(yīng)用。