肖文君 刘万松 刘伍丰 李境达
摘 要: 为解决主动式肿瘤治疗中治疗计划系统和加速器控制系统之间的数据通信问题,研发了智能终端系统。文中设计的基于PCI总线的剂量控制系统是智能终端系统的一部分,该系统利用Altera公司的ACEX1K50芯片实现PCI总线接口,利用WDF驱动模型实现上位机的PCI驱动,通过开发的应用程序调用驱动程序接口,实现了上位机同FPGA的数据通信,从而实现智能终端与剂量控制器的数据通信。实验结果表明,该系统达到了预期目标。
关键词: 肿瘤治疗; 剂量控制系统; 数据通信; PCI驱动; 智能终端; 驱动程序安装
中图分类号: TN913?34; TP399 文獻标识码: A 文章编号: 1004?373X(2019)16?0036?04
为了解决主动式肿瘤治疗中,治疗计划系统与加速器控制系统之间的通信问题,特研发了一种智能终端系统,该系统能够在治疗过程中智能地实现束流位置?剂量联动。剂量控制系统是智能终端系统的一部分,用来实时监测肿瘤治疗的剂量。如果照射剂量达到预先设定值,系统会发送剂量同步信号给位置控制器,智能切换束流的扫描方向。
1 剂量控制系统总体设计
剂量控制系统用来实时监测肿瘤治疗的剂量,通过与位置控制器的配合智能实现位置?剂量联动,使束流的辐照区域形状在三维方向上与肿瘤的实际形状一致,从而降低束流对肿瘤周围健康组织的照射,提高放射治疗的治疗增益比,以达到更好的治疗效果。剂量控制系统的结构框图如图1所示,该系统主要由两部分组成,即智能终端系统前端服务器和剂量控制器。智能终端系统前端服务器和剂量控制器采用PCI接口进行数据通信。智能终端系统前端服务器将剂量信息存放在剂量控制器中,治疗过程中,剂量控制器从束流监测系统实时获得当前辐照剂量,判断是否达到预设辐照剂量,通过输出控制信号指示位置控制器,从而实现位置与剂量的联动。
2 剂量控制器
剂量控制器是剂量控制系统的关键器件,其模块结构见图2。剂量控制器是通过采用ACEX1K50芯片来是实现的。剂量控制器通过PCI接口与智能终端进行通信,用大容量SDRAM来存储智能终端传输过来的数据,并且在该FPGA中实现相应的逻辑控制,从而保证剂量控制系统的精度要求和稳定性要求[1?2]。
智能终端把医生给出的肿瘤处方剂量通过PCI接口,存放在剂量控制器的SDRAM存储器中,每次治疗的数据被单独连续存放,由首地址索引,首个治疗数据是扫描点个数,以下依次为每个扫描点的处方剂量。剂量计数器的输入是从束流监测系统得到的剂量脉冲,输出是脉冲信号用来指示位置控制器,从而实现位置与剂量的联动。剂量控制过程如下:
1) 剂量控制器从SDRAM中读出处方剂量,加载到相应的计数器中。
2) 剂量控制器开始接收剂量脉冲,同时进行计数。如果当前的扫描点计数完成,说明已达到预设的处方剂量,剂量控制器立即向位置控制器发出信号。
3) 位置控制器就将束流定位到下一扫描点,同时剂量计数器也加载下一点的处方剂量,开始下一点的计数。
3 剂量控制系统数据通信设计
智能终端与剂量控制系统是通过PCI(Peripheral Component Interconnect)总线实现数据交互的。PCI总线是由Intel公司首先推出的一种局部总线,适用于各种平台。由于其功能强大, 使用方便灵活, 与其他总线相比具有较大的优势和广阔的应用前景。剂量控制系统中的数据通信设计包含了PCI总线接口的设计、PCI总线驱动程序的设计以及应用程序的设计三个部分。
3.1 PCI总线接口设计
系统的PCI总线接口是在Altera公司的ACEX1K50芯片中实现的。系统采用通信状态机(FSM) 实现PCI通信时序。状态机根据PCI总线上的控制信号、配置空间的状态信号切换不同的状态,同时在各种状态下发出相应控制信号来控制总线上的数据流向。设计4种状态:Idle,Compare,Transfer和Backoff。Idle状态是空置状态,表示总线上没有任何事务发生;Compare状态表示总线主设备发起总线事务,从设备通过比较总线上的地址判断本次总线事务是否属于该设备,如果是,状态机转换到Transfer状态并且发出相应的读写信号,若主设备需要结束本次总线周期,它会切换到Backoff状态[3?4]。PCI总线接口状态机如图3所示。
3.2 PCI总线驱动程序
系统采用WDF(Windows Driver Foundation)模型开发PCI总线驱动程序。WDF模型是微软新一代驱动开发模型,该模型以WDM为基础进行建模和封装,并支持内核模式及用户模式两种驱动模型。在WDF驱动模型下,无论内核模式的驱动程序还是用户模式的驱动程序,它们都采用同一套对象模型构建,以及同一个基础承载[5?9]。
3.2.1 驱动程序入口地址
当驱动程序被加载时,会调用驱动程序的DriverEntry例程,这是WDF驱动程序的主入口地址。驱动程序通过DriverEntry例程创建驱动对象并设置EvtDriverDeviceAdd例程地址。
3.2.2 驱动程序初始化
当pnp管理器检测到新的PCI硬件设备插入,根据安装驱动程序时Inf文件中指定的设备识别号和厂商识别号找到相应的设备驱动,然后调用PCIDriver_EvtDevIceAdd回调函数,完成驱动程序的初始化。
3.2.3 DMA操作
在本驱动设计中,用到了KMDF为DMA操作提供的两个对象:WDFDMAENABLER和WDFCOMMONBUFFER。WDFDMAENABLER对象用于建立一个DMA适配器,说明DMA通道的特性。WDFCOMMONBUFFER对象用于申请系统提供的公用缓冲区。首先,驱动程序创建一个WDFDMAENABLER对象,然后再创建一个WDFCOMMONBUFFER对象。在成功创建WDFCOMMONBUFFER对象后,操作系统会为驱动程序提供一个在物理上连续的内存,在此把它称为公用缓冲区,作为硬件设备和驱动程序进行DMA传输的公共区域。
3.2.4 硬件访问
当驱动程序收到IRP时,根据IRP中的主功能码在相应的队列中排队,然后依次取出队列中的各个IRP,调用I/O请求队列处理函数。在本驱动中,只运用IoControl队列,应用程序同样只能通过发送IoControl命令的方式来调用驱动程序。因此,所有的I/O请求操作都可以在一个队列处理函数内完成。
对硬件的访问具体就是对BAR0的访问、对BAR1的访问、对BAR2的访问以及对COMMONBUFFER的访问。其中对BAR0和BAR1的访问通过存储器操作,对BAR2的访问通过I/O操作,对COMMONBUFFER的访问则通过内存拷贝函数直接实现。
3.3 应用程序与驱动程序的通信
应用程序通过同驱动程序通信,从而达到控制设备的目的。应用程序与驱动程序通信的过程是:应用程序先用CreateFIle函数打开设备,然后可以用DevIceloControl和KMDF通信,包括从KMDF读数据和写数据给KMDF两种情况,也可以用ReadFIle从KMDF读数据或用WriteFIle写数据给KMDF,当应用程序退出时,用CloseHandle关闭设备[10?11]。WIN32 API函数与KMDF回调例程对应情况如表1所示。
4 剂量控制系统数据通信测试
4.1 驱动程序安装
INF是Device Information的缩写,INF文件又被称为“安装文件”。它包含了设备安装指令,系统通过这些指令来理解设备,并将驱动程序与物理设备联系在一起。当操作系统检测到有新硬件插入时,会弹出“找到新硬件向导”的对话框,然后选择INF文件所在的路径,根据INF文件内容安装驱动程序。PCI驱动程序安装完成之后,在设备管理器中会添加一个硬件的类,驱动安装界面如图4所示,在驱动安装成功后,在设备管理器中添加WDFDRIVER的硬件。
4.2 存储器写事务测试
先打开控制台程序,再打开应用程序,并输入参数[W 4 10]。其中W表示对BAR0进行写操作,4为BAR0的偏移地址,10为要写的数据。程序运行流程:应用程序根据参数[W]调用相应的DevIceloControl函数,然后根据DevIceloControl的控制代码调用驱动程序中相对应的函数。驱动程序首先获取应用程序传递过来的输入缓冲区,从中取出偏移地址和数据,然后把数据写到硬件指定的地址中。存储器写事务测试结果如图5所示。
4.3 存储器读事务测试
存储器读事务的过程与写事务的过程类似,输入参数[R 4],表示读取基地址为BAR0,偏移地址为4的数据。存储器读事务测试结果如图6所示,数据为10,该数据为刚写进去的数。
4.4 DMA操作测试
对于DMA操作,应用程序首先打开一个二进制文件,该二进制文件包含4个32位的数。第一个32位数表示控制该DMA操作是读操作还是写操作,第二个32位数表示DMA操作的数据长度,第三个32位数表示FPGA中FIFO的偏移地址,第四个32位数表示COMMONBUFFER的偏移地址。然后将这些参数传递给驱动程序,驱动程序把参数赋值给相应的寄存器,并启动DMA操作。先启动一个DMA操作,向COMMONBUFFER分别写入从数字1开始的10个连续的数,然后从COMMONBUFFER读数,DMA操作结果如图7所示。
5 结 论
本文介绍了智能终端剂量控制系统的功能和结构,阐述了智能终端剂量控制系统软件的实现。系统采用通信状态机在FPGA中实现PCI总线接口,采用微软WDF驅动框架,实现了PCI总线驱动程序,完成了智能终端前端服务器与剂量控制器的数据通信,使得肿瘤治疗的剂量数据能够快捷方便地下载至剂量控制器中,同时能够从剂量控制器中实时地获取辐射剂量信息以便监测,从而实现束流位置?剂量联动。
参考文献
[1] 李桂花,乔卫民,敬岚.一种用于重离子治癌的剂量控制器设计[J].原子能科学技术,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] 钟新华,袁卫华.基于NI CompactRIO的离子注入机剂量控制系统设计[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总线接口控制器的设计[D].南京:南京航空航天大学,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的原理及体系结构[M].北京:清华大学出版社,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体系结构导读[M].北京:机械工业出版社,2010.
WANG Qi. Introduction to PCI Express architecture [M]. Beijing: China Machine Press, 2010.
[6] 杨可.FC测试系统中两级PCIE交换开关的设计与实现[J].现代电子技术,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设备驱动程序WDF开发[M].北京:电子工业出版社,2009.
WU Anhe. The development of Windows device drive program WDF [M]. Beijing: Publishing House of Electronics Industry, 2009.
[8] 杨阿锋.基于WDF的PCIe接口高速数据传输卡的驱动程序开发[D].长沙:国防科技大学,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设计[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总线驱动程序设计与实现[J].测控技术,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驱动开发技术详解[M].北京:电子工业出版社,2008.
ZHANG Fan, SHI Caicheng. Windows driver development internals [M]. Beijing: Publishing House of Electronics Industry, 2008.