趙俊江++張會(huì)新
摘 要: 針對(duì)高速圖像采集存儲(chǔ)要求,設(shè)計(jì)一種高速大容量存儲(chǔ)裝置。該裝置以FPGA為主控芯片,以FPGA內(nèi)部集成的高速串行收發(fā)器Rocket I/O GTP作為圖像數(shù)據(jù)接收單元,通過(guò)FPGA控制MCB硬核操作2片DDR2 SDRAM構(gòu)成兵乓緩存單元,以32片NAND FLASH組成的陣列為存儲(chǔ)單元,采用交叉雙平面頁(yè)編程技術(shù)對(duì)FLASH進(jìn)行數(shù)據(jù)存儲(chǔ)。實(shí)現(xiàn)了對(duì)3個(gè)速率為50 MB/s的圖像通道數(shù)據(jù)實(shí)時(shí)采集存儲(chǔ)。通過(guò)對(duì)FLASH陣列中的圖像數(shù)據(jù)進(jìn)行回讀分析,測(cè)試結(jié)果無(wú)誤,驗(yàn)證了系統(tǒng)功能的有效性和可靠性。
關(guān)鍵詞: 圖像存儲(chǔ); Rocket I/O GTP; DDR2 SDRAM; 乒乓緩存; 交叉雙平面頁(yè)編程
中圖分類號(hào): TN911.73?34; TP274 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2017)12?0144?04
Abstract: Aiming at the high?speed image acquisition and storage requirements, a high?speed and large?capacity storage device was designed. The FPGA is regarded as the main?control chip of the device. The high?speed serial transceiver Rocket I/O GTP integrated into FPGA is taken as the image data receiving unit. The MCB hard?core is controlled with FPGA to operate two chips of DDR2 SDRAM to compose the ping?pong buffer unit. The array composed of 32 NAND FLASHs is employed as the memory cell. The interleave two?plane page programming technology is used to storage data in FLASH. The real?time data acquisition and storage of three image channels in the speed of 50 MB/s were realized.. The read?back analysis is performed for image data in FLASH array to verify the validity and reliability of the system with correct test results.
Keywords: image storage; Rocket I/O GTP; DDR2 SDRAM; ping?pong buffer; interleave two?plane page programming
隨著數(shù)字化信息時(shí)代的到來(lái),高速信息采集存儲(chǔ)的要求越來(lái)越高,尤其是在航空、航天領(lǐng)域。在飛行器的試驗(yàn)、改進(jìn)過(guò)程當(dāng)中,需要對(duì)環(huán)境模擬量、飛行狀態(tài)做出準(zhǔn)確分析,這就需要對(duì)試驗(yàn)過(guò)程中大量的視頻圖像進(jìn)行采集和存儲(chǔ),通過(guò)大量的視頻圖像和試驗(yàn)數(shù)據(jù)分析來(lái)對(duì)飛行器改進(jìn)提供可靠的依據(jù)。如今由于對(duì)飛行器的各項(xiàng)性能指標(biāo)參數(shù)要求越來(lái)越高,需要記錄的視頻圖像數(shù)據(jù)越來(lái)越大,速度越來(lái)越快,因此設(shè)計(jì)一種具有接收速度快、容量大、體積小數(shù)據(jù)存儲(chǔ)裝置勢(shì)在必行[1]。
本文旨在設(shè)計(jì)一種高速圖像數(shù)據(jù)存儲(chǔ)裝置。以FPGA作為主控芯片,采用FPGA內(nèi)部集成的高速串行收發(fā)器Rocket I/O GTP作為接收單元,相較于使用LVDS串化芯片,集成度更高、速度更快,單個(gè)鏈路的數(shù)據(jù)速率可達(dá)3.125 Gb/s,同時(shí),Aurora協(xié)議 IP 核集成在Rocket I/O中,也使得可靠性更高,提高了開(kāi)發(fā)效率[2];流水線操作實(shí)現(xiàn)2片DDR2 SDRAM的乒乓操作也使得緩存高速圖像數(shù)據(jù)流成為可能。32片NAND FLASH構(gòu)成的存儲(chǔ)陣列,實(shí)現(xiàn)了大容量存儲(chǔ)。該裝置具有很好的發(fā)展前景,能夠滿足航空、航天及工業(yè)等領(lǐng)域的大數(shù)據(jù)量記錄要求。
1 總體設(shè)計(jì)方案
結(jié)合本系統(tǒng)圖像數(shù)據(jù)傳輸要求以及當(dāng)前存儲(chǔ)器的發(fā)展趨勢(shì),圖像接收部分采用Rocket I/O GTP為解決方案,高速緩存單元對(duì)2片DDR2 SDRAM進(jìn)行乒乓操作,實(shí)現(xiàn)高速數(shù)據(jù)流的緩存。32片F(xiàn)LASH存儲(chǔ)陣列作為圖像數(shù)據(jù)存儲(chǔ)單元,對(duì)8片F(xiàn)LASH進(jìn)行并行操作,通過(guò)流水線設(shè)計(jì)對(duì)4組存儲(chǔ)芯片同時(shí)進(jìn)行并行讀、寫(xiě)和擦除操作,讀寫(xiě)速率約可達(dá)240 MB/s實(shí)現(xiàn)高速存取。總體設(shè)計(jì)思路為:從接收單元采集高速圖像數(shù)據(jù),將數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換轉(zhuǎn)化成并行數(shù)據(jù)寫(xiě)入到高速緩存單元;緩存單元通過(guò)乒乓操作對(duì)高速數(shù)據(jù)流進(jìn)行緩存,保證數(shù)據(jù)流在存儲(chǔ)單元中的實(shí)時(shí)性和完整性;并行操作32片F(xiàn)LASH組成的存儲(chǔ)陣列,對(duì)緩存單元輸出的高速數(shù)據(jù)流進(jìn)行存儲(chǔ),實(shí)現(xiàn)圖像的實(shí)時(shí)高速存儲(chǔ)。總體功能組成原理框圖如圖1所示。
本系統(tǒng)要求實(shí)現(xiàn)對(duì)三路高速圖像數(shù)據(jù)的采集存儲(chǔ),圖像傳輸接口采用LVDS接口,速率達(dá)393.216 Mb/s,圖像像素為640×480,速率為80 f/s。每一路圖像的帶寬為50 MB/s,總的存儲(chǔ)量達(dá)到128 GB,滿足連續(xù)存儲(chǔ)和超閾值存儲(chǔ)兩種模式要求。本系統(tǒng)用到的關(guān)鍵技術(shù)主要有:高速圖像的接收單元設(shè)計(jì);高速數(shù)據(jù)流的乒乓緩沖;大數(shù)據(jù)量的實(shí)時(shí)存儲(chǔ)。
2 關(guān)鍵技術(shù)
2.1 圖像接收單元
通常的LVDS解串芯片增加了系統(tǒng)功耗以及布線難度。本方案中選用的FPGA內(nèi)嵌了Rocket I/O GTP的硬核IP模塊,采用CML,CDR,8 B/10 B線路編碼和預(yù)加重等技術(shù),最大限度地減小信號(hào)的衰減、時(shí)鐘扭曲,簡(jiǎn)化同步轉(zhuǎn)化輸出,保證信號(hào)完整性。Rocket I/O支持多種通信協(xié)議標(biāo)準(zhǔn),包括Aurora、PCI?E、光纖通道、千兆以太網(wǎng)等。本系統(tǒng)中通過(guò)預(yù)設(shè)的Aurora協(xié)議實(shí)現(xiàn)通用標(biāo)準(zhǔn)接口,其鏈路結(jié)構(gòu)圖如圖2所示。
Aurora IP 核內(nèi)嵌在Rocket I/O 模塊中,IP核的參數(shù)化設(shè)計(jì)使得用戶調(diào)用更加方便,提高了信號(hào)的可操作性。通過(guò)調(diào)用IP核改變Rocket I/O 中復(fù)雜的控制結(jié)構(gòu),硬核控制模塊通過(guò)ISE中的CORE Generator 進(jìn)行創(chuàng)建和配置,包括8 B/10 B編碼選擇、COMMA字符對(duì)齊等參數(shù)設(shè)置[3?4]。本系統(tǒng)用verilog HDL硬件描述語(yǔ)言對(duì)Rocket I/O GTP收發(fā)器進(jìn)行封裝,封裝后的模塊類似于一個(gè)FIFO接口,封裝后的模塊原理框圖如圖3所示。
圖3中g(shù)tp_module為頂層模塊,內(nèi)部分為兩個(gè)模塊:tx_module(發(fā)送模塊)和rx_module(接收模塊)。tx_module內(nèi)部包含TCFIFO和TXFIFO,TCFIFO功能是接收并解析命令,TXFIFO則接收將要發(fā)送的數(shù)據(jù)。rx_module負(fù)責(zé)緩存接收到的數(shù)據(jù)。發(fā)送數(shù)據(jù)時(shí),首先判斷TCFIFO和TXFIFO滿標(biāo)志,非滿則發(fā)送數(shù)據(jù),并寫(xiě)入命令,通信協(xié)議中規(guī)定了發(fā)送數(shù)據(jù)的長(zhǎng)度、接收類型,然后寫(xiě)入將要發(fā)送的數(shù)據(jù)。接收數(shù)據(jù)與發(fā)送數(shù)據(jù)過(guò)程類似,命令解析之后用戶可以從RXFIFO讀出接收的數(shù)據(jù)。
2.2 高速緩存單元設(shè)計(jì)
本系統(tǒng)中的存儲(chǔ)器接收的圖像速率較快,必須通過(guò)大容量高速緩存單元對(duì)數(shù)據(jù)進(jìn)行緩存。該存儲(chǔ)器還要求超閾值采集模式,即要記錄超閾值時(shí)刻前后1 s的數(shù)據(jù),三個(gè)圖像通道總數(shù)據(jù)量為150 MB/s,那么存儲(chǔ)器就必須要有大于150 MB的緩存單元。本文中由2片容量為256 MB的DDR2 SDRAM構(gòu)成乒乓緩存,通過(guò)流水線設(shè)計(jì)完成FPGA對(duì)2片DDR2 SDRAM的乒乓操作。通過(guò)流水線操作可以充分利用電路之間的等待時(shí)間,高效完成海量實(shí)時(shí)數(shù)據(jù)的無(wú)縫緩沖和傳輸[5]。DDR2 SDRAM乒乓緩存單元結(jié)構(gòu)如圖4所示。
FPGA中集成了控制DDR2 SDRAM的硬核控制器MCB(Memory Controller Bank),通過(guò)MIG生成的IP核對(duì)MT47H256M8進(jìn)行控制。然后用Verilog HDL硬件描述語(yǔ)言對(duì)該控制器進(jìn)行封裝,封裝后的模塊近似于標(biāo)準(zhǔn)的FIFO接口,分為讀通道、寫(xiě)通道和命令通道,用戶只要根據(jù)空、滿信號(hào)對(duì)這兩個(gè)通道進(jìn)行操作即可[6]。
系統(tǒng)上電后,DDR2 SDRAM控制器首先發(fā)送指令完成DDR2 SDRAM的初始化,然后進(jìn)入空閑狀態(tài)。當(dāng)有圖像數(shù)據(jù)流輸入時(shí),數(shù)據(jù)邏輯控制器先將數(shù)據(jù)寫(xiě)入FIFO1并等待SDRAM1控制器寫(xiě)標(biāo)志位觸發(fā),一旦觸發(fā)就開(kāi)始向SDRAM1控制器中寫(xiě)數(shù)據(jù),并對(duì)寫(xiě)地址進(jìn)行計(jì)數(shù),同時(shí)向SDRAM1控制器發(fā)出讀請(qǐng)求,當(dāng)達(dá)到設(shè)定的存儲(chǔ)容量時(shí),控制器向數(shù)據(jù)邏輯控制器發(fā)送滿信號(hào)暫停寫(xiě)入;在開(kāi)始讀取SDRAM1中的數(shù)據(jù)的同時(shí)向SDRAM2發(fā)出寫(xiě)請(qǐng)求,一但收到SDRAM2非空的信號(hào),則開(kāi)始將數(shù)據(jù)寫(xiě)入到FIFO2中,同時(shí)等待SDRAM2的讀請(qǐng)求;當(dāng)從SDRAM2中讀取數(shù)據(jù)時(shí),數(shù)據(jù)邏輯控制器向SDRAM1發(fā)送寫(xiě)請(qǐng)求,這樣通過(guò)流水線設(shè)計(jì)思想保證數(shù)據(jù)連續(xù)地輸入/輸出,實(shí)現(xiàn)數(shù)據(jù)的無(wú)縫緩沖。
2.3 圖像數(shù)據(jù)存儲(chǔ)
NAND FLASH寫(xiě)速度和擦除速度遠(yuǎn)高于NOR FLASH,且數(shù)據(jù)保存時(shí)間可達(dá)10年,存儲(chǔ)高速大容量數(shù)據(jù)首選NAND FLASH。本文中選用的NAND FLASH芯片K9WBG08U1M內(nèi)部有4 GB的存儲(chǔ)plane,每個(gè)plane包含2 048塊和4 KB的寄存器,每塊為64頁(yè),這就允許芯片在頁(yè)編程的同時(shí)進(jìn)行塊擦除操作[7],內(nèi)部結(jié)構(gòu)見(jiàn)圖5。
NAND FALASH有頁(yè)編程(Page Program)、交叉雙平面頁(yè)編程(Interleave Two?plane Page Program)等存取方式。頁(yè)編程方式中,典型的頁(yè)編程時(shí)間為200 μs,最大需要700 μs。每頁(yè)為4 KB,寫(xiě)周期最小為25 ns,寫(xiě)完一塊的時(shí)間約為102 μs。寫(xiě)完之后還需要200 μs的等待時(shí)間才能把數(shù)據(jù)寫(xiě)入到FLASH中,平均寫(xiě)入速度不超過(guò)12 MB/s,無(wú)法達(dá)到本系統(tǒng)要求。因此采用交叉雙平面編程方法,該方法是寫(xiě)入數(shù)據(jù)速度最快的編程方法。這種編程方式基于流水線的工作原理,對(duì)K9WBG08U1M不同平面按節(jié)拍、時(shí)序進(jìn)行操作,增大了數(shù)據(jù)流的吞吐量,加快緩存速度[8?9],具體的操作時(shí)序如圖6所示。進(jìn)行交叉雙平面頁(yè)編程時(shí),首先將FLASH內(nèi)部分為4組, chip1中的plane0和plane1為第0組,plane2和plane3為第1組,chip2中的plane0和plane1為第2組,plane2和plane3為第3組,用Verilog編程過(guò)程中,定義了一個(gè)flag信號(hào)對(duì)4組存儲(chǔ)平面按照流水線操作思想進(jìn)行平面切換,特別要注意的是,在使用交叉雙平面頁(yè)編程方法中,平面操作必須嚴(yán)格按照本文中的分組進(jìn)行,不能出現(xiàn)如plane0與plane2或者plane0與plane3為一組的情況。當(dāng)對(duì)第0組平面進(jìn)行頁(yè)編程操作時(shí),可以對(duì)另外3組的平面進(jìn)行寫(xiě)命令、數(shù)據(jù)和地址等操作,測(cè)試單片K9WBG08U1M的存儲(chǔ)速度最快為30 MB/s,對(duì)3組平面進(jìn)行頁(yè)編程完成數(shù)據(jù)寫(xiě)入時(shí)間為:
(6×4 096 B)÷30 MB/s=819.2 μs>700 μs
FLASH的最大頁(yè)編程時(shí)間為700 μs,在完成另外3組的寫(xiě)命令、數(shù)據(jù)和地址操作以后,第0組的頁(yè)編程必然結(jié)束,這樣不同操作的時(shí)間恰好錯(cuò)開(kāi),縮短了數(shù)據(jù)寫(xiě)入FLASH的時(shí)間 ,提高了寫(xiě)入速度[10?12]。存儲(chǔ)單元存儲(chǔ)數(shù)據(jù)時(shí)對(duì)8片F(xiàn)LASH進(jìn)行同樣的寫(xiě)操作,整體寫(xiě)入速度約為240 MB/s,完全能夠滿足設(shè)計(jì)的要求。交叉雙平面頁(yè)編程如圖7所示。
3 系統(tǒng)功能測(cè)試及結(jié)果分析
本系統(tǒng)首先通過(guò)上位機(jī)軟件下發(fā)數(shù)據(jù),模擬圖像格式發(fā)送數(shù)據(jù)給該存儲(chǔ)裝置,進(jìn)行存儲(chǔ),并通過(guò)USB 3.0讀取裝置獲取數(shù)據(jù)[13],并回傳給PC機(jī)用上位機(jī)軟件進(jìn)行分析,構(gòu)成一個(gè)閉環(huán)測(cè)試系統(tǒng)。下發(fā)的數(shù)據(jù)幀格式為:首先是2個(gè)字節(jié)的幀頭“14 6F”,中間為“01~FF”遞增數(shù)據(jù),數(shù)據(jù)體結(jié)束后緊接著是4個(gè)字節(jié)的幀計(jì)數(shù),幀尾是“EB 90”。每幀數(shù)據(jù)共263 B,部分?jǐn)?shù)據(jù)如圖8(a)所示。
將NAND FLASH存儲(chǔ)陣列中的數(shù)據(jù)讀取并通過(guò)USB 3.0回傳給上位機(jī)同時(shí)將數(shù)據(jù)保存至計(jì)算機(jī)的硬盤(pán)?;刈x的部分?jǐn)?shù)據(jù)如圖8(a)所示,分析結(jié)果如圖8(b)所示,由軟件分析可得,共讀取了2 048 MB數(shù)據(jù),總幀數(shù)為0x7C97D9,無(wú)誤碼及丟數(shù)情況,數(shù)據(jù)完全正確。
4 結(jié) 論
本文設(shè)計(jì)的高速圖像存儲(chǔ)裝置采用高速串行收發(fā)器Rocket I/O GTP的解決方案,進(jìn)行圖像數(shù)據(jù)采集。Rocket I/O集成在FPGA中,高集成度也使得該存儲(chǔ)裝置的體積更小;通過(guò)FPGA內(nèi)的硬核對(duì)2片DDR2 SDRAM進(jìn)行乒乓操作實(shí)現(xiàn)高速數(shù)據(jù)流緩沖;而32片NAND FLASH存儲(chǔ)器構(gòu)成存儲(chǔ)陣列進(jìn)一步擴(kuò)大了存儲(chǔ)量,也使得該存儲(chǔ)裝置的應(yīng)用范圍進(jìn)一步得到擴(kuò)展,完成了數(shù)據(jù)接收、實(shí)時(shí)緩存和存儲(chǔ),實(shí)現(xiàn)了預(yù)定設(shè)計(jì)目標(biāo)。
參考文獻(xiàn)
[1] 趙林.大容量高速數(shù)據(jù)記錄器的設(shè)計(jì)與實(shí)現(xiàn)[D].太原:中北大學(xué),2014.
[2] 張守將.基于Rocket I/O的高速數(shù)據(jù)傳輸系統(tǒng)研究[D].西安:西安電子科技大學(xué),2013.
[3] 林振華.基于PCI?X和Rocket I/O的高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[J].現(xiàn)代雷達(dá),2011,33(6):49?52.
[4] 李維明,陳建軍,陳星锜.基于Aurora協(xié)議的高速通信技術(shù)的研究[J].電子技術(shù)應(yīng)用,2013,39(12):37?40.
[5] 劉杰,賽景波.基于DDR2 SDRAM乒乓雙緩沖的高速數(shù)據(jù)收發(fā)系統(tǒng)設(shè)計(jì)[J].電子器件,2015,38(3):650?654.
[6] 庾志衡,葉俊明,鄧迪文.基于FPGA與DDR2 SDRAM的大容量異步FIFO緩存設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011,30(4):34?36.
[7] 安航行,孟令軍,趙林,等.圖像數(shù)據(jù)遠(yuǎn)距離傳輸及高速實(shí)時(shí)存儲(chǔ)技術(shù)[J].電視技術(shù),2013,37(3):175?178.
[8] 魏敏,劉文怡,王金陵.基于交叉雙平面技術(shù)的圖像采集存儲(chǔ)系統(tǒng)[J].電視技術(shù),2013,37(15):63?66.
[9] 朱知博.基于NAND FLASH的高速大容量存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(8):170?173.
[10] 嚴(yán)帥.雙通道高速數(shù)據(jù)記錄器中關(guān)鍵技術(shù)的研究[D].太原:中北大學(xué),2012.
(上接第147頁(yè))
[11] WANG Lifeng, HU Shanqing, LIU Feng, et al. Design of high speed and large capacity storage module based on flash memory [J]. Computer engineering, 2011, 37(7): 255 ?261.
[12] 徐永剛,任國(guó)強(qiáng),吳欽章.NAND FLASH高速圖像記錄壓力測(cè)試系統(tǒng)[J].紅外與激光工程,2013,42(10):2859?2864.
[13] 孟令軍,周之麗,文波,等.基于USB 3.0的LVDS高速圖像記錄系統(tǒng)的設(shè)計(jì)[J].電子器件,2015,38(4):812?816.