肖文君 劉萬松 劉伍豐 李境達(dá)
摘? 要: 為解決主動(dòng)式腫瘤治療中治療計(jì)劃系統(tǒng)和加速器控制系統(tǒng)之間的數(shù)據(jù)通信問題,研發(fā)了智能終端系統(tǒng)。文中設(shè)計(jì)的基于PCI總線的劑量控制系統(tǒng)是智能終端系統(tǒng)的一部分,該系統(tǒng)利用Altera公司的ACEX1K50芯片實(shí)現(xiàn)PCI總線接口,利用WDF驅(qū)動(dòng)模型實(shí)現(xiàn)上位機(jī)的PCI驅(qū)動(dòng),通過開發(fā)的應(yīng)用程序調(diào)用驅(qū)動(dòng)程序接口,實(shí)現(xiàn)了上位機(jī)同F(xiàn)PGA的數(shù)據(jù)通信,從而實(shí)現(xiàn)智能終端與劑量控制器的數(shù)據(jù)通信。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)達(dá)到了預(yù)期目標(biāo)。
關(guān)鍵詞: 腫瘤治療; 劑量控制系統(tǒng); 數(shù)據(jù)通信; PCI驅(qū)動(dòng); 智能終端; 驅(qū)動(dòng)程序安裝
中圖分類號(hào): TN913?34; TP399? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼: A? ? ? ? ? ? ? ? ? ?文章編號(hào): 1004?373X(2019)16?0036?04
為了解決主動(dòng)式腫瘤治療中,治療計(jì)劃系統(tǒng)與加速器控制系統(tǒng)之間的通信問題,特研發(fā)了一種智能終端系統(tǒng),該系統(tǒng)能夠在治療過程中智能地實(shí)現(xiàn)束流位置?劑量聯(lián)動(dòng)。劑量控制系統(tǒng)是智能終端系統(tǒng)的一部分,用來實(shí)時(shí)監(jiān)測(cè)腫瘤治療的劑量。如果照射劑量達(dá)到預(yù)先設(shè)定值,系統(tǒng)會(huì)發(fā)送劑量同步信號(hào)給位置控制器,智能切換束流的掃描方向。
1? 劑量控制系統(tǒng)總體設(shè)計(jì)
劑量控制系統(tǒng)用來實(shí)時(shí)監(jiān)測(cè)腫瘤治療的劑量,通過與位置控制器的配合智能實(shí)現(xiàn)位置?劑量聯(lián)動(dòng),使束流的輻照區(qū)域形狀在三維方向上與腫瘤的實(shí)際形狀一致,從而降低束流對(duì)腫瘤周圍健康組織的照射,提高放射治療的治療增益比,以達(dá)到更好的治療效果。劑量控制系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,該系統(tǒng)主要由兩部分組成,即智能終端系統(tǒng)前端服務(wù)器和劑量控制器。智能終端系統(tǒng)前端服務(wù)器和劑量控制器采用PCI接口進(jìn)行數(shù)據(jù)通信。智能終端系統(tǒng)前端服務(wù)器將劑量信息存放在劑量控制器中,治療過程中,劑量控制器從束流監(jiān)測(cè)系統(tǒng)實(shí)時(shí)獲得當(dāng)前輻照劑量,判斷是否達(dá)到預(yù)設(shè)輻照劑量,通過輸出控制信號(hào)指示位置控制器,從而實(shí)現(xiàn)位置與劑量的聯(lián)動(dòng)。
2? 劑量控制器
劑量控制器是劑量控制系統(tǒng)的關(guān)鍵器件,其模塊結(jié)構(gòu)見圖2。劑量控制器是通過采用ACEX1K50芯片來是實(shí)現(xiàn)的。劑量控制器通過PCI接口與智能終端進(jìn)行通信,用大容量SDRAM來存儲(chǔ)智能終端傳輸過來的數(shù)據(jù),并且在該FPGA中實(shí)現(xiàn)相應(yīng)的邏輯控制,從而保證劑量控制系統(tǒng)的精度要求和穩(wěn)定性要求[1?2]。
智能終端把醫(yī)生給出的腫瘤處方劑量通過PCI接口,存放在劑量控制器的SDRAM存儲(chǔ)器中,每次治療的數(shù)據(jù)被單獨(dú)連續(xù)存放,由首地址索引,首個(gè)治療數(shù)據(jù)是掃描點(diǎn)個(gè)數(shù),以下依次為每個(gè)掃描點(diǎn)的處方劑量。劑量計(jì)數(shù)器的輸入是從束流監(jiān)測(cè)系統(tǒng)得到的劑量脈沖,輸出是脈沖信號(hào)用來指示位置控制器,從而實(shí)現(xiàn)位置與劑量的聯(lián)動(dòng)。劑量控制過程如下:
1) 劑量控制器從SDRAM中讀出處方劑量,加載到相應(yīng)的計(jì)數(shù)器中。
2) 劑量控制器開始接收劑量脈沖,同時(shí)進(jìn)行計(jì)數(shù)。如果當(dāng)前的掃描點(diǎn)計(jì)數(shù)完成,說明已達(dá)到預(yù)設(shè)的處方劑量,劑量控制器立即向位置控制器發(fā)出信號(hào)。
3) 位置控制器就將束流定位到下一掃描點(diǎn),同時(shí)劑量計(jì)數(shù)器也加載下一點(diǎn)的處方劑量,開始下一點(diǎn)的計(jì)數(shù)。
3? 劑量控制系統(tǒng)數(shù)據(jù)通信設(shè)計(jì)
智能終端與劑量控制系統(tǒng)是通過PCI(Peripheral Component Interconnect)總線實(shí)現(xiàn)數(shù)據(jù)交互的。PCI總線是由Intel公司首先推出的一種局部總線,適用于各種平臺(tái)。由于其功能強(qiáng)大, 使用方便靈活, 與其他總線相比具有較大的優(yōu)勢(shì)和廣闊的應(yīng)用前景。劑量控制系統(tǒng)中的數(shù)據(jù)通信設(shè)計(jì)包含了PCI總線接口的設(shè)計(jì)、PCI總線驅(qū)動(dòng)程序的設(shè)計(jì)以及應(yīng)用程序的設(shè)計(jì)三個(gè)部分。
3.1? PCI總線接口設(shè)計(jì)
系統(tǒng)的PCI總線接口是在Altera公司的ACEX1K50芯片中實(shí)現(xiàn)的。系統(tǒng)采用通信狀態(tài)機(jī)(FSM) 實(shí)現(xiàn)PCI通信時(shí)序。狀態(tài)機(jī)根據(jù)PCI總線上的控制信號(hào)、配置空間的狀態(tài)信號(hào)切換不同的狀態(tài),同時(shí)在各種狀態(tài)下發(fā)出相應(yīng)控制信號(hào)來控制總線上的數(shù)據(jù)流向。設(shè)計(jì)4種狀態(tài):Idle,Compare,Transfer和Backoff。Idle狀態(tài)是空置狀態(tài),表示總線上沒有任何事務(wù)發(fā)生;Compare狀態(tài)表示總線主設(shè)備發(fā)起總線事務(wù),從設(shè)備通過比較總線上的地址判斷本次總線事務(wù)是否屬于該設(shè)備,如果是,狀態(tài)機(jī)轉(zhuǎn)換到Transfer狀態(tài)并且發(fā)出相應(yīng)的讀寫信號(hào),若主設(shè)備需要結(jié)束本次總線周期,它會(huì)切換到Backoff狀態(tài)[3?4]。PCI總線接口狀態(tài)機(jī)如圖3所示。
3.2? PCI總線驅(qū)動(dòng)程序
系統(tǒng)采用WDF(Windows Driver Foundation)模型開發(fā)PCI總線驅(qū)動(dòng)程序。WDF模型是微軟新一代驅(qū)動(dòng)開發(fā)模型,該模型以WDM為基礎(chǔ)進(jìn)行建模和封裝,并支持內(nèi)核模式及用戶模式兩種驅(qū)動(dòng)模型。在WDF驅(qū)動(dòng)模型下,無論內(nèi)核模式的驅(qū)動(dòng)程序還是用戶模式的驅(qū)動(dòng)程序,它們都采用同一套對(duì)象模型構(gòu)建,以及同一個(gè)基礎(chǔ)承載[5?9]。
3.2.1? 驅(qū)動(dòng)程序入口地址
當(dāng)驅(qū)動(dòng)程序被加載時(shí),會(huì)調(diào)用驅(qū)動(dòng)程序的DriverEntry例程,這是WDF驅(qū)動(dòng)程序的主入口地址。驅(qū)動(dòng)程序通過DriverEntry例程創(chuàng)建驅(qū)動(dòng)對(duì)象并設(shè)置EvtDriverDeviceAdd例程地址。
3.2.2? 驅(qū)動(dòng)程序初始化
當(dāng)pnp管理器檢測(cè)到新的PCI硬件設(shè)備插入,根據(jù)安裝驅(qū)動(dòng)程序時(shí)Inf文件中指定的設(shè)備識(shí)別號(hào)和廠商識(shí)別號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng),然后調(diào)用PCIDriver_EvtDevIceAdd回調(diào)函數(shù),完成驅(qū)動(dòng)程序的初始化。
3.2.3? DMA操作
在本驅(qū)動(dòng)設(shè)計(jì)中,用到了KMDF為DMA操作提供的兩個(gè)對(duì)象:WDFDMAENABLER和WDFCOMMONBUFFER。WDFDMAENABLER對(duì)象用于建立一個(gè)DMA適配器,說明DMA通道的特性。WDFCOMMONBUFFER對(duì)象用于申請(qǐng)系統(tǒng)提供的公用緩沖區(qū)。首先,驅(qū)動(dòng)程序創(chuàng)建一個(gè)WDFDMAENABLER對(duì)象,然后再創(chuàng)建一個(gè)WDFCOMMONBUFFER對(duì)象。在成功創(chuàng)建WDFCOMMONBUFFER對(duì)象后,操作系統(tǒng)會(huì)為驅(qū)動(dòng)程序提供一個(gè)在物理上連續(xù)的內(nèi)存,在此把它稱為公用緩沖區(qū),作為硬件設(shè)備和驅(qū)動(dòng)程序進(jìn)行DMA傳輸?shù)墓矃^(qū)域。
3.2.4? 硬件訪問
當(dāng)驅(qū)動(dòng)程序收到IRP時(shí),根據(jù)IRP中的主功能碼在相應(yīng)的隊(duì)列中排隊(duì),然后依次取出隊(duì)列中的各個(gè)IRP,調(diào)用I/O請(qǐng)求隊(duì)列處理函數(shù)。在本驅(qū)動(dòng)中,只運(yùn)用IoControl隊(duì)列,應(yīng)用程序同樣只能通過發(fā)送IoControl命令的方式來調(diào)用驅(qū)動(dòng)程序。因此,所有的I/O請(qǐng)求操作都可以在一個(gè)隊(duì)列處理函數(shù)內(nèi)完成。
對(duì)硬件的訪問具體就是對(duì)BAR0的訪問、對(duì)BAR1的訪問、對(duì)BAR2的訪問以及對(duì)COMMONBUFFER的訪問。其中對(duì)BAR0和BAR1的訪問通過存儲(chǔ)器操作,對(duì)BAR2的訪問通過I/O操作,對(duì)COMMONBUFFER的訪問則通過內(nèi)存拷貝函數(shù)直接實(shí)現(xiàn)。
3.3? 應(yīng)用程序與驅(qū)動(dòng)程序的通信
應(yīng)用程序通過同驅(qū)動(dòng)程序通信,從而達(dá)到控制設(shè)備的目的。應(yīng)用程序與驅(qū)動(dòng)程序通信的過程是:應(yīng)用程序先用CreateFIle函數(shù)打開設(shè)備,然后可以用DevIceloControl和KMDF通信,包括從KMDF讀數(shù)據(jù)和寫數(shù)據(jù)給KMDF兩種情況,也可以用ReadFIle從KMDF讀數(shù)據(jù)或用WriteFIle寫數(shù)據(jù)給KMDF,當(dāng)應(yīng)用程序退出時(shí),用CloseHandle關(guān)閉設(shè)備[10?11]。WIN32 API函數(shù)與KMDF回調(diào)例程對(duì)應(yīng)情況如表1所示。
4? 劑量控制系統(tǒng)數(shù)據(jù)通信測(cè)試
4.1? 驅(qū)動(dòng)程序安裝
INF是Device Information的縮寫,INF文件又被稱為“安裝文件”。它包含了設(shè)備安裝指令,系統(tǒng)通過這些指令來理解設(shè)備,并將驅(qū)動(dòng)程序與物理設(shè)備聯(lián)系在一起。當(dāng)操作系統(tǒng)檢測(cè)到有新硬件插入時(shí),會(huì)彈出“找到新硬件向?qū)А钡膶?duì)話框,然后選擇INF文件所在的路徑,根據(jù)INF文件內(nèi)容安裝驅(qū)動(dòng)程序。PCI驅(qū)動(dòng)程序安裝完成之后,在設(shè)備管理器中會(huì)添加一個(gè)硬件的類,驅(qū)動(dòng)安裝界面如圖4所示,在驅(qū)動(dòng)安裝成功后,在設(shè)備管理器中添加WDFDRIVER的硬件。
4.2? 存儲(chǔ)器寫事務(wù)測(cè)試
先打開控制臺(tái)程序,再打開應(yīng)用程序,并輸入?yún)?shù)[W 4 10]。其中W表示對(duì)BAR0進(jìn)行寫操作,4為BAR0的偏移地址,10為要寫的數(shù)據(jù)。程序運(yùn)行流程:應(yīng)用程序根據(jù)參數(shù)[W]調(diào)用相應(yīng)的DevIceloControl函數(shù),然后根據(jù)DevIceloControl的控制代碼調(diào)用驅(qū)動(dòng)程序中相對(duì)應(yīng)的函數(shù)。驅(qū)動(dòng)程序首先獲取應(yīng)用程序傳遞過來的輸入緩沖區(qū),從中取出偏移地址和數(shù)據(jù),然后把數(shù)據(jù)寫到硬件指定的地址中。存儲(chǔ)器寫事務(wù)測(cè)試結(jié)果如圖5所示。
4.3? 存儲(chǔ)器讀事務(wù)測(cè)試
存儲(chǔ)器讀事務(wù)的過程與寫事務(wù)的過程類似,輸入?yún)?shù)[R 4],表示讀取基地址為BAR0,偏移地址為4的數(shù)據(jù)。存儲(chǔ)器讀事務(wù)測(cè)試結(jié)果如圖6所示,數(shù)據(jù)為10,該數(shù)據(jù)為剛寫進(jìn)去的數(shù)。
4.4? DMA操作測(cè)試
對(duì)于DMA操作,應(yīng)用程序首先打開一個(gè)二進(jìn)制文件,該二進(jìn)制文件包含4個(gè)32位的數(shù)。第一個(gè)32位數(shù)表示控制該DMA操作是讀操作還是寫操作,第二個(gè)32位數(shù)表示DMA操作的數(shù)據(jù)長度,第三個(gè)32位數(shù)表示FPGA中FIFO的偏移地址,第四個(gè)32位數(shù)表示COMMONBUFFER的偏移地址。然后將這些參數(shù)傳遞給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序把參數(shù)賦值給相應(yīng)的寄存器,并啟動(dòng)DMA操作。先啟動(dòng)一個(gè)DMA操作,向COMMONBUFFER分別寫入從數(shù)字1開始的10個(gè)連續(xù)的數(shù),然后從COMMONBUFFER讀數(shù),DMA操作結(jié)果如圖7所示。
5? 結(jié)? 論
本文介紹了智能終端劑量控制系統(tǒng)的功能和結(jié)構(gòu),闡述了智能終端劑量控制系統(tǒng)軟件的實(shí)現(xiàn)。系統(tǒng)采用通信狀態(tài)機(jī)在FPGA中實(shí)現(xiàn)PCI總線接口,采用微軟WDF驅(qū)動(dòng)框架,實(shí)現(xiàn)了PCI總線驅(qū)動(dòng)程序,完成了智能終端前端服務(wù)器與劑量控制器的數(shù)據(jù)通信,使得腫瘤治療的劑量數(shù)據(jù)能夠快捷方便地下載至劑量控制器中,同時(shí)能夠從劑量控制器中實(shí)時(shí)地獲取輻射劑量信息以便監(jiān)測(cè),從而實(shí)現(xiàn)束流位置?劑量聯(lián)動(dòng)。
參考文獻(xiàn)
[1] 李桂花,喬衛(wèi)民,敬嵐.一種用于重離子治癌的劑量控制器設(shè)計(jì)[J].原子能科學(xué)技術(shù),2011,45(12):1532?1536.
LI Guihua, QIAO Weimin, JING Lan. Dose controller design for heavy ion therapy [J]. Atomic energy science and technology, 2011, 45(12): 1532?1536.
[2] 鐘新華,袁衛(wèi)華.基于NI CompactRIO的離子注入機(jī)劑量控制系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2016,29(1):4?6.
ZHONG Xinhua, YUAN Weihua. Design of NI CompactRIO?based dose control system for implanter [J]. Industrial control computer, 2016, 29(1): 4?6.
[3] 王麗媛.基于FPGA的PCI總線接口控制器的設(shè)計(jì)[D].南京:南京航空航天大學(xué),2008.
WANG Liyuan. Design of FPGA?based PCI bus interface controller [D]. Nanjing: Nanjing University of Aeronautics and Astronautics, 2008.
[4] 馬鳴錦,朱劍冰,何紅旗.PCI、PCI?X和PCI Express的原理及體系結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2007.
MA Mingjin, ZHU Jianbing, HE Hongqi. Principles and Architecture of PCI, PCI?X and PCI Express [M]. Beijing: Tsinghua University Press, 2007.
[5] 王齊.PCI Express體系結(jié)構(gòu)導(dǎo)讀[M].北京:機(jī)械工業(yè)出版社,2010.
WANG Qi. Introduction to PCI Express architecture [M]. Beijing: China Machine Press, 2010.
[6] 楊可.FC測(cè)試系統(tǒng)中兩級(jí)PCIE交換開關(guān)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016,39(18):104?106.
YANG Ke. Design and implementation of a two?stage PCIE exchange switch for FC testing system [J]. Modern electronics technique, 2016, 39(18): 104?106.
[7] 武安河.Windows設(shè)備驅(qū)動(dòng)程序WDF開發(fā)[M].北京:電子工業(yè)出版社,2009.
WU Anhe. The development of Windows device drive program WDF [M]. Beijing: Publishing House of Electronics Industry, 2009.
[8] 楊阿鋒.基于WDF的PCIe接口高速數(shù)據(jù)傳輸卡的驅(qū)動(dòng)程序開發(fā)[D].長沙:國防科技大學(xué),2008.
YANG Afeng. Development of WDF?based driver program for high?speed data transmission card of PCIe interface [D]. Changsha: National University of Defense Technology, 2008.
[9] 杭彥希,徐金甫,南龍梅.基于PCIE接口的IPSec加速SoC設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2017,38(5):1212?1215.
HANG Yanxi, XU Jinfu, NAN Longmei. Design of accelerator SOC for IPSec based on PCIE interface [J]. Computer engineering and design, 2017, 38(5): 1212?1215.
[10] 肖文君,劉萬松,劉伍豐,等.基于WDF的PCIe總線驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)控技術(shù),2015,34(7):101?104.
XIAO Wenjun, LIU Wansong, LIU Wufeng. Design and implementation of driver program for PCIe based on WDF [J]. Measurement & control technology, 2015, 34(7): 101?104.
[11] 張帆,史彩成.Windows驅(qū)動(dòng)開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008.
ZHANG Fan, SHI Caicheng. Windows driver development internals [M]. Beijing: Publishing House of Electronics Industry, 2008.