基于1394b總線仿真設(shè)備的WDM驅(qū)動開發(fā)
IEEE-1394b總線協(xié)議具有實時性、可靠性、確定性等特性,這些特性使其在點對點通信方面表現(xiàn)突出。IEEE-1394b作為F22猛禽戰(zhàn)機的總線,同時也使用在F35、NASA的航天飛機上以及DV設(shè)備上。而總線的仿真驗證設(shè)備需要圖形化的界面軟件,這就要求其工作環(huán)境支持PC機環(huán)境。作為硬件與軟件橋梁的驅(qū)動程序主要工作是保證軟硬件協(xié)調(diào)工作,提供安全簡單的操作接口,保證通信數(shù)據(jù)的可靠性、實時性、確定性等。
本文引用地址:http://www.ex-cimer.com/article/201610/307352.htm1 硬件系統(tǒng)簡介
圖1是以Xilinx的V6系列的FPGA為核心的硬件框圖。該設(shè)備具有3個余度,并且三余度之間能夠獨立工作,互不影響。硬件采用三路Link和PHY芯片,三路獨立供電。由于仿真設(shè)備運行的環(huán)境的封閉性,從而設(shè)計軟件和硬件兩種供電控制開關(guān)。軟件電源控制信號由FPGA控制可編程的電源控制芯片來遠程控制設(shè)備。設(shè)備供電無需外接電源,直接利用PC機的PCI或者PCIe總線插槽供電,硬件提供電源管理系統(tǒng)進行電壓轉(zhuǎn)換。該設(shè)備支持速率S100Mbps和S400Mbps,硬件提供S100Mbps和S400Mbps端口速率切換按鈕,F(xiàn)PGA內(nèi)部通信速率由邏輯控制完成。
FPGA邏輯功能框如圖2所示,F(xiàn)PGA邏輯對PCI/PCIe總線協(xié)議和1394b總線進行協(xié)議封裝以及協(xié)議解析;對內(nèi)存空間,IO空間以及中斷號等進行劃分;對操作寄存器進行定義;對發(fā)送數(shù)據(jù)的DM口,接收數(shù)據(jù)的GRF口進行控制;開放LINK和PHY的軟件訪問權(quán)限,便于實現(xiàn)遠程訪問功能;對DPRAM進行雙口切換操作,以保證數(shù)據(jù)通信的可靠性;設(shè)計退避算法防止總線競爭失敗數(shù)據(jù)丟失;支持DMA操作,實現(xiàn)通信的實時性。
2 驅(qū)動設(shè)計
驅(qū)動程序是硬件廠商根據(jù)硬件工作環(huán)境的操作系統(tǒng)編寫的配置文件,其運行于操作系統(tǒng)內(nèi)核態(tài),是設(shè)備與計算機交互的橋梁,它把硬件的功能告訴操作系統(tǒng),同時也將系統(tǒng)
的指令傳達給硬件。驅(qū)動軟件分為軟件驅(qū)動和硬件驅(qū)動。軟件驅(qū)動是把工作最終交給CPU處理,對CPU依賴性比較高,對操作系統(tǒng)影響比較大;而硬件驅(qū)動能夠最大化的避免CPU的調(diào)度,提高硬件資源的利用率、增加傳輸?shù)膶崟r性、減少設(shè)備對計算機的依賴性等。
本設(shè)備驅(qū)動程序采用硬件驅(qū)動,開發(fā)工具為DDK(Device Development Kit),調(diào)試工具為Debug view,其工作流程如圖3所示。
由于Windows是多任務(wù)非實時的操作系統(tǒng),每個進程占用處理器的時間應(yīng)小于50微秒,如果需要長時間的硬件訪問應(yīng)采用系統(tǒng)線程的方法,本設(shè)計采用三余度三個內(nèi)核線程對數(shù)據(jù)處理用以保證訪問的準確性。由于該設(shè)備硬件的快捷性和軟件的延時性,并且突發(fā)大數(shù)據(jù)量傳輸發(fā)生概率比較高。所以驅(qū)動程序在發(fā)送模塊上使用了乒乓原理,在接收模塊使用了循環(huán)隊列,保證數(shù)據(jù)能夠平滑的通信,在突發(fā)大數(shù)據(jù)量操作時保證了數(shù)據(jù)的完整性和確定性。由于中斷函數(shù)(wdmISR)的系統(tǒng)優(yōu)先級最高,其工作占用CPU資源能夠影響到整個系統(tǒng)的運行,所以中斷需盡可能的簡短、盡可能避免使用浮點操作、盡可能的將處理移交給任務(wù)處理。所以設(shè)計了中斷延時處理函數(shù)DPC(Deferred Procedure Call)對系統(tǒng)進行資源合理利用保證通信的有效性。中斷服務(wù)程序功能框圖如圖4所示。
串行處理:為了提高硬件資源利用率以及設(shè)備工作的安全性。本設(shè)備設(shè)計為三余度(兩個余度為主節(jié)點,一個余度為備用節(jié)點)一體設(shè)備,三節(jié)點能夠獨立進行工作。1394b總線協(xié)議允許發(fā)送物理層包訪問遠程節(jié)點,并且能夠通過遠程訪問包對設(shè)備節(jié)點進行遠程控制。所以當任意一個主節(jié)點出現(xiàn)故障,備用節(jié)點可以通過遠程命令斷開故障主節(jié)點,從而啟用備用節(jié)點,增加設(shè)備運行的安全性。
單功能多設(shè)備的運行對驅(qū)動程序而言每個設(shè)備都有自己的內(nèi)存空間、I/O空間以及中斷號,運行互不影響。軟件對硬件的操作,在串行處理方面只需要對操作進行排隊處理,就能夠避免軟件對硬件的并行操作。而三余度多功能多樣性設(shè)備的運行對驅(qū)動而言,使用的可能有很多的共享資源(如DMA等資源),并且軟件對3個余度的操作有可能是并行的,驅(qū)動軟件設(shè)計在節(jié)點間共享資源進行加鎖處理保證通信的獨立性及確定性。
串行處理能夠有效的避免資源訪問沖突,能夠以不同優(yōu)先級級別控制各個功能,能夠以不同頻率控制各個功能,有效的提高了軟件對硬件操作的安全性。該驅(qū)動設(shè)計了節(jié)點間公共資源訪問設(shè)置互斥信號量(KeWaitForMultipleObjects),只有信號的擁有者才能釋放信號量。同時設(shè)計了保護節(jié)點內(nèi)共享資源的保護措施,如中斷掛接IoCionnect Intei Tupt函數(shù)下的自旋鎖。對上層操作進行堆棧處理,保證操作的有效性,并且對該操作進行風險評估(如對鏈路層操作可能影響設(shè)備收發(fā)數(shù)據(jù)操作),達到對硬件的全面保護。
內(nèi)核線程:由于該設(shè)備應(yīng)用于通信方面,突發(fā)性大數(shù)據(jù)量傳輸發(fā)生率比較高,而windows環(huán)境下每個進程占用處理器的時間應(yīng)小于50微秒,所以該驅(qū)動在PNP(Plug and Play)
為每個節(jié)點設(shè)置一個線程(PsCreateSvstemThread)對突發(fā)的大數(shù)據(jù)量數(shù)據(jù)進行平滑處理,以保證數(shù)據(jù)平穩(wěn)的交由上層,該線程為事件驅(qū)動類型。并且通過KeCetCurrentThread和KeSetPriorityThread調(diào)整線程優(yōu)先級。
當中斷發(fā)生,中斷處理函數(shù)記錄中斷狀態(tài)并清除中斷,判斷中斷是否為空,如果不為空則通過IoRequestDpc請求DPC,同時把相應(yīng)的中斷狀態(tài)傳給DPC。DPC通過中斷狀態(tài)判斷中斷類型和發(fā)生中斷的節(jié)點,并且置位對應(yīng)線程的線程事件。線程觸發(fā)后,從阻塞態(tài)變?yōu)榫途w態(tài),當該進程得到處理器資源,調(diào)用數(shù)據(jù)處理函數(shù)處理數(shù)據(jù)。
DMA:Windows是多任務(wù)非實時的操作系統(tǒng),而DMA可以有效的避免CPU的調(diào)度而節(jié)省時間,提高設(shè)備的實時性。系統(tǒng)要求DMA的使用率盡可能的減少并且盡可能的快捷。本設(shè)計使用硬件側(cè)DMA,由FPGA邏輯實現(xiàn),DMA控制由驅(qū)動控制。
驅(qū)動軟件對DMA進行初始化,當中斷服務(wù)程序被調(diào)用,驅(qū)動程序根據(jù)DPRAM的0、1區(qū)標志獲取新數(shù)據(jù)存放區(qū)域,并從該區(qū)獲取新數(shù)據(jù)的刷新標記。如有新數(shù)據(jù),則服務(wù)程序申請DMA資源,獲取到DMA資源后,鎖定DMA資源并啟動(DMA源地址、目的地址、數(shù)據(jù)搬運長度、控制命令)I/O端口到主存區(qū)的DMA。DMA完成后上報完整中斷并釋放DMA資源。當上層調(diào)用IRP_MJ_DEVICE_CONTROL對DPRAM進行寫操作時,驅(qū)動程序判斷用戶該次操作的DPRAM的內(nèi)存大小,如果在32K~2048K字節(jié)之間,則啟動主存區(qū)到I/O端口的DMA,如果大于則分次啟動DMA,如果小于32K字節(jié)則單拍或者多拍操作。操作流程與啟動接收DMA相同,操作完成則上報中斷。
循環(huán)隊列:快捷性是硬件的特性之一,而應(yīng)用層相對于硬件是及其緩慢的。并且由于PCI數(shù)據(jù)包封包的影響,其總線實際帶寬只有133 Mbps/s,而本1394b設(shè)備支持S100Mbps
和S400Mbps兩種傳輸速率。所以為避免設(shè)備長時間工作帶來內(nèi)存遞增、內(nèi)存泄漏以及突發(fā)大數(shù)據(jù)量給PCI總線通信超負荷運轉(zhuǎn)造成數(shù)據(jù)丟失現(xiàn)象,驅(qū)動利用IoAllocateMdl申請一塊3M的內(nèi)存區(qū),供硬件軟件交互循環(huán)利用的循環(huán)隊列用以保證傳輸?shù)挠锌煽啃?,以及安全性?/p>
當中斷服務(wù)程序被調(diào)用時,驅(qū)動啟動DMA或者讀寫寄存器操作把數(shù)據(jù)從指定DPRAM區(qū)搬運到主存區(qū),更新新的數(shù)據(jù)指針并通過軟中斷方式通知上層軟件。上層軟件通過Deviee IoCo ntrol對設(shè)備進行控制,當應(yīng)用層對驅(qū)動進行操作時,驅(qū)動根據(jù)寫指針與讀指針的差值提供可操作的內(nèi)存塊給上層軟件。
乒乓原理:乒乓原理不僅能夠提高帶寬的利用率,并且能夠有效避免硬件與軟件操作沖突情況的出現(xiàn),并且避免了資源訪問沖突的重試耗時,提高傳輸?shù)挠行?、實時性。驅(qū)動收發(fā)模塊乒乓操作如圖5和圖6所示。
發(fā)送模塊中,驅(qū)動軟件與應(yīng)用層交互,采用兩塊地址內(nèi)存區(qū)。內(nèi)存塊操作由用戶層軟件操作,操作完成后切換內(nèi)存區(qū)并通知驅(qū)動最新數(shù)據(jù)存放位置。驅(qū)動軟件與硬件交互也采用兩塊DPRAM區(qū)。DPRAM的0、1區(qū)的切換操作由驅(qū)動軟件進行操作,數(shù)據(jù)更新完畢的DPRAM交由邏輯處理并進行換區(qū)操作。
接收模塊中,驅(qū)動軟件設(shè)計循環(huán)隊列與上層軟件進行交互。硬件與驅(qū)動軟件交互同樣采用乒乓原理,該操作由硬件邏輯操作,驅(qū)動軟件根據(jù)最新數(shù)據(jù)存放的DPRAM區(qū),以及消
息新舊標記來進行數(shù)據(jù)處理。處理完成后完成數(shù)據(jù)新舊標志切換,并軟中斷方式通知應(yīng)用層有新數(shù)據(jù)到達,應(yīng)用層驅(qū)動返回的地址指針和內(nèi)存大小獲取最新數(shù)據(jù)。
3 驗證分析
本設(shè)備提供DLL(Dynamic Link Library),采用Microsoft Visual Studio 2008專業(yè)版開發(fā),封裝為標準的動態(tài)鏈接庫。提供Demo程序,圖7為CC(Control computer)的發(fā)送數(shù)據(jù)窗口測試圖,圖8為RN(Remote Node)的接收數(shù)據(jù)的窗口測試圖。
由上圖可見驅(qū)動程序?qū)崿F(xiàn)了1394b的S400 Mbps速率和PCI的S133 Mbps速率的跨速率通信數(shù)據(jù)不丟失,避免了軟硬件交互產(chǎn)生的誤碼,使在S100 Mbps通信速率下平均帶寬達到79.2 Mbps,在S400Mbps通信速率下平均帶寬達到231.7 Mbps,實現(xiàn)了數(shù)據(jù)延時控制在us級別,實現(xiàn)了操作的準確性,保證了數(shù)據(jù)傳輸?shù)拇_定性。
4 結(jié)束語
自2011年中國面臨著國外大規(guī)模技術(shù)轉(zhuǎn)移封鎖以來,國內(nèi)自研設(shè)備百花齊放,尤其是軟件硬化無疑已經(jīng)成為焦點。作為硬件靈魂的驅(qū)動程序越來越受到人們的重視。本文根據(jù)軟硬件的特性進行軟硬件工作協(xié)調(diào),提高了硬件資源的利用率,提高了仿真通信的實時性,確定性,可靠性。由于需求要求該設(shè)備為PCI總線設(shè)備,通信的帶寬受到限制,所以準備利用PCIe總線和實時操作系統(tǒng)提高設(shè)備的通信帶寬。
評論