吳嘉偉 魏志強(qiáng) 張會(huì)新
摘? 要: 針對(duì)多路數(shù)據(jù)存儲(chǔ)中所采集數(shù)據(jù)傳輸與存儲(chǔ)速率不匹配的問(wèn)題,提出一種基于FPGA和FLASH的多路數(shù)據(jù)存儲(chǔ)技術(shù)。FPGA芯片可以通過(guò)RS 422串并轉(zhuǎn)換模塊將輸入的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)存入第一級(jí)數(shù)據(jù)緩存,主控模塊對(duì)其重新編幀后存入第二級(jí)數(shù)據(jù)緩存中,最后在FLASH控制模塊作用下把數(shù)據(jù)存入FLASH存儲(chǔ)器中。經(jīng)測(cè)試,從FLASH存儲(chǔ)器中讀取的數(shù)據(jù)正確,該系統(tǒng)工作可靠。
關(guān)鍵詞: 多路數(shù)據(jù)存儲(chǔ); FPGA; FLASH; 串并轉(zhuǎn)換; 數(shù)據(jù)緩存; 數(shù)據(jù)重新編幀
中圖分類(lèi)號(hào): TN919?34? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼: A? ? ? ? ? ? ? ? ? ? ? 文章編號(hào): 1004?373X(2020)04?0034?04
Multi?channel data storage technology based on FPGA and Flash
WU Jiawei1,2, WEI Zhiqiang3, ZHANG Huixin1,2
(1. Key Laboratory of Electronic Measurement Technology, North University of China, Taiyuan 030051, China;
2. MOE Key Laboratory of Instrumentation Science & Dynamic Measurement, North University of China, Taiyuan 030051, China;
3. Beijing Institute of Aerospace Metrology and Testing Technology, Beijing 100076, China)
Abstract: A multi?channel data storage technology based on FPGA and Flash is proposed to improve the mismatch between the collected data transmission rate and its storage rate in multi?channel data storage. The FPGA chip is adopted to convert the inputted serial data into the parallel data by means of the RS?422 serial?to?parallel conversion module and store them into the first?level data caching, refresh their frame and store them in the second?level data caching by means of the master control module, and store the data in Flash memory by means of the Flash control module. The testing results show that the data read from the flash memory is correct and the system is provided with reliable run.
Keywords: multi?channel data storage; FPGA; FLASH, serial?to?parallel conversion; data?caching; data frame refreshing
隨著我國(guó)工業(yè)、農(nóng)業(yè)、軍事、航天等事業(yè)的不斷發(fā)展,各種電子系統(tǒng)、自動(dòng)化裝置以及傳感器等也在不斷對(duì)其功能和結(jié)構(gòu)進(jìn)行改進(jìn),需要記錄和存儲(chǔ)的數(shù)據(jù)也越來(lái)越多,常常需要同時(shí)采集和存儲(chǔ)多個(gè)通道的數(shù)據(jù)。而所采集的數(shù)據(jù)傳輸速率不一定可以與FLASH存儲(chǔ)器的存儲(chǔ)速率相匹配。針對(duì)此,提出一種基于FPGA和FLASH的多路數(shù)據(jù)存儲(chǔ)技術(shù),利用FPGA內(nèi)部的RAM構(gòu)造兩級(jí)數(shù)據(jù)緩存,有效解決了該問(wèn)題。
1? 整體方案
系統(tǒng)需要完成RS 422數(shù)據(jù)的串行?并行轉(zhuǎn)換、數(shù)據(jù)緩存和FLASH接口控制,這幾項(xiàng)工作可以由FPGA來(lái)完成,而不需要借助其他器件。整體方案的結(jié)構(gòu)框圖如圖1所示。
2? FPGA邏輯功能
FPGA的邏輯功能模塊主要由RS 422數(shù)據(jù)[1?2]串并轉(zhuǎn)換模塊(2 KB和8 KB的雙口RAM緩存)、FLASH接口控制模塊和主控模塊組成,其組成框圖如圖2所示。
串并轉(zhuǎn)換模塊可以實(shí)現(xiàn)UART[3]通信功能,將由1位起始位、8位數(shù)據(jù)、1位停止位組成的串行數(shù)據(jù)轉(zhuǎn)換成8位的并行數(shù)據(jù),再輸入到第一級(jí)的2 KB雙口RAM緩存中。主控模塊是整個(gè)FPGA邏輯功能模塊的核心,主要負(fù)責(zé)接收如系統(tǒng)復(fù)位、啟動(dòng)采集,以及對(duì)FLASH的擦除、讀取等控制命令,還能在采集狀態(tài)中判斷一級(jí)緩存中的數(shù)據(jù)量是否達(dá)到可以輸出的標(biāo)準(zhǔn),若達(dá)到,就將其中的數(shù)據(jù)讀取,按照一定的幀結(jié)構(gòu)編幀并輸入到下一級(jí)緩存。FLASH控制模塊的功能是向FLASH芯片發(fā)出命令來(lái)控制芯片的讀寫(xiě)和擦除。本設(shè)計(jì)所運(yùn)用的兩級(jí)數(shù)據(jù)緩存,第一級(jí)為2 KB雙口RAM緩存,用來(lái)存放經(jīng)過(guò)串并轉(zhuǎn)換的輸入數(shù)據(jù),主控模塊對(duì)其數(shù)量進(jìn)行檢測(cè),達(dá)到讀取標(biāo)準(zhǔn)后即將其讀取并重新編幀,寫(xiě)入第二級(jí)的8 KB雙口RAM緩存中,在FLASH控制模塊的作用下寫(xiě)入FLASH存儲(chǔ)器中。
在本文設(shè)計(jì)的系統(tǒng)中,輸入的串行數(shù)據(jù)速率為921.6 Kb/s,所使用的時(shí)鐘信號(hào)的頻率為36.864 MHz,將輸入數(shù)據(jù)按每504 B數(shù)據(jù)和8 B幀標(biāo)記為一組編為一幀,主控模塊判斷一級(jí)緩存中的數(shù)據(jù)量是否達(dá)到512 B,若達(dá)到,則從中讀取504 B數(shù)據(jù),重新編幀輸入第二級(jí)緩存。
3? 兩級(jí)數(shù)據(jù)緩存模塊設(shè)計(jì)
本設(shè)計(jì)使用的FPGA芯片是Xilinx公司的XC3S400,其中設(shè)計(jì)有RAMB16_SM_SN隨機(jī)存儲(chǔ)器[4],其中每塊RAM都有2 KB的數(shù)據(jù)存儲(chǔ)空間和256 B的校驗(yàn)位存儲(chǔ)空間,可以選擇適應(yīng)實(shí)際需求的地址和數(shù)據(jù)寬度。以下分別介紹內(nèi)部數(shù)據(jù)緩存模塊的兩級(jí)。
1) 2 KB雙口RAM緩存。本設(shè)計(jì)使用了型號(hào)為RAMB16_S9_S9的2 KB雙口RAM緩存,其原理圖如圖3所示,端口A和端口B具有相同的結(jié)構(gòu),操作方法也是一致的,兩個(gè)端口的相同地址對(duì)應(yīng)的是RAM的同一個(gè)存儲(chǔ)單元,且都可以進(jìn)行讀寫(xiě)操作。將端口A和端口B分別設(shè)置為寫(xiě)數(shù)據(jù)端口和讀數(shù)據(jù)端口。ENA是讀寫(xiě)、復(fù)位使能信號(hào),為低電平時(shí),數(shù)據(jù)無(wú)法寫(xiě)入RAM,輸出也不會(huì)變化,所以必須使ENA為高電平才能進(jìn)行讀寫(xiě)操作。當(dāng)SSRA為低電平,WEA(寫(xiě)使能)為高電平時(shí),在時(shí)鐘信號(hào)上升沿,數(shù)據(jù)由DIA端口寫(xiě)入由ADDRA指示的存儲(chǔ)單元;而當(dāng)SSRA與WEA均為低電平時(shí),在時(shí)鐘信號(hào)上升沿,ADDRA指示單元中的數(shù)據(jù)會(huì)由DOB端口輸出[5]。
2) 8 KB雙口RAM緩存。8 KB雙口RAM緩存的WEA(B),ENA(B),SSRA(B),CLKA(B)的接法可以參照8 KB雙口RAM緩存中相同管腳的接法,ADDRA(B),DIA(B)和DOA(B)的接法有所變化。將4塊RAMB16_S2_S2組合起來(lái)構(gòu)成8 KB雙口RAM緩存。將存入一級(jí)緩存的8位并行數(shù)據(jù)拆解成兩位一組分別存入4塊RAMB16_S2_S2中,4塊RAMB16_S2_S2共用地址線(xiàn)和控制信號(hào),工作狀態(tài)一致。當(dāng)輸出信號(hào)時(shí),將之前被拆分為4組兩位數(shù)據(jù)的8位并行數(shù)據(jù)重新組合,再輸出。8 KB雙口RAM緩存的組成框圖如圖4所示。
4? 主控模塊控制兩級(jí)緩存的邏輯
主控模塊讀取一級(jí)緩存中的數(shù)據(jù),重新編幀并存入二級(jí)緩存。重新編幀的數(shù)據(jù)以512 B為一幀,包括4 B的幀頭FDB18540、1 B的幀標(biāo)志(分別為00H,33H,66H,99H,CCH,F(xiàn)FH)、3 B的幀計(jì)數(shù)以及數(shù)據(jù)。幀頭在每一幀數(shù)據(jù)的最前面,用來(lái)指示一幀數(shù)據(jù)的開(kāi)始,使數(shù)據(jù)更有條理便于查看;幀標(biāo)志的作用是對(duì)來(lái)自不同通道的數(shù)據(jù)進(jìn)行區(qū)分;一幀數(shù)據(jù)結(jié)束后幀計(jì)數(shù)就加一,幀計(jì)數(shù)可以用來(lái)統(tǒng)計(jì)數(shù)據(jù)的量,而且如果幀計(jì)數(shù)不是連續(xù)遞增的,就說(shuō)明有數(shù)據(jù)丟失的情況出現(xiàn)。幀頭、幀標(biāo)志、幀計(jì)數(shù)共8 B,從一級(jí)緩存中讀取的數(shù)據(jù)有504 B。
主控模塊控制兩級(jí)緩存的工作流程圖如圖5所示。設(shè)備加電之后,直接往第二級(jí)緩存中寫(xiě)入設(shè)定好的幀頭;主控模塊對(duì)第一級(jí)緩存中的數(shù)據(jù)量進(jìn)行輪詢(xún),如果有完整的一幀,就依次將幀標(biāo)志、幀計(jì)數(shù)和第一級(jí)緩存中的數(shù)據(jù)寫(xiě)入第二級(jí)。完成以上工作之后,幀計(jì)數(shù)加一。
5? FLASH控制模塊邏輯
FLASH控制模塊對(duì)FLASH存儲(chǔ)器發(fā)出指令,F(xiàn)LASH存儲(chǔ)器收到指令后執(zhí)行相應(yīng)的擦除、寫(xiě)入、讀取操作[6]。擦除命令優(yōu)先級(jí)最高,其次為寫(xiě)入命令,最后是讀取命令。本設(shè)計(jì)中擦除和寫(xiě)入是按照順序進(jìn)行的。FLASH控制模塊的工作流程圖見(jiàn)圖6。
圖6? FLASH控制模塊工作流程圖
本設(shè)計(jì)選用型號(hào)為K9WBG08U1M的FLASH存儲(chǔ)器。該器件的擦除、寫(xiě)入、讀取等一系列操作都是通過(guò)寫(xiě)入相應(yīng)的命令來(lái)實(shí)現(xiàn)的[7],K9WBG08U1M只有一組8位的并行總線(xiàn),配合鎖存信號(hào)ALE和CLE來(lái)決定輸入的是命令、地址,還是數(shù)據(jù),從而達(dá)到這8位總線(xiàn)的復(fù)用[8]。一片K9WBG08U1M有8 192個(gè)數(shù)據(jù)塊,每塊又包含64頁(yè),每頁(yè)有4 096 B數(shù)據(jù)。
該芯片按塊擦除,按頁(yè)寫(xiě)入和讀取。在擦除、寫(xiě)入、讀取前首先要檢測(cè)無(wú)效塊[9],方法是:讀取每塊前兩頁(yè)的數(shù)據(jù),如果都為FF,就說(shuō)明該塊有效,可以進(jìn)行操作;否則,該塊為無(wú)效塊,后續(xù)操作應(yīng)該跳過(guò)無(wú)效塊[10]。
5.1? 擦除操作
擦除FLASH的流程圖如圖7所示。
5.2? 寫(xiě)入操作
寫(xiě)入操作的流程圖如圖8所示。
5.3? 讀取操作
讀取操作的流程圖如圖9所示。
6? 測(cè)試結(jié)果
測(cè)試數(shù)據(jù)設(shè)置為步長(zhǎng)為1的遞增數(shù),用上位機(jī)軟件讀取FLASH中的數(shù)據(jù),測(cè)試結(jié)果如圖10所示。
從圖10可以看出數(shù)據(jù)幀結(jié)構(gòu)與設(shè)定的編幀結(jié)構(gòu)一致,每幀數(shù)據(jù)都由4 B的幀頭、1 B的幀標(biāo)志、3 B的幀計(jì)數(shù)以及504 B數(shù)據(jù)組成(圖中只顯示了部分?jǐn)?shù)據(jù))。
7? 結(jié)? 語(yǔ)
本文提出一種基于FPGA和FLASH的多路數(shù)據(jù)存儲(chǔ)技術(shù),F(xiàn)PGA完成了對(duì)輸入數(shù)據(jù)的串并轉(zhuǎn)換、數(shù)據(jù)緩存和對(duì)FLASH存儲(chǔ)器的控制。測(cè)試結(jié)果表明,通過(guò)這種技術(shù),數(shù)據(jù)輸入速率和存儲(chǔ)速率不匹配的問(wèn)題可以得到解決,能夠正常完成數(shù)據(jù)記錄工作,提高了系統(tǒng)可靠性。
參考文獻(xiàn)
[1] 張芹芹,葉冰.一種新型RS 422總線(xiàn)數(shù)據(jù)提取技術(shù)[J].中國(guó)科技信息,2018(2):26?27.
[2] 呂波,張涌,黃侃,等.基于FPGA的四口RAM設(shè)計(jì)與實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,2017(1):34?37.
[3] 賈亮,冀源.基于FPGA的串口通信控制器設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2016,35(22):33?35.
[4] 吳文杰,李利品,王杏卓,等.多道能譜儀ARM與FPGA高速數(shù)據(jù)并行通信設(shè)計(jì)[J].核電子學(xué)與探測(cè)技術(shù),2017,37(11):1151?1155.
[5] 趙倩,唐磊.一種基于NAND FLASH的多通道存儲(chǔ)系統(tǒng)編址方式研究與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2018,35(9):32?36.
[6] 代明清,邊慶,周?chē)[,等.基于NAND FLASH的高速大容量存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2018,14(13):208?210.
[7] 張惠臻,周炎,王成.基于 NAND FLASH的嵌入式大規(guī)模數(shù)據(jù)存儲(chǔ)機(jī)制[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2017,45(1):46?51.
[8] 高陽(yáng),王代華,王曉楠.存儲(chǔ)測(cè)試系統(tǒng)中FLASH的存儲(chǔ)可靠性技術(shù)研究[J].現(xiàn)代電子技術(shù),2017,40(18):131?134.
[9] 王美麗.FPGA中BRAM的設(shè)計(jì)[D].西安:西安電子科技大學(xué),2012.
[10] 邊大亮.基于閃存的雙通道圖像記錄器設(shè)計(jì)與實(shí)現(xiàn)[D].太原:中北大學(xué),2015.
[11] 童巍.散貨堆場(chǎng)地圖系統(tǒng)關(guān)鍵技術(shù)的研究和實(shí)現(xiàn)[D].上海:上海交通大學(xué),2017.