常曠博,劉文魁,孟景濤,王 濤,冀云成
(1.中國電子科技集團公司第五十四研究所,河北 石家莊 050081;2.中國人民解放軍61768部隊,海南 三亞 572099;3.中國人民解放軍63769部隊,陜西 西安 710032)
在當前的測控系統中,對數據和信號處理的能力需求不斷攀升,傳統的數字信號處理系統漸漸不能滿足實時高速的數據與信號處理需求。因此設計了一種基于PowerPC的數據存儲及回放系統,結合可擦除存儲(Flash)芯片和現場可編程門陣列(FPGA)芯片,實現了AD采樣數據的實時存儲和轉發,同時,可以將存儲的采樣數據通過DA進行回放,以滿足不同情況下對數據及信號處理的要求[1]。
PowerPC處理器是摩托羅拉和IBM共同研發的精簡指令集計算機(Reduced Instruction Set Computer,RISC)體系結構的處理器,它具有速度高、功耗低、計算能力強的特點。目前Freescale(飛思卡爾,摩托羅拉半導體)的PowerPC占據的嵌入式處理器市場最大,在軍品市場中最受青睞。本系統采用Freescale公司生成的MPC8349E處理器[2]。
VxWorks是美國WindRiver公司開發的一款嵌入式實時操作系統,其良好的持續發展能力、高性能的內核、開放的體系結構、友好的用戶開發環境以及對工業標準的支持,使它在嵌入式實時操作系統領域占據重要的一席之地,也使它成為目前世界上最先進的高性能實時操作系統之一[3]。VxWorks 的主要優點是多任務搶占調度、快速上下文切換、低中斷延遲和快速靈活的通信機制;而且,其內核可根據需要進行裁減,并支持多處理器通信機制,使得多節點間通信容易編程[4]。
目前,國內有關PowerPC處理器方面的研究大多體現在信號處理、PCI總線相關技術等方面,多應用于國防領域和通信領域。基于PowerPC架構的存儲系統已經有所應用,如基于PowerPC架構的信號處理與存儲嵌入式系統等。國外對于此方面的技術開發已經走在了前端,但由于PowerPC的開發資源并不豐富,開發仍然具有一定的難度,國內基于PowerPC的應用技術仍需要進一步的提升和完善。
基于PowerPC的數據存儲及回放系統,通過FPGA進行陣列管理的存儲方案,其先進性在于:
① 硬件架構易于實現;
② 具有高速串行數據總線接口,可實現高傳輸帶寬;
③ 在FPGA中對數據進行分路并行存儲到多個Flash矩陣中,可實現數據橫向位寬的提升和縱向數據容量的提高,從而實現高速數據與信號的處理[5]。
整個系統由PowerPC模塊、Flash存儲模塊、AD/DA模塊、通信模塊等組成。其中,PowerPC模塊運行VxWorks實時操作系統,負責管理Flash存儲系統,控制數據的寫入和讀取,同時利用以太網接口將數據傳輸給上位機。Flash存儲模塊用于記錄上位機傳輸的數據或AD采集的數據,也可以讀取數據并利用DA進行數據的回放;AD/DA模塊用于采集和回放數據;通信模塊利用以太網口將數據傳輸給其他設備或系統。
系統的整體原理圖如圖1所示,使用了MPC8349E處理器、2個256 MB Flash芯片、3個FPGA芯片,以及由64片4 GB Flash芯片組成256 GB的存儲陣列。其中AD/DA模塊、通信模塊與以往的數字信號處理系統差別不大,主要進行PowerPC子系統和Flash存儲子系統的設計。

圖1 系統原理圖
在以MPC8349E處理器為基礎的硬件板上運行VxWorks操作系統,需要編寫與硬件對應的板級支持包(BSP)。BSP的主要功能在于配置系統硬件使其工作于正常的狀態,以及完成硬件與軟件之間的數據交互,為操作系統及上層應用程序提供一個與硬件無關的軟件平臺[6]。
本系統采用的PowerPC型號為MPC8349E,因此以ADS834X評估板的BSP為基礎,根據本系統的實際硬件情況進行修改,主要修改的內容如下:
① 系統內存的相關配置參數:內存大小、時鐘相位、內存起始地址等;
② 系統的Flash大小;
③ 添加所需外設設備的驅動程序,主要包括:串口、以太網口、USB等接口;
④ TFFS文件系統的相關驅動。
閃存文件系統(True Flash File System,TFFS)是和VxWorks兼容的一種M-Systems Flite實現方式,可以在系統Flash存儲設備上構造一個基于DOS的文件系統,從而使文件操作方式像MS-DOS文件系統一樣。TFFS 由核心層和3個功能層(翻譯層、MTD層、Socket層)組成,如圖2所示。

圖2 TFFS文件系統結構圖
翻譯層主要實現TFFS和dosFs之間的高級交互功能,根據Flash芯片類型,本系統采用了NAND-based技術的翻譯層[7]。在BSP文件中包含sysTffs.c文件,同時修改其內容如下:
#define INCLUDE_MTD_CFISCS
/ * CFI/SCS */
#define INCLUDE_TL_FTL
/ * FTL translation layer */
#define INCLUDE_TFFS_BOOT_IMAGE
/ * include tffsBootImagePut() */
BSP文件修改完成后,編譯生成Bootrom映像文件,通過WindRiver ICE2仿真器將該映像文件寫入板卡上的Flash芯片中存儲,MPC8349E處理器上電啟動后,執行Flash芯片上的Bootrom啟動程序,初始化硬件板卡的CPU、內存、串口、以太網口等硬件設備,為接下來加載VxWorks操作系統做必要的準備。
VxWorks操作系統啟動時的工作流程如圖3所示,其中標注了每項任務所需用到的BSP文件名稱[8]。

圖3 操作系統啟動順序圖
圖3中,usrAppInit()函數用于用戶編寫自己的應用程序,在本系統中該函數主要實現了以下任務:
① Task_Command_Receive():建立TCP服務器,等待上位機連接,連接成功后接收上位機的控制命令并根據命令調用相應的函數,包括Flash操作等;
② Task_Status_Info():建立TCP服務器,等待上位機連接,連接成功后將該Socket用于發送VxWorks系統的狀態及應用數據;
③ HK_Flash_Main():控制FPGA對Flash進行各種操作,包括讀寫數據、獲取Flash狀態、Flash擦除等。
用戶應用程序任務編寫完成后,使用WindRiver公司的workbench集成開發環境對添加了用戶應用程序的操作系統進行編譯,生成一個帶符號表的相應的VxWorks操作系統鏡像文件,這個操作系統運行之后會自動處理用戶事先定義好的任務。
VxWorks操作系統有3種加載方式:
① 由Bootrom 引導通過網口或串口將操作系統映像下載到RAM;
② 將操作系統映像直接燒入ROM,運行時將映像拷入RAM 中運行;
③ 操作系統映像的指令部分駐留在ROM 中運行,僅將數據段部分拷入RAM。
在本系統中,采用第一種方式加載操作系統,使用網絡加載的方式進行操作系統加載,這種加載方式需要在生成BSP文件時,將config.h文件中的DEFAULT_BOOT_LINE定義如下:
"mottsec(0,0)host:vxWorks
h=192.168.1.1
e=192.168.1.12
u=8349
pw=1234
tn=mpc8349"
連接一個串口線至上位機,將上位機的文件服務器按上述參數進行配置,同時啟動超級終端。硬件設備加電后,Bootroom輸出上述代碼中的提示信息,顯示在超級終端上,然后通過超級終端使用命令行配置網絡信息及VxWorks操作系統映像文件的網絡路徑,就可以通過網絡直接上載操作系統映像文件,從而完成操作系統的加載與啟動[9]。
存儲子系統由FPGA和64片4G容量的Flash芯片組成。VxWorks操作系統使用TFFS文件系統來進行管理,由FPGA控制具體的操作,如讀取數據、擦除塊、寫入數據等。Flash陣列的組織結構如圖4所示[10]。整個Flash芯片陣列的建立、管理、使用過程描述如下。

圖4 Flash陣列組織結構
對于每一片Flash芯片,其出廠時都存在壞塊,根據Flash的硬件特性,在寫入數據前需要先擦除對應的塊,然后才能向該塊寫入數據[11]。壞塊是可以被擦除的,但是不能被寫入數據,因此,需要將Flash存儲陣列里的每一個Flash芯片的壞塊找到,在管理存儲數據時跳過這些壞塊,避免存儲數據寫入錯誤[12]。
從Flash芯片中確定壞塊的位置是由FPGA具體實現的。結合Flash存儲陣列的連線方式和芯片手冊中關于壞塊的確定方法,具體流程如圖5所示。獲取了所有壞塊數據之后,將壞塊數據寫入文件形成壞塊表[13]。

圖5 壞塊表建立流程圖
老化表表示Flash存儲陣列中每個Flash芯片的塊的屬性,由于每片Flash由8 192個塊組成,因此老化表由8 192個塊的屬性表組成。建立如下的結構體表示老化表:
typedef struct wom
{ unsigned int used:1;
unsigned int bad:1;
unsigned int erasetime:30;
}wom_t;
typedef struct wom_col
{ wom_t Wom[8192];
}wom_col_t;
typedef struct wom_row
{ wom_col_t Wom_Col[col];
}wom_row_t;
typedef struct wom_table
{ wom_row_t Wom_Row[row];
}wom_table_t;
老化表建立完成后,讀取壞塊表的塊信息初始化老化表,確定整個Flash存儲陣列中的壞塊與好塊,為接下來選擇有效塊做準備。老化表塊屬性如表1所示。

表1 老化表塊屬性
為了提高系統的性能,Flash存儲陣列采用并行流水線操作,每次操作都是一個片選所對應的有效塊[14]。通過建立壞塊表和老化表,在選擇有效塊時可以從0~8 192順序選擇,同時考慮到塊的好壞、是否已經被寫入數據以及擦寫的次數(延長使用壽命)等因素進行有效塊的選擇。
有效塊的數據結構如下:
typedef struct blkinfo
{ unsigned int row:8;
unsigned int col:8;
unsigned int blkaddr:16;
}blkinfo_t;
typedef struct blk_col
{ blkinfo_t Blkifo[16];
}blk_col_t;
typedef struct blk_row
{ blk_col_t Blk_Col[16];
}blk_row_t;
typedef struct blk_table
{ blk_row_t Blk_Table[2];
}blk_table_t;
數據記錄到Flash存儲陣列中的流程如圖6所示。存儲的采樣數據進行回放的流程如圖7所示。數據轉儲的流程如圖8所示。

圖6 數據寫入流程

圖7 數據實時回放流程

圖8 數據轉儲流程
基于PowerPC的數據存儲及回放系統已經應用于網絡交換板解決方案中,形成了相關的數據采集記錄回放系統產品,在多個嵌入式實時信息處理系統中得到應用。網絡交換板接口主要有:DDR配置、Flash文件系統、千兆以太網接口、萬兆光模塊、RS232調試串口、LED接口、光模塊、溫度監控模塊以及電壓監測模塊等。實現的功能有:存儲器容量2 GB DDR3,數據總線寬度為64 bit,Flash共有256 MB,支持兩路千兆網絡自動備緩功能,支持兩路萬兆網絡自動備緩功能。調試串口為用戶提供每通道1路RS232調試接口,通過PC機上的超級終端來調試用戶程序,支持LED運行狀態指示,提供溫度和電壓監測功能。該網絡交換板可以支持巨型幀協議(64 kB),網絡時延<10 ms,后端RJ45為10/100/1 000 MB自適應,后端光纖網絡1 000/10 000 MB自適應,能檢測板卡電流、電壓、溫度等信息,并通過SPI口上報給K7等,滿足各項技術指標要求,累計供貨數量超過1 000塊,產品整體質量穩定,得到了顧客的充分認可,證明了本系統的正確性和有效性。
基于PowerPC的數據存儲及回放系統,結合Flash芯片和FPGA芯片,構建了一種具有強實時性、以標準文件系統進行存儲管理的大容量高速率數據存儲及回放系統。其創新在于具有標準硬件架構、穩定可靠,具有標準的文件系統進行存儲,數據訪問、數據轉發簡單易行。此外,采用VxWorks嵌入式實時操作系統,軟件實時性也能得到保證。本文實現了AD采樣數據的實時存儲和轉發,可以將存儲的采樣數據通過DA進行回放,滿足了測控系統中,實時高速的數據與信號處理需求,有效提升了測控系統的數據和信號處理能力[15-18]。