石 煒, 孟金芳
(1. 通信信息控制和安全技術(shù)重點(diǎn)實(shí)驗(yàn)室 浙江 嘉興 314033;2. 中國電子科技集團(tuán)公司第三十六研究所 浙江 嘉興 314033)
隨著數(shù)字信號處理系統(tǒng)向著高實(shí)時性、 高數(shù)據(jù)吞吐率、高靈活性的方向發(fā)展,目前很多信號處理平臺選擇以PPC 為處理器,vxWorks 為實(shí)時操作系統(tǒng),F(xiàn)PGA 進(jìn)行信號預(yù)處理,兩者利用RapidIo 為通信鏈路的設(shè)計架構(gòu)。在這種架構(gòu)下,設(shè)計和實(shí)現(xiàn)好PPC 與FPGA 之間的RapidIo 通信驅(qū)動尤為重要,通常驅(qū)動設(shè)計者采用直接寄存器或內(nèi)存訪問的方式進(jìn)行驅(qū)動的設(shè)計和開發(fā),這種開發(fā)方式雖然有開發(fā)簡單直接,效率高的特點(diǎn),但是驅(qū)動管理混亂,不適宜驅(qū)動的模塊化設(shè)計,沒有對FPGA 設(shè)備進(jìn)行較好的抽象,應(yīng)用開發(fā)者無法透明和靈活調(diào)用。 本文基于VxWorks 的vxBus[1]驅(qū)動開發(fā)模型對PPC與FPGA 之間以高速RapidIo[2-3]為互連的驅(qū)動設(shè)計進(jìn)行了研究,實(shí)現(xiàn)了FPGA 設(shè)備的高抽象,大大有利于應(yīng)用開發(fā)者對FPGA 設(shè)備的透明調(diào)用, 同時滿足信號處理平臺PPC 與FPGA 之間通信的高實(shí)時性、高數(shù)據(jù)吞吐、高靈活性、高效率。
vxBus 是vxWorks6.2 版本后推出的用于支持設(shè)備驅(qū)動的特有的驅(qū)動開發(fā)模型如圖1,其主要支持:1)支持對應(yīng)設(shè)備的驅(qū)動匹配;2)提供驅(qū)動程序訪問硬件的機(jī)制3)支持驅(qū)動的模塊化設(shè)計;4) 支持在WorkBench 開發(fā)環(huán)境中調(diào)用的組件,實(shí)現(xiàn)驅(qū)動的可配置。vxBus 在總線控制驅(qū)動服務(wù)程序的支持下,能在虛擬總線上發(fā)現(xiàn)設(shè)備并與之匹配, 執(zhí)行初始化工作,完成驅(qū)動和硬件設(shè)備之間的正常通信。 其中vxBus 最核心的功能是組件功能,它把每個設(shè)備驅(qū)動程序和vxBus 支持的模塊都抽象成一個組件, 所有的這些組件都可以單獨(dú)在Workbench[4]中進(jìn)行配置。

圖1 vxBus 系統(tǒng)關(guān)系圖Fig. 1 The vxBus system context diagram
vxBus 下驅(qū)動的源程序由以下幾個文件組成,詳見表1。

表1 vxBus 下驅(qū)動的源程序組成Tab. 1 The sources of vxBus Driver
vxBus 的開發(fā)步驟如圖2 所示。

圖2 vxBus 驅(qū)動開發(fā)的基本步驟Fig. 2 The step of vxBus driver design
1)驅(qū)動模塊的添加
vxWorks 采用模塊化機(jī)制管理各個功能單元, 驅(qū)動也同樣是由一個或多個模塊組成, 其驅(qū)動管理是依靠.cdf 文件完成,其添加就是對driverName.cdf[1]的創(chuàng)建和編寫。
2)驅(qū)動模塊的注冊
vxWorks 驅(qū)動的注冊通過driverName.cdf 和driverName.dc 進(jìn)行管理,其注冊的實(shí)現(xiàn)是通過函數(shù)vxbDevRegister 完成。其函數(shù)定義為vxbDevRegister(structvxbDevRegInfo*pDevInfo)。
3)hcfDeviceList 設(shè)備鏈的添加
在BSP 包中的hwconf.c 文件中根據(jù)設(shè)備結(jié)構(gòu)體添加新增設(shè)備的信息表, 其設(shè)備信息結(jié)構(gòu)體為:struct hcfDevice{char*devName;int devUnit;int busType;int busIndex;int count;const struct hcfResource*pResource;};
4)注冊驅(qū)動代碼的的編寫
可知vxWorks 的驅(qū)動信息結(jié)構(gòu)體為struct vxb Dev RegInfo,其定義為:
Struct vxbDevRegInfo { Struct vxbDevRegInfo *pNext;UINT32? devID; UINT32? busID; UINT32? vxbVersion; char???drvName [MAX_DRV_NAME_LEN+1]; struct drvBusFuncs *pDrvBusFuncs; struct vxbDeviceMethod * pMethods; BOOL(*devProbe) (struct vxbDev * pDevInfo0;struct vxbParams *pParamDefaults;};其中:
struct drvBusFuncs{void (*devInstanceInit) (struct vxbDev*);void (*devInstanceInit2 (struct vxbDev *);void(*devInstanceConnect) (struct vxbDev *);};
這一步就是添加函數(shù)devInstanceInit、devInstanceInit2、devInstanceConnect 的代碼內(nèi)容,對于vxBus 來說它只是給了一個驅(qū)動框架模型,使驅(qū)動程序更加統(tǒng)一。
本文中設(shè)計的平臺對象如圖3 所示。Mpc8641d[5]與V7[6]系列FPGA 以RapidIo 相連接, 其驅(qū)動設(shè)計即為假設(shè)FPGA為驅(qū)動設(shè)備,通過驅(qū)動完成對設(shè)備的打開、關(guān)閉、配置、讀、寫操作。

圖3 信號處理平臺簡圖Fig. 3 The diagram signal processing platform
RapidIo 支持NreadNwrite[7]的讀寫、門鈴、消息操作,為滿足PPC 與FPGA 之間靈活快速響應(yīng)的通訊設(shè)計,采用門鈴響應(yīng)與NreadNwrite 讀寫相配合的實(shí)現(xiàn)方式, 設(shè)計的控制和數(shù)據(jù)流圖如圖2 所示。
驅(qū)動的主要操作包括5 個部分, 包括初始化 (init)、讀(read)、寫(wite)、打開設(shè)備(open)、關(guān)閉設(shè)備(close)。 其中:
初始化包括根據(jù)配置指令進(jìn)行不同的配置操作,塊數(shù)據(jù)大小、數(shù)據(jù)塊數(shù)、起始地址等。
讀過程包括兩部分,首先等待FPGA 設(shè)備發(fā)起的門鈴中斷,再根據(jù)門鈴信息提供的數(shù)據(jù)塊號發(fā)起Nread 操作讀取定塊數(shù)據(jù)。
寫過程包括兩部分,首先根據(jù)數(shù)據(jù)塊號發(fā)起Nwrite 操作完成定塊數(shù)據(jù)的寫操作, 再向FPGA 發(fā)起門鈴操作告知FPGA 有新的數(shù)據(jù)塊到達(dá)。
打開設(shè)備包括申請資源、初始化等操作。
關(guān)閉設(shè)備包括釋放資源、復(fù)位等操作。
按照本文第二節(jié)中介紹的vxBus 驅(qū)動開發(fā)步驟和第三節(jié)設(shè)計的MPC8641D 與FPGA 的RapidIo 通訊方案進(jìn)行驅(qū)動開發(fā)。
1)驅(qū)動模塊的添加
設(shè)計的驅(qū)動模塊命名為 “FpgaDeviceDriver”, 將其作為BSP 包中硬件驅(qū)動的子模塊,其依賴于vxBus、PLB 兩個子模塊, 其 注 冊 函 數(shù) 為”FpgaDriverRegister”, 在BSP 調(diào) 用hardWareInterFaceBusInit 函數(shù)后再調(diào)用, 則編寫Fpga Device Driver.cdf 文件如下:
Component FPGA_DEV_DRIVER {
NAME FPGA VxBus driver
SYNOPSIS FPGA VxBus driver provided by JEC
_CHILDREN FOLDER_DRIVERS
REQUIRES INCLUDE_VXBUS
INCLUDE_PLB_BUS
INIT_RTN FpgaDriverRegister();
INIT_AFTER INCLUDE_PLB_BUS
_INIT_ORDER hardWareInterFaceBusInit
_CHILDREN FOLDER_DRIVERS }
2)驅(qū)動模塊的注冊
編 輯 FpgaDeviceDriver.dc 內(nèi) 容 為 IMPORT void FpgaDriverRegister (void);
編輯FpgaDeviceDriver .dr 內(nèi)容為:
#ifdef FPGA_DEV_DRIVER
void FpgaDriverRegister (void);
#endif
3)hcfDeviceList 設(shè)備鏈的添加
在BSP 包中的hwconf.c 文件中的hcfDeviceList[]數(shù)組中添加:
#if defined (FPGA_DEV_DRIVER)
{“FpgaDeviceDriver”,0,VXB_BUSID_PLB,0,F(xiàn)pgaDevNum,F(xiàn)pgaDevResources}
#endif
其中FpgaDevResources 和FpgaDevNum 分別定義為:
const struct hcfResource FpgaDevResources [] =
{{ "irq", HCF_RES_INT, {(void*)(INUM_TO_IVEC(8))} },
{ "irqLevel", HCF_RES_INT, {(void *)1} },
{ " BlockSize ", HCF_RES_INT, {(void *)16*1024 },
{ " Blocks", HCF_RES_INT, {(void *)2} }
};
#define FpgaDevNumNELEMENTS(FpgaDevResources)
4)注冊驅(qū)動代碼的的編寫
這一步就是添加函數(shù) FpgadevInstanceInit、Fpgadev Instance Init2、FpgadevInstanceConnect,FpgaDevInt,FpgaDevTx,FpgaDevRcv 的代碼內(nèi)容。
完成驅(qū)動開發(fā)后,F(xiàn)PGA 設(shè)備驅(qū)動很好的融入到work Bench 的開發(fā)系統(tǒng)中, 在建立Image 工程時開發(fā)者能方便的進(jìn)行動態(tài)配置如圖4 所示, 并且設(shè)備驅(qū)動很好的融入到vxWorks 文件系統(tǒng)中,其設(shè)備可以供應(yīng)用程序員如操作普通文件一樣open/close/write/read,大大有利于應(yīng)用程序開發(fā)者的透明調(diào)用不用了解設(shè)備中的細(xì)節(jié)參數(shù)。 同時通過數(shù)據(jù)發(fā)送和接收測試其實(shí)時性雖有所損失但是其傳輸速率和響應(yīng)時間仍然能滿足實(shí)時性要求,延遲響應(yīng)時間由直接中斷響應(yīng)的15 μs下降至20 μs,但傳輸速率幾乎沒影響同樣達(dá)到800 MB/s。

圖4 Workbench Image 工程配置圖Fig. 4 The diagram of Workbench Image config
在研究了VxWorks 的vxBus 驅(qū)動模型的基礎(chǔ)上,結(jié)合自身平臺的特點(diǎn)設(shè)計了MPC8641D 與FPGA 之間RapidIo 通訊的驅(qū)動方案, 經(jīng)過開發(fā)和實(shí)驗(yàn)證明, 基于vxBus 的驅(qū)動開發(fā)相比直接對寄存器、 內(nèi)存直接訪問方式的驅(qū)動的設(shè)計和開發(fā)更靈活,更具有可配置性,硬件設(shè)備更加抽象不失高實(shí)時性的同時更有利于應(yīng)用程序開發(fā)者的透明調(diào)用。
[1] Wind River SystermsInc.VxWorks6.8DeviceDriver Developer's Guide[EB/OL]. (2009). [2014-6-16].http://www.windriver.com.
[2] 尹亞明,李瓊,郭御風(fēng),等. 新型高性能RapidIo互連技術(shù)研究[J]. 計算機(jī)工程與科學(xué),2004,26(12):85-107.
[3] 吳海燕. 基于RapidIo總線的信號處理平臺設(shè)計[M]. 電子科技大學(xué),2009.
[4] Wind River Systerms Inc.Wind River Workbench, 3.2 User's Guide[EB/OL]. (2009). [2014-6-16]. http://www.windriver.com.
[5] Freescale. MPC8641D Integrated Host Processor Family Reference Manual [EB/OL].(2008).[2014-6-16].http://www.freescale.com.
[6] Xilinx. 7 Series FPGAs Overview[EB/OL]. (2011).[2014-6-16] http://www.xilinx.com.
[7] RapidIo Trade Assocition.RapidIo Interconnect Specification,Rev.1.3[EB/OL].(2005). [2014-6-16] .http://www.RapidIo.com.