吳嘉偉 魏志強 張會新



摘? 要: 針對多路數據存儲中所采集數據傳輸與存儲速率不匹配的問題,提出一種基于FPGA和FLASH的多路數據存儲技術。FPGA芯片可以通過RS 422串并轉換模塊將輸入的串行數據轉換為并行數據存入第一級數據緩存,主控模塊對其重新編幀后存入第二級數據緩存中,最后在FLASH控制模塊作用下把數據存入FLASH存儲器中。經測試,從FLASH存儲器中讀取的數據正確,該系統工作可靠。
關鍵詞: 多路數據存儲; FPGA; FLASH; 串并轉換; 數據緩存; 數據重新編幀
中圖分類號: TN919?34? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼: A? ? ? ? ? ? ? ? ? ? ? 文章編號: 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
隨著我國工業、農業、軍事、航天等事業的不斷發展,各種電子系統、自動化裝置以及傳感器等也在不斷對其功能和結構進行改進,需要記錄和存儲的數據也越來越多,常常需要同時采集和存儲多個通道的數據。而所采集的數據傳輸速率不一定可以與FLASH存儲器的存儲速率相匹配。針對此,提出一種基于FPGA和FLASH的多路數據存儲技術,利用FPGA內部的RAM構造兩級數據緩存,有效解決了該問題。
1? 整體方案
系統需要完成RS 422數據的串行?并行轉換、數據緩存和FLASH接口控制,這幾項工作可以由FPGA來完成,而不需要借助其他器件。整體方案的結構框圖如圖1所示。
2? FPGA邏輯功能
FPGA的邏輯功能模塊主要由RS 422數據[1?2]串并轉換模塊(2 KB和8 KB的雙口RAM緩存)、FLASH接口控制模塊和主控模塊組成,其組成框圖如圖2所示。
串并轉換模塊可以實現UART[3]通信功能,將由1位起始位、8位數據、1位停止位組成的串行數據轉換成8位的并行數據,再輸入到第一級的2 KB雙口RAM緩存中。主控模塊是整個FPGA邏輯功能模塊的核心,主要負責接收如系統復位、啟動采集,以及對FLASH的擦除、讀取等控制命令,還能在采集狀態中判斷一級緩存中的數據量是否達到可以輸出的標準,若達到,就將其中的數據讀取,按照一定的幀結構編幀并輸入到下一級緩存。FLASH控制模塊的功能是向FLASH芯片發出命令來控制芯片的讀寫和擦除。本設計所運用的兩級數據緩存,第一級為2 KB雙口RAM緩存,用來存放經過串并轉換的輸入數據,主控模塊對其數量進行檢測,達到讀取標準后即將其讀取并重新編幀,寫入第二級的8 KB雙口RAM緩存中,在FLASH控制模塊的作用下寫入FLASH存儲器中。
在本文設計的系統中,輸入的串行數據速率為921.6 Kb/s,所使用的時鐘信號的頻率為36.864 MHz,將輸入數據按每504 B數據和8 B幀標記為一組編為一幀,主控模塊判斷一級緩存中的數據量是否達到512 B,若達到,則從中讀取504 B數據,重新編幀輸入第二級緩存。
3? 兩級數據緩存模塊設計
本設計使用的FPGA芯片是Xilinx公司的XC3S400,其中設計有RAMB16_SM_SN隨機存儲器[4],其中每塊RAM都有2 KB的數據存儲空間和256 B的校驗位存儲空間,可以選擇適應實際需求的地址和數據寬度。以下分別介紹內部數據緩存模塊的兩級。
1) 2 KB雙口RAM緩存。本設計使用了型號為RAMB16_S9_S9的2 KB雙口RAM緩存,其原理圖如圖3所示,端口A和端口B具有相同的結構,操作方法也是一致的,兩個端口的相同地址對應的是RAM的同一個存儲單元,且都可以進行讀寫操作。將端口A和端口B分別設置為寫數據端口和讀數據端口。ENA是讀寫、復位使能信號,為低電平時,數據無法寫入RAM,輸出也不會變化,所以必須使ENA為高電平才能進行讀寫操作。當SSRA為低電平,WEA(寫使能)為高電平時,在時鐘信號上升沿,數據由DIA端口寫入由ADDRA指示的存儲單元;而當SSRA與WEA均為低電平時,在時鐘信號上升沿,ADDRA指示單元中的數據會由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組合起來構成8 KB雙口RAM緩存。將存入一級緩存的8位并行數據拆解成兩位一組分別存入4塊RAMB16_S2_S2中,4塊RAMB16_S2_S2共用地址線和控制信號,工作狀態一致。當輸出信號時,將之前被拆分為4組兩位數據的8位并行數據重新組合,再輸出。8 KB雙口RAM緩存的組成框圖如圖4所示。
4? 主控模塊控制兩級緩存的邏輯
主控模塊讀取一級緩存中的數據,重新編幀并存入二級緩存。重新編幀的數據以512 B為一幀,包括4 B的幀頭FDB18540、1 B的幀標志(分別為00H,33H,66H,99H,CCH,FFH)、3 B的幀計數以及數據。幀頭在每一幀數據的最前面,用來指示一幀數據的開始,使數據更有條理便于查看;幀標志的作用是對來自不同通道的數據進行區分;一幀數據結束后幀計數就加一,幀計數可以用來統計數據的量,而且如果幀計數不是連續遞增的,就說明有數據丟失的情況出現。幀頭、幀標志、幀計數共8 B,從一級緩存中讀取的數據有504 B。
主控模塊控制兩級緩存的工作流程圖如圖5所示。設備加電之后,直接往第二級緩存中寫入設定好的幀頭;主控模塊對第一級緩存中的數據量進行輪詢,如果有完整的一幀,就依次將幀標志、幀計數和第一級緩存中的數據寫入第二級。完成以上工作之后,幀計數加一。
5? FLASH控制模塊邏輯
FLASH控制模塊對FLASH存儲器發出指令,FLASH存儲器收到指令后執行相應的擦除、寫入、讀取操作[6]。擦除命令優先級最高,其次為寫入命令,最后是讀取命令。本設計中擦除和寫入是按照順序進行的。FLASH控制模塊的工作流程圖見圖6。
圖6? FLASH控制模塊工作流程圖
本設計選用型號為K9WBG08U1M的FLASH存儲器。該器件的擦除、寫入、讀取等一系列操作都是通過寫入相應的命令來實現的[7],K9WBG08U1M只有一組8位的并行總線,配合鎖存信號ALE和CLE來決定輸入的是命令、地址,還是數據,從而達到這8位總線的復用[8]。一片K9WBG08U1M有8 192個數據塊,每塊又包含64頁,每頁有4 096 B數據。
該芯片按塊擦除,按頁寫入和讀取。在擦除、寫入、讀取前首先要檢測無效塊[9],方法是:讀取每塊前兩頁的數據,如果都為FF,就說明該塊有效,可以進行操作;否則,該塊為無效塊,后續操作應該跳過無效塊[10]。
5.1? 擦除操作
擦除FLASH的流程圖如圖7所示。
5.2? 寫入操作
寫入操作的流程圖如圖8所示。
5.3? 讀取操作
讀取操作的流程圖如圖9所示。
6? 測試結果
測試數據設置為步長為1的遞增數,用上位機軟件讀取FLASH中的數據,測試結果如圖10所示。
從圖10可以看出數據幀結構與設定的編幀結構一致,每幀數據都由4 B的幀頭、1 B的幀標志、3 B的幀計數以及504 B數據組成(圖中只顯示了部分數據)。
7? 結? 語
本文提出一種基于FPGA和FLASH的多路數據存儲技術,FPGA完成了對輸入數據的串并轉換、數據緩存和對FLASH存儲器的控制。測試結果表明,通過這種技術,數據輸入速率和存儲速率不匹配的問題可以得到解決,能夠正常完成數據記錄工作,提高了系統可靠性。
參考文獻
[1] 張芹芹,葉冰.一種新型RS 422總線數據提取技術[J].中國科技信息,2018(2):26?27.
[2] 呂波,張涌,黃侃,等.基于FPGA的四口RAM設計與實現[J].儀表技術與傳感器,2017(1):34?37.
[3] 賈亮,冀源.基于FPGA的串口通信控制器設計[J].微型機與應用,2016,35(22):33?35.
[4] 吳文杰,李利品,王杏卓,等.多道能譜儀ARM與FPGA高速數據并行通信設計[J].核電子學與探測技術,2017,37(11):1151?1155.
[5] 趙倩,唐磊.一種基于NAND FLASH的多通道存儲系統編址方式研究與實現[J].微電子學與計算機,2018,35(9):32?36.
[6] 代明清,邊慶,周嘯,等.基于NAND FLASH的高速大容量存儲系統設計[J].電腦知識與技術,2018,14(13):208?210.
[7] 張惠臻,周炎,王成.基于 NAND FLASH的嵌入式大規模數據存儲機制[J].華中科技大學學報(自然科學版),2017,45(1):46?51.
[8] 高陽,王代華,王曉楠.存儲測試系統中FLASH的存儲可靠性技術研究[J].現代電子技術,2017,40(18):131?134.
[9] 王美麗.FPGA中BRAM的設計[D].西安:西安電子科技大學,2012.
[10] 邊大亮.基于閃存的雙通道圖像記錄器設計與實現[D].太原:中北大學,2015.
[11] 童巍.散貨堆場地圖系統關鍵技術的研究和實現[D].上海:上海交通大學,2017.