王 林 雷 革 馬 力
(中國科學院高能物理研究所 北京 100049)
中國散裂中子源(CSNS)快循環同步加速器(RCS)高頻低電平系統的任務是保證高頻系統嚴格按照電壓、相位、頻率的優化工作曲線運行,同時還要克服束流負載效應造成的系統不穩定性問題。它要完成腔壓幅度控制、同步相位控制和自動調諧等功能[1]。
高頻低電平遠控系統負責將低電平系統接入到EPICS控制系統框架中,使其與中央控制上位機進行實時數據通信。
EPICS(Experimental Physics and Industrial Control System)是開源的實驗物理和工業控制系統軟件包,已在世界范圍內廣泛應用于粒子加速器、天文望遠鏡等科學裝置。它提供了豐富的控制系統軟件開發工具,可以用來建立分布式的控制系統體系結構,進行系統集成。
EPICS 由操作員接口 OPI(Operator Interface),輸入輸出控制器IOC(Input/Output Controller)和局域網LAN(Local Area Network)三部分組成[2]。
高頻低電平遠控系統采用全數字控制模式,CPU板+cPCI總線+數字I/O板的架構[1],CPU板和數字I/O板放在同一個cPCI機箱內,CPU板通過cPCI總線控制數字 I/O板和網絡與上位機進行通信。CPU板是愛默生的 CPCI-6020,操作系統是vxWorks。高頻低電平遠控系統結構如圖1所示。
RCS高頻系統有8個高頻腔,相應有8塊數字I/O板,每塊板卡控制一個腔。因此,在一個總線機箱內,一個CPU板需要控制8塊數字I/O板。其結構如圖2所示。

圖1 高頻低電平遠控系統結構圖Fig.1 Architecture of LLRF remote control system.

圖2 CPU板與數字I/O板的對應關系圖Fig.2 Correspondence between CPU and digital I/O boards.
RCS的重復周期是40ms,高頻系統在前20ms由數字I/O板采集與高頻腔相關的實時數據,包括腔壓、相位、頻率等。后20ms,CPU板通過cPCI
中國散裂中子源工程建設資金資助
系統的時間分配是,留出2ms的余量,也就是用18ms的時間傳輸數據。由于有8塊數字I/O板同時工作在一個cPCI機箱內,所以平均每塊板卡需要在2.25ms內完成數據的傳輸。
數字I/O板中的FPGA固件程序的功能是以固定時間間隔產生中斷,CPU板接收到中斷后,利用DMA傳輸,讀取 16K個整型數據(即64KB)。中斷周期為 40ms產生 4次中斷,與下一次中斷的間隔分別為 4.5ms、 4.5ms、 4.5ms、 26.5ms。 16K個整型數據由 FPGA 內部 FIFO 產生,在產生中斷之前準備好,為了方便對數據進行校驗,這些數據是定值,分別是1,2,3,…,16384。
數據的傳送過程如圖 3所示。CPU板先通過DMA把FPGA中的數據取出來放到緩沖區中,原始數據需經過標度變換,然后送到EPICS的ai、bi和 waveform等記錄中,再通過網絡把數據送到上位機顯示。

圖3 數據傳送過程Fig.3 Data transfer process.
2.1.1 板卡識別
與VME等標準總線的板卡類似,在cPCI總線上,板卡首先要被識別。cPCI總線和PCI總線使用相同的軟件接口,因此數字I/O板的識別方法與PCI設備相同,下面很多概念也將直接以PCI總線來描述。
PCI設備空間包括配置空間和地址空間,配置空間用于存儲和配置設備的基本信息,地址空間用于訪問設備的內部寄存器。當vxWorks操作系統啟動時,逐個掃描PCI設備,并為設備分配總線號、設備號、功能號,程序中通過總線號、設備號、功能號來訪問PCI設備的配置空間。然后,vxWorks為PCI設備分配基地址,并將其寫入到配置空間的BAR(Base Address Register),程序中通過基地址來訪問PCI設備的內部寄存器。
在數字I/O板中,PCI橋芯片PLX-9656與cPCI總線接口,并通過 Local Bus與 FPGA接口。PLX-9656和FPGA都需要PCI地址空間,這兩個地址由 vxWorks系統分配以后自動存儲在PLX-9656配置空間的BAR0和BAR2中。
2.1.2 板卡配置過程
首先,使用vxWorks函數pciFindDevice(),以PLX-9656的vendor(供應商)和device(設備)ID為參數[3],查找數字 I/O板,為識別出的每塊板卡分配一個結構體,用于存儲板卡基本信息,并通過鏈表連接起來,以便查找。然后,在PCI配置空間中讀取總線號、設備號、功能號、基地址和中斷向量等信息,開辟數據緩沖區、vxWorks信號量,分別將它們存儲在板卡結構體中。最后,連接中斷服務程序,啟動中斷服務任務[4],初始化 PLX-9656橋芯片。板卡配置過程如圖4(a)所示。
2.2.1 PCI中斷
PCI總線采用共享的中斷方式,每個PCI設備有 4個中斷引腳 INTA、INTB、INTC、INTD(通常只用INTA)[5]。CPCI-6020的中斷控制器為PCI設備提供了4個中斷請求線,分別編號為28、29、30、31。PCI設備配置空間中的中斷線寄存器用于指示中斷引腳與中斷控制器的連接關系,對于CPCI-6020,即為28、29、30、31中的一個。
在程序中,用中斷線的值作為中斷向量來關聯中斷服務程序,于是,當中斷發生時,中斷服務程序就會被vxWorks執行。由于數字I/O板的數目多于4個,一個中斷向量會對應兩塊數字I/O板,所以當中斷產生時,需要查詢PCI設備的中斷標志位來判斷到底是哪個設備產生的中斷,產生的是哪個中斷。
2.2.2 中斷服務程序工作流程
每個數字I/O板有三種中斷,即FPGA中斷、DMA通道0中斷和DMA通道1中斷。FPGA中斷表明數字I/O板中的數據己經準備好,DMA通道0和DMA通道1的中斷表明本次DMA傳輸完成。DMA通道0用來將數字I/O板中的64KB數據傳到CPU板,DMA通道1用來將CPU板中的波形數據傳到數字I/O板中。
樣機的中斷服務程序查詢每塊板卡的PCI中斷標志位,確定是哪塊板卡產生的哪個中斷。如果是FPGA中斷,則發起一次DMA,從數字I/O板傳輸64KB數據到CPU板。如果是DMA通道0或DMA通道1中斷,則釋放信號量,觸發中斷服務任務進行數據讀寫和處理。中斷服務程序流程如圖4(b)所示。
程序中有兩個中斷服務任務,任務1等待DMA通道0釋放的信號量,然后進行字節序轉換、數據校驗和數據處理。數據準備好后,觸發EPICS記錄來讀取數據。在這里,進行字節序轉換是因為 PCI總線的數據使用小端模式(little-endian),而PowerPC處理器的數據使用大端模式(big-endian)。數據處理是按照高頻低電平系統的需求,把 64KB數據分成8組,每組8KB,并對每組數據進行標度變換。中斷服務任務1的流程如圖4(c)所示。
任務2等待DMA通道1釋放的信號量,輸出運行信息,表明波形數據已經寫入到數字I/O板中。

圖4 主要函數流程圖Fig.4 Flow chart of main functions.
為了提高數據傳輸帶寬,使用 DMA(Direct Memory Access)方式進行數據傳輸。DMA控制器在PLX-9656橋芯片上,橋芯片一邊連接cPCI總線,另一邊連接板卡的內部總線(Local Bus)。發起一次DMA傳輸的過程是:在橋芯片的DMA控制寄存器中,先設置PCI地址、內部總線地址、傳輸的數據量、傳輸方向,然后使能DMA即可。DMA傳輸完成時,橋芯片向PCI總線發出中斷,通知操作系統DMA傳輸完成。
程序中,EPICS記錄使用中斷的掃描方式,當CPU板緩沖區中的數據準備好時,觸發EPICS記錄進行處理,從而EPICS記錄將數據從緩沖區中讀取到自己的value域。具體過程是,數字I/O板配置時,使用 EPICS函數 scanIoInit()初始化一個IOSCANPVT型的變量。然后在記錄的設備支持函數的 get_ioint_info()中,將記錄與相應的IOSCANPVT型變量進行捆綁。當緩沖區中的數據準備好時,使用EPICS函數scanIoRequest(),以這個變量為參數,即可觸發相應的 EPICS記錄進行處理。
樣機的實時控制部分用到了EPICS的ai、bi、waveform等記錄類型,使用EPICS base中自帶的記錄支持,然后單獨開發了設備支持和設備驅動。bi用于讀取板卡工作模式,bo用于設置板卡工作模式、發送“板卡開始工作”等控制信息;longin和longout分別用于讀取和設置測試時FPGA的中斷次數;ai和ao用于讀取和設置標度變換的系數;8個waveform分別用于讀取 8組 8KB的數據;1個waveform用于向數字I/O板寫入波形數據,這個波形數據是電壓、相位或頻率的優化工作曲線,保證高頻系統嚴格按照這個曲線運行。波形數據先用EPICS工具caput寫入到waveform記錄,再由記錄的設備支持直接發起一次 DMA,傳輸到數字 I/O板中。
CPCI-6020的CPU是MPC7410,這個CPU里面自帶了時間計數器,以 25MHz的頻率遞增,時間精度是 40ns??梢允褂?CPCI-6020 BSP中的sysTimeBaseLGet()函數獲取時間計數器的當前值,將這個函數穿插在程序中,就可以計算出程序的執行時間。
表1列出了FPGA發出6個中斷的時間測試。在一個重復周期,每個數字I/O板消耗的時間主要是DMA傳輸、字節序轉換、數據校驗和數據處理。在后續的應用中,字節序轉換的時間可以通過FPGA中數據反寫而省掉,而且也不再需要數據校驗。DMA傳輸時間和數據處理時間的總和遠遠小于2.25ms,因此,數據傳輸和處理的時間滿足高頻低電平系統的要求。

表1 時間測式結果 (ms)Table 1 Time measurement (ms)
人機界面使用EDM開發。如圖5所示,上面四個X-Y Graph控件以曲線的形式分別顯示8組數據,下面的文本框分別用于讀取和設置8組數據標度變換的系數,右下角的 intNum文件框用于讀取和設置 FPGA產生中斷的次數。AutoStop和NeverStop顯示當前板卡的工作模式。系統有兩種工作模式:N 次停止模式(AutoStop)和連續工作模式(NeverStop)。AutoStop是用 intNum文本框來設置一定的中斷次數,當FPGA已經發出了intNum次中斷時,就停止工作;NeverStop是讓系統持續工作下去,只有切換成AutoStop模式才能停止。系統處于AutoStop模式時,按鈕顯示NeverStop,系統處于NeverStop模式時,按鈕顯示AutoStop,點擊按鈕進行模式切換。Reset按鈕用于重置8組數據標度變換的系數。Start按鈕用于使能數字 I/O板的FIFO、時鐘和中斷,使數字I/O板開始工作。

圖5 人機界面Fig.5 Operator interface.
在EPICS和cPCI的軟硬件架構下,作者通過中斷服務和DMA傳輸,實現了將數字I/O板中的數據傳到上位機顯示,以及從上位機向數字I/O板發控制信息和波形數據的功能。通過傳輸固定數據的方式,對數據進行了校驗,同時也對時間進行了測試,測試結果表明遠控系統樣機的功能和性能滿足高頻低電平系統的要求。
樣機模擬了高頻低電平遠控系統的實際工作方式,這樣為后面的帶腔聯調做好了鋪墊。
1 中國散裂中子源(CSNS)初步設計[R]. 中國科學院高能物理研究所, 2011 Preliminary design of the China Spallation Neutron Source (CSNS)[R]. Institute of High Energy Physics,CAS. 2011
2 Martin R. Kraimer, Janet Anderson, Andrew Johnson,EPICS Application Developer’s Guide, Release 3.14.10,2009, http://www.aps.anl.gov/epics/base/R3-14/10-docs/AppDevGuide.pdf [OL]
3 季宇. VxWorks 操作系統下CompactPCI總線驅動程序設計[J]. 電子設計工程, 2009, 17(6): 99–101 JI Yu. Design of the CompactPCI bus driver program under VxWorks[J]. Electronic Design Engineering, 2009,17(6): 99–101
4 程敬原. VxWorks軟件開發項目實例完全解析[M]. 北京:中國電力出版社, 2005 CHENG Jingyuan. VxWorks software development project instance fully resolved [M]. Beijing: China Electric Power Press, 2005
5 PCISIG, PCI Local Bus Specification, Revision 2.2, 1998,http://www.ece.mtu.edu/faculty/btdavis/courses/mtu_ee31 73_f04/papers/PCI_22.pdf [OL]