彭 濤
(西安電子科技大學(xué)電子信息攻防對(duì)抗與仿真技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,陜西西安 710071)
在多數(shù)數(shù)據(jù)采集系統(tǒng)中,都需要將采集到的數(shù)據(jù)進(jìn)行處理,以文件形式存儲(chǔ)于存儲(chǔ)介質(zhì)中,并且在需要時(shí)下載到計(jì)算機(jī)上,通過高性能計(jì)算機(jī)來分析數(shù)據(jù)。根據(jù)這一需求,本文提供了一套完整的數(shù)據(jù)存儲(chǔ),下載軟硬件方案;本方案具有自動(dòng)化程度高,硬件電路簡單等優(yōu)點(diǎn)。系統(tǒng)以Xilinx公司Airtex-7系列FPGA為主控芯片,三星公司的Nand Flash芯片K9NCG08U5M作為文件存儲(chǔ)介質(zhì),Cypress公司的USB微控制器芯片CY7C68013A作為USB橋接芯片實(shí)現(xiàn)了數(shù)據(jù)存儲(chǔ)系統(tǒng)與計(jì)算機(jī)的通信。
圖1 硬件方案框圖
系統(tǒng)硬件框圖如圖1所示。其中,D/C表示數(shù)據(jù)總線與控制總線,USB Cable為普通USB下載線。通過該接口實(shí)現(xiàn)存儲(chǔ)系統(tǒng)與計(jì)算機(jī)的連接。
Airtex-7是Xilinx公司推出的FPGA芯片。其高性價(jià)比、低功耗,硬件可編程的優(yōu)點(diǎn),使它成為在電池供電,可擴(kuò)展系統(tǒng)中的首選。方案使用的具體型號(hào)為XC7A100T。該芯片具體參數(shù)如下:(1)101 440個(gè)邏輯單元,能夠?qū)崿F(xiàn)復(fù)雜的數(shù)字邏輯。(2)4 860 kB的RAM資源可以作為雙端口RAM實(shí)現(xiàn)大容量緩存、FIFO。(3)6個(gè)時(shí)鐘管理模塊,可以實(shí)現(xiàn)片上高精度多時(shí)鐘域系統(tǒng)。(4)300個(gè)可配置IO,可實(shí)現(xiàn)多通道數(shù)據(jù)采集。K9NCG08U5M是三星公司推出的Nand Flash存儲(chǔ)芯片,其容量達(dá)到8 GB,能夠滿足大多數(shù)數(shù)據(jù)采集系統(tǒng)的需求。Flash芯片中的數(shù)據(jù)尋址分為片地址,塊地址和頁地址。方案使用的Flash芯片內(nèi)部分為4個(gè)片,每一片通過芯片的片選信號(hào)使能,片地址需要2 bit實(shí)現(xiàn);每一片中有8 192個(gè)塊,所以塊地址需要13 bit來實(shí)現(xiàn);每一塊中有64頁,所以頁地址需要6 bit來實(shí)現(xiàn);所以需要21位地址來確定頁的物理位置。每一頁中可以存儲(chǔ)4 096 Byte數(shù)據(jù),所以整片K9NCG08U5M的容量為8 GB。
CY7C68013A為Cypress公司推出的高速USB外設(shè)控制器,其內(nèi)部集成了USB 2.0收發(fā)器、智能串行接口引擎和增強(qiáng)型8051微處理器。在本方案中CY7C68013A作為USB橋芯片,被配置為一個(gè)異步FIFO來作為存儲(chǔ)系統(tǒng)與計(jì)算機(jī)之間的通信接口,其使用簡易方便,大幅簡化了設(shè)計(jì)難度。本系統(tǒng)有兩種供電方式:系統(tǒng)供電方式與USB供電方式。在系統(tǒng)進(jìn)行數(shù)據(jù)采集任務(wù)時(shí)使用系統(tǒng)供電方式;在使用計(jì)算機(jī)訪問文件系統(tǒng)時(shí)使用USB供電方式。
系統(tǒng)的文件管理通過在Flash芯片的最后一個(gè)片選信號(hào)中的最后一個(gè)存儲(chǔ)塊中的第一頁建立一個(gè)文件列表來實(shí)現(xiàn)。文件列表格式如表1所示。
表1 文件列表存儲(chǔ)格式
其中文件個(gè)數(shù)信息存放在文件列表頁中的前2 Byte中,頁里的其余位置均用于存放文件信息;每一個(gè)文件的文件信息占用11 Byte的空間;由于頁大小的限制,本方案支持的文件數(shù)量最大為372個(gè)。
圖2 文件信息存儲(chǔ)格式
其中,D表示該文件是否被刪除。計(jì)算機(jī)讀取文件列表時(shí)通過該位判斷該文件是否已被刪除。FileNum:為文件序號(hào),范圍為1~512。SCS/ECS:存放文件存儲(chǔ)起始/結(jié)束地址的片地址,范圍為0~3。SBA/EBA:存放文件存儲(chǔ)起始/結(jié)束地址的塊地址,范圍為0~8 191。SPA/EPA:存放文件存儲(chǔ)起始/結(jié)束地址的頁地址,范圍為0~63。FileSize:存放文件大小,單位為64 kB。
通過向FPGA發(fā)送指令的方式來實(shí)現(xiàn)計(jì)算機(jī)對(duì)文件的訪問。CY7C68013A芯片將這一操作簡化為對(duì)異步FIFO的讀寫。當(dāng)計(jì)算機(jī)需要發(fā)送指令至FPGA時(shí),F(xiàn)PGA直接從CY7C68013A的異步FIFO中讀取指令;當(dāng)FPGA向計(jì)算機(jī)回傳數(shù)據(jù)時(shí),直接將數(shù)據(jù)發(fā)送至CY7C68013A中的異步FIFO中即可。
USB指令由5 Byte:1 Byte的幀頭,1 Byte的指令,2 Byte的數(shù)據(jù),1 Byte幀尾組成。USB指令包括:請(qǐng)求文件列表指令,下載文件指令,刪除文件指令,格式化指令等。
請(qǐng)求文件列表指令格式如圖3所示。
圖3 請(qǐng)求文件列表指令格式
當(dāng)FPGA接收到來自計(jì)算機(jī)的指令碼0x01時(shí),將文件列表回傳至計(jì)算機(jī),回傳數(shù)據(jù)格式如圖4所示。
圖4 文件列表回傳格式
其中文件個(gè)數(shù)為文件列表中的文件個(gè)數(shù),數(shù)值等于文件列表中的前2 Byte;每個(gè)文件信息由5 Byte組成,其中文件序號(hào)2 Byte,文件大小3 Byte,所以文件信息字段的大小為文件個(gè)數(shù)乘以5。
下載文件指令格式如圖5所示。
圖5 下載文件指令格式
當(dāng)FPGA接收到來自計(jì)算機(jī)的指令碼0x02時(shí),將緩存文件序號(hào)字段,并且將字段與對(duì)應(yīng)文件的數(shù)據(jù)回傳至計(jì)算機(jī);回傳數(shù)據(jù)格式如圖6所示。
圖6 文件數(shù)據(jù)回傳格式
刪除文件指令的指令碼為0x03,格式化指令的指令碼為0x04,其余字段與上述類似。
系統(tǒng)FPGA邏輯包括5個(gè)模塊:數(shù)據(jù)緩存模塊,控制器模塊,壞塊列表管理模塊,USB管理模塊,F(xiàn)lash管理模塊。如圖7所示,控制器模塊為系統(tǒng)中的控制中心與其他幾個(gè)模塊交互。
圖7 FPGA邏輯框圖
當(dāng)系統(tǒng)工作在采集模式時(shí),前端采集的數(shù)據(jù)緩存于本模塊。本模塊中例化了128 kB的雙口RAM作為數(shù)據(jù)緩存,以64 kB為單位做乒乓操作。當(dāng)?shù)偷刂房臻g64 kB存時(shí),向控制器模塊發(fā)送存儲(chǔ)請(qǐng)求信號(hào),并等待數(shù)據(jù)存儲(chǔ),當(dāng)?shù)?4 kB成功存入Flash后,等待高地址空間64 kB存滿,存滿后再次向控制器模塊發(fā)送存儲(chǔ)請(qǐng)求信號(hào),并等待數(shù)據(jù)存儲(chǔ);依次重復(fù)工作。
USB管理模塊主要功能是與外部USB芯片通信,并且確定當(dāng)前系統(tǒng)工作模式。當(dāng)使用USB供電方式時(shí)為USB模式,否則為采集存儲(chǔ)模式。外部USB芯片配置為異步FIFO,計(jì)算機(jī)發(fā)送的指令將寫入此FIFO中,USB管理模塊從此FIFO中讀取該指令并將其發(fā)送至控制器模塊,控制器譯碼該指令后做出相應(yīng)響應(yīng)。
閃存管理模塊主要實(shí)現(xiàn)了與外部閃存芯片接口的交互,以及接收并執(zhí)行來自控制器模塊的讀寫指令??刂破髂K發(fā)送來的指令格式如圖8所示。
圖8 Flash指令格式
其中,CMD:讀寫指令,00表示讀指令,01表示寫指令。STCS:起始片地址,8 GB容量Flash片地址范圍為00~11,對(duì)應(yīng)片地址譯碼為1110~0111。STBLK:起始?jí)K地址,每個(gè)片地址下有8 192個(gè)塊,對(duì)應(yīng)13位塊地址。STPG:起始頁地址,每個(gè)Flash塊中有64頁,對(duì)應(yīng)6位頁地址。EDCS,EDBLK,EDPG:分別對(duì)應(yīng)結(jié)束片地址,塊地址,頁地址。
Flash芯片在出廠時(shí),內(nèi)部就會(huì)有一些無法正常讀寫的壞塊,在對(duì)Flash進(jìn)行讀寫操作時(shí),需要跳過這些壞塊。壞塊管理模塊的主要功能,就是給控制器模塊和Flash管理模塊提供了查詢板上Flash芯片的壞塊地址的接口,其中包含了一個(gè)16 bit×32的ROM,支持的最大壞塊數(shù)為32個(gè)。
控制器模塊主要實(shí)現(xiàn)了存儲(chǔ)數(shù)據(jù)的文件管理,接收并譯碼來自USB模塊的指令,并作出響應(yīng)。發(fā)送指令至Flash管理模塊,讀寫外部Flash芯片,以及接收來自數(shù)據(jù)緩存模塊的數(shù)據(jù)。
控制器模塊實(shí)現(xiàn)了簡易文件列表系統(tǒng),能夠?qū)崿F(xiàn)文件的寫入、刪除、下載和格式化等功能,并在模塊內(nèi)部建立映射文件列表的RAM。每次上電初始化時(shí),先將Flash中存入的文件列表加載到內(nèi)部RAM中,以便后續(xù)對(duì)文件列表操作。對(duì)文件列表進(jìn)行操作時(shí),先修改模塊內(nèi)部RAM數(shù)據(jù),再在需要時(shí)發(fā)送Flash寫指令至Flash管理模塊,將文件列表寫入Flash中文件列表所分配的固定位置。控制器模塊中的狀態(tài)轉(zhuǎn)移圖如圖9所示。
圖9 控制器狀態(tài)轉(zhuǎn)移圖
其中 LoadFileList、LoadInfo、ModeSelect、UpdataFileList的4個(gè)狀態(tài)為初始化狀態(tài)。系統(tǒng)上電后,首先將文件列表讀入內(nèi)部RAM中,并且將文件列表中攜帶的一些關(guān)鍵信息加載到系統(tǒng)內(nèi)部寄存器中;然后根據(jù)USB管理模塊反饋的信息來確定目前的工作模式。若工作在USB模式則直接跳轉(zhuǎn)至Parsing狀態(tài);相反則跳轉(zhuǎn)至UpdataFileList狀態(tài),建立新文件的文件信息,隨后進(jìn)入Parsing狀態(tài)等待數(shù)據(jù)緩存模塊的數(shù)據(jù)。
在數(shù)據(jù)采集模式下,當(dāng)數(shù)據(jù)緩存模塊的數(shù)據(jù)已準(zhǔn)備好時(shí)進(jìn)入BadBlockSkip狀態(tài),跳過壞塊管理模塊中的壞塊,保證寫入數(shù)據(jù)的存儲(chǔ)塊為好的存儲(chǔ)塊;并將新文件列表信息寫入RAM中,然后將更新的文件列表回寫至Flash,最后將數(shù)據(jù)緩存模塊中的數(shù)據(jù)寫入Flash中的對(duì)應(yīng)位置并完成一次寫入操作。數(shù)據(jù)寫完成后回到Parsing狀態(tài)等待下一次數(shù)據(jù)寫入。
在USB工作模式下,控制器將依次完成指令譯碼與指令執(zhí)行,等待下一個(gè)指令到來。
本文介紹的這種文件存儲(chǔ)系統(tǒng)適用于大多數(shù)情況。基于FPGA多端口的特點(diǎn),本方案可以用于多通道的數(shù)據(jù)采集任務(wù),避免了使用額外芯片管理文件的問題。
[1]Xilinx.7 Series FPGAs configuration user guide[M].USA:Xilinx,2013.
[2]Xilinx.7 Series FPGAs clocking resources user guide[M].USA:Xilinx,2014.
[3]潘松.EDA技術(shù)使用教程[M].北京:科學(xué)出版社,2007.
[4]Bhasker J.Static timing analysis for nanometer designs[M].USA:Springer,2009
[5]Xilinx.PLBV46 Slave Single[M].USA:Xilinx,2008.
[6]李志敏.USB虛擬串口通信實(shí)現(xiàn)[J].電子科技,2014,27(3):120-122.
[7]張文強(qiáng).基于 CY7C68013單片機(jī) USB接口[J].制作天地,2010(2):19-24.
[8]張勝勇.基于FPGA的NAND Flash壞塊處理方法[J].計(jì)算機(jī)工程,2010(6):239-243.
[9]李慶誠.基于NAND型閃存的嵌入式文件系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用研究,2006(4):231-239.
[10]陳育智.嵌入式系統(tǒng)中的Flash文件系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002(1):19-22.