孫 昕 張世海
(91439部隊(duì)96分隊(duì) 大連 116041)
?
基于FPGA的水下數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)*
孫昕張世海
(91439部隊(duì)96分隊(duì)大連116041)
摘要為了解決在水下多通道數(shù)據(jù)采集系統(tǒng)中不能滿足高速大容量數(shù)據(jù)脫機(jī)存儲(chǔ)的問(wèn)題,設(shè)計(jì)了一種基于FPGA的磁盤(pán)陣列存儲(chǔ)方案。在以Cyclone Ⅳ FPGA為核心的SOPC系統(tǒng)上實(shí)現(xiàn)了IDE接口控制,并完成了硬盤(pán)參數(shù)檢測(cè)與初始化配置以及基于PIO模式的數(shù)據(jù)讀寫(xiě)?;诖疟P(pán)陣列存儲(chǔ)的設(shè)計(jì)思想,采用IDE/SATA雙接口和雙通道的雙存儲(chǔ)設(shè)計(jì),利用FATFS文件系統(tǒng)進(jìn)行文件的管理,在完成數(shù)據(jù)備份任務(wù)的同時(shí),增強(qiáng)數(shù)據(jù)存儲(chǔ)系統(tǒng)的擴(kuò)展性和靈活性。
關(guān)鍵詞數(shù)據(jù)存儲(chǔ); 磁盤(pán)陣列; FPGA; SOPC; IDE
Class NumberTP274.7
隨著數(shù)字信號(hào)處理領(lǐng)域和電子技術(shù)的飛速發(fā)展,數(shù)據(jù)存儲(chǔ)系統(tǒng)在各個(gè)領(lǐng)域的研究中發(fā)揮著越來(lái)越重要的作用。水聲設(shè)備的不斷推陳出新對(duì)存儲(chǔ)介質(zhì)的體積、容量和讀寫(xiě)速度以及便攜性等諸多方面提出了更高的要求。但是,在水下電池供電的系統(tǒng)中,環(huán)境惡劣,數(shù)據(jù)無(wú)法實(shí)時(shí)傳輸,只能現(xiàn)場(chǎng)完成信息的快速采集和準(zhǔn)確存儲(chǔ),事后對(duì)數(shù)據(jù)回傳或存儲(chǔ)器回收,再由計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行處理和測(cè)試。針對(duì)這一問(wèn)題,設(shè)計(jì)一種能夠在水下節(jié)點(diǎn)工作的數(shù)據(jù)存儲(chǔ)系統(tǒng)有著十分重要的意義。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)一般利用CPU或者M(jìn)CU完成,這種方法將AD數(shù)據(jù)讀入并轉(zhuǎn)存至少需要四個(gè)時(shí)鐘周期,在串行指令執(zhí)行的方式下,速度和效率都會(huì)降低[1]。因此,多年來(lái)針對(duì)不同類(lèi)型的處理芯片和研究方法對(duì)存儲(chǔ)系統(tǒng)的研究開(kāi)展廣泛[2~6]。
文獻(xiàn)[2]中介紹了一種基于16位AVR單片機(jī)的IDE(Integrated Drive Electronics)硬盤(pán)高速數(shù)字圖像采集和存儲(chǔ)系統(tǒng)。系統(tǒng)利用單片機(jī)對(duì)硬盤(pán)進(jìn)行接口控制,并采用硬盤(pán)直寫(xiě)技術(shù),利用兩片SRAM以乒乓方式將CMOS圖像傳感器采集到的數(shù)字圖像信息存儲(chǔ)到硬盤(pán)中。但是由于整個(gè)系統(tǒng)內(nèi)部的邏輯器件較多,因此產(chǎn)生的干擾較大。文獻(xiàn)[3]中介紹了一種基于S3C2410嵌入式ARM處理器的IDE硬盤(pán)存儲(chǔ)系統(tǒng),該系統(tǒng)通過(guò)在ARM處理器內(nèi)部移植Linux操作系統(tǒng)來(lái)對(duì)硬盤(pán)進(jìn)行控制,將系統(tǒng)的測(cè)量數(shù)據(jù)、波形以及其它相關(guān)信息進(jìn)行存儲(chǔ)。不過(guò)處理器本身的靈活度和擴(kuò)展性不夠,功能實(shí)現(xiàn)起來(lái)較為復(fù)雜。文獻(xiàn)[4]中介紹了一種基于TMS320系列DSP處理器的IDE硬盤(pán)數(shù)據(jù)存儲(chǔ)系統(tǒng)。該系統(tǒng)采用了DSP作為主控制芯片,負(fù)責(zé)硬盤(pán)控制和數(shù)據(jù)的傳輸;FPGA和SDRAM作為輔助芯片,負(fù)責(zé)實(shí)現(xiàn)DSP與IDE接口之間時(shí)序的轉(zhuǎn)換和數(shù)據(jù)的緩存,從而完成硬盤(pán)的控制和數(shù)據(jù)傳輸。但是DSP多用來(lái)做算法實(shí)現(xiàn),功能比較固定,做數(shù)據(jù)存儲(chǔ)不是其強(qiáng)項(xiàng),并且需要其它邏輯芯片的配合,設(shè)計(jì)過(guò)程較為復(fù)雜,兼容性不強(qiáng)。
本文結(jié)合當(dāng)前技術(shù)發(fā)展形勢(shì),研制開(kāi)發(fā)了一種以FPGA為核心,基于蓄電池工作的IDE/SATA雙接口和雙通道的磁盤(pán)陣列存儲(chǔ)系統(tǒng)。換能器是完成電能與聲能轉(zhuǎn)化以實(shí)現(xiàn)水下目標(biāo)探測(cè)和通信的基本部件。
2.1系統(tǒng)設(shè)計(jì)思路和硬件設(shè)計(jì)
Nios Ⅱ是Altera公司的一款軟核處理器,其最大的特點(diǎn)是可由用戶按功能需求進(jìn)行配置,易于和其他IP(intellectual property)核互聯(lián)完成系統(tǒng)設(shè)計(jì),可有效降低開(kāi)發(fā)周期和成本。
基于Nios Ⅱ的SOPC設(shè)計(jì)是一種靈活、高效的嵌入式解決方案,它將完整產(chǎn)品的各個(gè)功能模塊集成到一塊FPGA芯片上,構(gòu)成一個(gè)可編程偏上系統(tǒng)[7]。因此本系統(tǒng)采用Cyclone Ⅳ GX系列器件的EP4CGX110CF23C7作為主控芯片,其自帶的8個(gè)可獨(dú)立操作的全雙工高速收發(fā)器作為數(shù)據(jù)的輸入接口,在FPGA內(nèi)部建立基于NIOS Ⅱ處理器的SOPC片上系統(tǒng)將接收到的數(shù)據(jù)存儲(chǔ)到硬盤(pán)陣列中。
系統(tǒng)選用EPCS串行配置芯片在系統(tǒng)上電視對(duì)FPGA進(jìn)行配置[8],用于存儲(chǔ)FPGA的配置數(shù)據(jù)以及Nios Ⅱ處理器中的軟件程序。采用IDE協(xié)議實(shí)現(xiàn)硬盤(pán)數(shù)據(jù)的傳輸,而目前SATA接口硬盤(pán)的使用更為廣泛。因此,系統(tǒng)中使用了IDE-SATA接口芯片JM20330,使IDE與SATA兩種硬盤(pán)均可以在系統(tǒng)中正常使用。另外,系統(tǒng)預(yù)留了以太網(wǎng)接口,便于后續(xù)開(kāi)發(fā)過(guò)程中系統(tǒng)與計(jì)算機(jī)之間進(jìn)行基于以太網(wǎng)協(xié)議的控制或數(shù)據(jù)回傳。整個(gè)系統(tǒng)的總體結(jié)構(gòu)框圖如圖1所示。
2.2FPGA內(nèi)部硬件結(jié)構(gòu)設(shè)計(jì)
FPGA是系統(tǒng)的核心,整個(gè)系統(tǒng)的任務(wù)調(diào)度和管理都由FPGA上架建的片上系統(tǒng)來(lái)完成。系統(tǒng)中包含的功能模塊包括Nios Ⅱ處理器、System ID、內(nèi)部定時(shí)器、JTAG_uart、片上RAM、SSRAM控制器、Avalon三態(tài)橋、IDE接口控制器和EPCS控制器等,F(xiàn)PGA內(nèi)部的總體結(jié)構(gòu)圖如圖2所示。
圖1 數(shù)據(jù)存儲(chǔ)系統(tǒng)總體結(jié)構(gòu)框圖
圖2 FPGA內(nèi)部總體結(jié)構(gòu)框圖
3.1硬盤(pán)物理介質(zhì)
硬盤(pán)驅(qū)動(dòng)器的磁碟由一定量的可寫(xiě)表面組成,每張磁盤(pán)上都有一些被稱為磁道的同心圓,數(shù)據(jù)就存儲(chǔ)在磁道上,磁頭被定位在某個(gè)磁道上,磁道上的能被磁頭訪問(wèn)的某一位置被稱為柱面。同時(shí)磁道被進(jìn)一步劃分為扇區(qū),扇區(qū)是最小的讀寫(xiě)單位。訪問(wèn)扇區(qū)時(shí),讀寫(xiě)頭首先被定位在正確的磁道上,等到正確的扇區(qū)轉(zhuǎn)到讀寫(xiě)頭下面的時(shí)候,驅(qū)動(dòng)器就開(kāi)始讀取數(shù)據(jù)。驅(qū)動(dòng)器的每個(gè)扇區(qū)都可以被柱面、磁頭和扇區(qū)號(hào)所唯一確定。
3.2IDE接口控制方法的實(shí)現(xiàn)
Nios Ⅱ處理器對(duì)硬盤(pán)的控制是通過(guò)接口寄存器實(shí)現(xiàn)的,ATA標(biāo)準(zhǔn)中定義的接口寄存器分為命令寄存器和控制/診斷寄存器兩組,其中命令寄存器組用于主機(jī)與設(shè)備之間命令與參數(shù)信息的傳輸,控制/診斷寄存器組用于主機(jī)對(duì)設(shè)備的參數(shù)控制以及設(shè)備診斷信息的傳輸[9]。
系統(tǒng)中使用邏輯尋址方式進(jìn)行尋址,因此扇區(qū)號(hào)、柱面號(hào)以及磁頭號(hào)等地址信息均通過(guò)對(duì)邏輯地址的分段截取而得到。在軟件程序中地址寄存器寫(xiě)入命令的具體實(shí)現(xiàn)過(guò)程如下:
IOWR_ALTERA_AVALON_CF_IDE_SECTOR_NUMBER(ide_base,LBA & 0xFF);
LBA >>=8;
IOWR_ALTERA_AVALON_CF_IDE_CYLINDER_LOW(ide_base,LBA & 0xFF);
LBA >>=8;
IOWR_ALTERA_AVALON_CF_IDE_CYLINDER_HIGH(ide_base,LBA & 0xFF);
LBA >>=8;
IOWR_ALTERA_AVALON_CF_IDE_DEVICE_HEAD(ide_base,(LBA & 0x0F));
其中,ide_base為IDE基地址,LBA為硬盤(pán)操作的邏輯地址。
3.3硬盤(pán)參數(shù)檢測(cè)與初始化
為了對(duì)硬盤(pán)進(jìn)行控制和操作,在硬盤(pán)使用之前應(yīng)對(duì)硬盤(pán)的特性參數(shù)進(jìn)行檢測(cè),以確定硬盤(pán)所支持的尋址方式、可用扇區(qū)數(shù)以及支持的操作模式等特性信息。硬盤(pán)參數(shù)檢測(cè)使用IDENTIFY DEVICE指令。當(dāng)主機(jī)檢測(cè)到驅(qū)動(dòng)器空閑且準(zhǔn)備好時(shí),向命令寄存器中寫(xiě)入?yún)?shù)檢測(cè)指令,驅(qū)動(dòng)器向扇區(qū)緩沖區(qū)中寫(xiě)入硬盤(pán)信息的參數(shù)塊,主機(jī)利用讀扇區(qū)命令進(jìn)行參數(shù)的讀取。
以IDE為接口的硬盤(pán)傳輸模式和協(xié)議分為兩種:PIO(Programmed I/O)和DMA(Direct Memory Access)兩種。兩種模式的區(qū)別在于:PIO模式需要處理器的參與來(lái)讀取數(shù)據(jù),DMA模式則不需要[10]。為了設(shè)計(jì)簡(jiǎn)單,因此采用PIO模式作為傳輸協(xié)議。
圖3為硬盤(pán)參數(shù)檢測(cè)及初始化程序的流程圖。需要完成對(duì)硬盤(pán)特性參數(shù)的檢測(cè)、PIO模式的初始化以及觸發(fā)中斷時(shí)傳輸?shù)纳葏^(qū)數(shù)的設(shè)置。每一步都通過(guò)對(duì)不同地址寫(xiě)寄存器寫(xiě)參數(shù)來(lái)完成。
3.4扇區(qū)數(shù)據(jù)讀寫(xiě)軟件設(shè)計(jì)
PIO操作模塊接收系統(tǒng)控制模塊發(fā)送的模式選擇信號(hào),產(chǎn)生硬盤(pán)PIO操作模式對(duì)應(yīng)的時(shí)序控制信號(hào),包括硬盤(pán)寄存器地址信號(hào)讀寫(xiě)控制信號(hào)數(shù)據(jù)寫(xiě)入或讀出信號(hào)。PIO模塊通過(guò)片選信號(hào)和地址信號(hào)將要讀寫(xiě)的硬盤(pán)扇區(qū)地址發(fā)送至硬盤(pán),同時(shí)發(fā)送硬盤(pán)讀寫(xiě)信號(hào)DIOR或DIOW,如果是寫(xiě)硬盤(pán)則將寫(xiě)入數(shù)據(jù)發(fā)送至數(shù)據(jù)寄存器,如果為讀硬盤(pán)則從數(shù)據(jù)寄存器中讀出數(shù)據(jù)[11]。
圖3 硬盤(pán)參數(shù)檢測(cè)及初始化程序流程圖
下面以PIO模式的寫(xiě)操作為例進(jìn)行扇區(qū)數(shù)據(jù)讀寫(xiě)程序的設(shè)計(jì),讀命令程序的執(zhí)行過(guò)程與寫(xiě)命令程序類(lèi)似,只是數(shù)據(jù)的傳輸方向相反。
PIO模式的數(shù)據(jù)寫(xiě)操作時(shí)序要求如圖4所示,在寫(xiě)操作過(guò)程中,處理器在將命令操作碼發(fā)送到命令寄存器之前,首先要把該命令執(zhí)行所需的參數(shù)寫(xiě)入相應(yīng)寄存器,之后等待DRDY位有效,硬盤(pán)驅(qū)動(dòng)器設(shè)置狀態(tài)寄存器的DRQ位,準(zhǔn)備接收數(shù)據(jù),處理器將數(shù)據(jù)寫(xiě)入扇區(qū)緩沖區(qū)。當(dāng)扇區(qū)緩沖區(qū)填滿之后,硬盤(pán)驅(qū)動(dòng)器清除DRQ位,同時(shí)置位BSY位,將扇區(qū)緩沖區(qū)中的數(shù)據(jù)寫(xiě)入硬盤(pán)。當(dāng)數(shù)據(jù)寫(xiě)入硬盤(pán)后,清除BSY位,同時(shí)產(chǎn)生INTRQ中斷請(qǐng)求,處理器查詢硬盤(pán)狀態(tài),并清除INTRQ。如果進(jìn)行的是多扇區(qū)寫(xiě)操作,此時(shí)硬盤(pán)驅(qū)動(dòng)器重新設(shè)置DRQ,開(kāi)始處理下一個(gè)扇區(qū)。
圖4 PIO模式寫(xiě)數(shù)據(jù)時(shí)序圖
圖5中利用流程圖的方式對(duì)PIO模式寫(xiě)操作程序的編寫(xiě)過(guò)程進(jìn)行了詳細(xì)的描述。
3.5磁盤(pán)陣列文件讀寫(xiě)軟件設(shè)計(jì)
系統(tǒng)使用了兩塊硬盤(pán)進(jìn)行數(shù)據(jù)的存儲(chǔ)與備份,在進(jìn)行文件寫(xiě)入操作時(shí),在硬盤(pán)A中完成一包數(shù)據(jù)的寫(xiě)入文件操作之后,開(kāi)始執(zhí)行數(shù)據(jù)文件備份程序,在硬盤(pán)B中寫(xiě)入相同的文件。文件備份完成后,在硬盤(pán)A中繼續(xù)寫(xiě)入下一個(gè)數(shù)據(jù)文件,如此反復(fù),完成原始數(shù)據(jù)文件和備份文件的寫(xiě)入,實(shí)現(xiàn)RAID1級(jí)別磁盤(pán)陣列的程序設(shè)計(jì)。磁盤(pán)陣列中單文件的寫(xiě)入過(guò)程與每一步所需調(diào)用的函數(shù)如圖6所示。
圖6 磁盤(pán)陣列中文件寫(xiě)入程序流程圖
將兩塊格式化后的硬盤(pán)連接到本數(shù)據(jù)存儲(chǔ)系統(tǒng),向硬盤(pán)A中寫(xiě)入數(shù)據(jù)并保存成txt文本文件,為了方便校驗(yàn),寫(xiě)入內(nèi)容為16bit遞增計(jì)數(shù)器的值不斷循環(huán),并在硬盤(pán)B中進(jìn)行文件的實(shí)時(shí)備份。
向系統(tǒng)中分別寫(xiě)入3.12MB、6.25MB和12.5MB大小的.txt文件,為了測(cè)量準(zhǔn)確,分別進(jìn)行三次寫(xiě)入,記錄文件的寫(xiě)入時(shí)間。
程序執(zhí)行結(jié)束后講兩個(gè)硬盤(pán)斷開(kāi)數(shù)據(jù)存儲(chǔ)系統(tǒng),分別連接到計(jì)算機(jī)上,編寫(xiě)Matlab程序?qū)λ鎯?chǔ)的文件內(nèi)容進(jìn)行校驗(yàn),經(jīng)檢查,文件內(nèi)容與存儲(chǔ)系統(tǒng)寫(xiě)入的內(nèi)容相一致。測(cè)試速度結(jié)果如表1所示,可知文件的平均寫(xiě)入速度大約為1.84MB/s。
表1 文件寫(xiě)入速度測(cè)試
本文設(shè)計(jì)實(shí)現(xiàn)了基于FPGA芯片為核心處理器的,能在水下節(jié)點(diǎn)使用的數(shù)據(jù)存儲(chǔ)磁盤(pán)陣列系統(tǒng),在FPGA內(nèi)部使用了SOPC技術(shù),利用FATFS文件系統(tǒng)進(jìn)行文件的管理,采用IDE/SATA雙接口和雙通道的雙存儲(chǔ)設(shè)計(jì),增強(qiáng)數(shù)據(jù)存儲(chǔ)的靈活性和可擴(kuò)展性,同時(shí)滿足數(shù)據(jù)的備份需求。
參 考 文 獻(xiàn)
[1] 王強(qiáng),文豐,任勇峰.基于FPGA的高速實(shí)時(shí)數(shù)據(jù)采集存儲(chǔ)系統(tǒng)[J].儀表技術(shù)與傳感器,2009(1):50-52.
WANG Qian, WEN Feng, REN Yongfeng. High-speed Real-time Data Acquisition and Storage System Based on FPGA[J]. Instrument Technique and Sensor,2009(1):50-52.
[2] 李川.基于IDE硬盤(pán)的數(shù)字圖像存儲(chǔ)技術(shù)研究[D].長(zhǎng)春:長(zhǎng)春理工大學(xué),2008:32-36.
LI Chuan. Research of Digital Image Storage Technique baed on IDE Hard disk[D]. Changchun: Changchun University of Science and Technology,2008:32-36.
[3] 蔣向輝.嵌入式諧波檢測(cè)儀的研究與設(shè)計(jì)[D].長(zhǎng)沙:湖南大學(xué),2007:52.
JIANG Xianghui. Design and Research of Embedded Harmonic Measurer[D]. Changsha: Hunan University,2007:52.
[4] 孟凡光.基于DSP的磁盤(pán)陣列的研究[D].哈爾濱:哈爾濱工程大學(xué),2004:26-33.
MENG Fanguang. Research of Disk Array based on DSP[D]. Harbin: Harbin Engineering University,2004:26-33.
[5] 宋曉偉,陳伯孝.基于FPGA控制的IDE磁盤(pán)陣列設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2008(4):31-33
SONG Xiaowei, CHEN Boxiao. Realization for protocol of IDE by FPGA[J]. Application of Electronic Technique,2008(4):31-33.
[6] 劉兆宏,李曦.IDE接口的一種新型實(shí)現(xiàn)方法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(7):114-116.
LIU Zhaohong, LI Xi. Realization Method of IDE Interface[J]. Computer Engineering and Application,2007,43(7):114-116.
[7] 楊曉飛,沙濤,黃錦安.基于Nios Ⅱ的硬盤(pán)存儲(chǔ)系統(tǒng)硬件設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(6):1041-1403.
YANG Xiaohui, SHA Fei, HUANG Jinan. Design of Hard disk Storage System based on Nios Ⅱ[J]. Computer Engineering and Design,2009,30(6):1041-1403.
[8] Altera Corporation. Cyclone Ⅳ Device Handbook,2011:1-12.
[9] 赫建國(guó),倪德克,鄭燕.基于Nios Ⅱ內(nèi)核的FPGA電路系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2010(4):145.
HE Jianguo, NI Deke, DENG Yan. The FPGA Circuit Design based on Nios Ⅱ Kernel[M]. Beijing: Publishing House of Electronics Industry,2010(4):145.
[10] 王海燕.嵌入式綜導(dǎo)系統(tǒng)數(shù)據(jù)存儲(chǔ)管理技術(shù)的研究與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工程大學(xué),2008:45-49.
WANG Haiyan. Realization and Research of Data Storage and Management on Embedded Intergrated Navigation System[D]. Harbin: Harbin Engineering University,2008:45-49.
[11] 胡鑒.固態(tài)硬盤(pán)中ATA協(xié)議的研究及其FPGA實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010:18.
HU Jian. Research and FPGA Implementation of ATA Protocols for SSD[D]. Guangzhou: South China University of Technology,2010:18.
收稿日期:2015年10月8日,修回日期:2015年11月24日
作者簡(jiǎn)介:孫昕,男,碩士,高級(jí)工程師,研究方向:水聲測(cè)量技術(shù)。張世海,男,助理工程師,研究方向:水聲測(cè)量技術(shù)。
中圖分類(lèi)號(hào)TP274.7
DOI:10.3969/j.issn.1672-9722.2016.04.045
Underwater Data Storage System Based on FPGA
SUN XinZHANG Shihai
(Unit 96, No. 91439 Troops of PLA, Dalian116041)
AbstractTo solve the problems that in underwater multi-channel data acquisition system cannot satisfy the high speed data rate and large storage capacity with no computer, a disk array storage system based on FPGA is designed. IDE communication and controller run on a SOPC system based on Altera’s Cyclone IV FPGA. The parameters detecting and initialization of the hard disk are accomplished, together with the reading and writing based on PIO mode. By adopting the design of IDE/SATA dual interfaces and dual channels, the system is based on the theory of disk array storage, and FATFS file system is utilized for file management, which enables the promoting of augment ability and flexibility of the system when the data is backed up at the same time
Key Wordsdata storage, RAID, FPGA, SOPC, IDE