[KEKB Bunch Feedback Group]

株式会社デジテックス研究所社製バンチ電流モニタ18K10用EPICS Device Supportの製作(Japanese)


by とびやま まこと(Makoto Tobiyama)/KEKB ビームモニターグループ

警告
以下の記述に関しては、意図する、しないに関わらず多くの誤り、誤解が含まれていると思われますので、 決して信用してはいけません。これを信じて起きた損害に関しては、当方は一切責任を持ちません。


If you want to contact with the author, please E-mail to makoto.tobiyama@kek.jp.
目次

1.はじめに

18K10は、KEKB、KEKBダンピングリングでバンチ電流、バンチ振動をモニターするモジュールです。 外部から供給されるRF(509MHz)信号に同期して、バンチ電流あるいはバンチ位置信号を高速8bit ADC でサンプルし、FPGA内部ブロックRAMあるいは外部大容量メモリー(DDR2)に記録します。本デバイスサポートは、 KEKB用バンチ電流モニターモードで、バンチ電流を測定するとともに、Reflectiveメモリーにバンチ電流 データを書き込み、遠方のバケツ選択システムにリアルタイムにバンチ電流データを送るものです。リフレクティブ メモリーはVMIVME-5565ですが、こちらは単なるVMEメモリーとして扱います。

2.VMEバスレジスタ

18K10ボードのI/Oマップは以下の通りです。
アドレスWrite/Readデータ
313029282726252423222120191817161514131211109876543210
0x*****(***00)00(R/W)BOARD RESET
0x*****(***00)04(R/W)TRIG_ENB
0x*****(***00)08(R/W)MEM_TRIG
0x*****(***00)0C(R/W)MEM_SIZE
0x*****(***00)10(R/W)IRQ_ENB
0x*****(***00)14(R/W)ADCLK_DLY
0x*****(***00)18(R/W)ADC_RST
0x*****(***00)1C(R/W)ADRDPT_RST
0x*****(***00)20(R/W)MEM_CL
0x*****(***00)24(R/W)FPGA_OUT
0x*****(***00)28
0x*****(***00)2C
0x*****(***00)30(R)BOARD_STS
0x*****(***00)34(R)AD_STS
0x*****(***00)38(R)REC_MODE
0x*****(***00)3C(R)HARMONIC
0x*****(***00)40(R)IRQ_NO
0x*****(***00)44(R)IRQ_ID
0x*****(***00)48(R)FPGA_IN
0x*****(***00)4C
0x*****(***00)50(R)DEBUG0
0x*****(***00)54(R)DEBUG1
0x*****(***00)58

0x*****(***00)FC
0x*****(***01)00(R)Data 0 Data 1
Data 2Data 3
0x*****(***01)04(R)Data 4 Data 5
Data 6Data 7
(R)Data n Data n+1
Data n+2Data n+3
0x*****(***01)FC(R)Data 252 Data 253
Data 254Data 255

差動入力時のADCのデータフォーマットは、
入力電圧ディジタル出力
76543210
100mV11111111
0V 10000000
-100mV00000000

です。
各レジスターの説明は以下の通りです。

3.EPICS環境

本デバイスサポートは、EPICS R314.12.3-CSAのVxWORKS(MV5500)用に開発したものです。 BLT(DMA転送)をサポートします。VxWorksのバージョンは6.8.3です。このバージョン は、通常のabco4上で開発が可能です。

EPICSそのものに対する入門出家入道については徳の高い専門家に帰依するなり、 コントロールグループのページを尊い修行と思って読破するなどの自活努力をお願いします。

4.コードの概要(全体)

全体のコードを以下のリンクに示します。
ソースファイル(devVme18k10KB2.c)
また、dbdファイルの中身は
device(bo,VME_IO,devBo18k10KB2,"V18K10KB2")
device(bi,VME_IO,devBi18k10KB2,"V18K10KB2")
device(mbbiDirect,VME_IO,devMbbi18k10KB2,"V18K10KB2")
device(ao,VME_IO,devAo18k10KB2,"V18K10KB2")
device(waveform,VME_IO,devWf18k10KB2,"V18K10KB2")
device(longout,VME_IO,devLo18k10KB2,"V18K10KB2")
device(longin,VME_IO,devLi18k10KB2,"V18K10KB2")
device(stringin,VME_IO,devSi18k10KB2,"V18K10KB2")
です。

このデバイスサポートの主要部は18k10の 説明に書きましたので、以下は変更部のみ示します。

5.EPICSデータベース

データベースは以下の様になります。今のところ不要なものも歴史的経緯から 入っています。

FB_BCMKB2.db

6.スタートアップファイルサンプル

/cont/bootp/iocの所には
# Example vxWorks startup file
#Following must be added for many board support packages
</cont/bootp/ioc/kekb_mv5500.cmd
putenv "EPICS_CA_MAX_ARRAY_BYTES=167772160"
# put your startup script below
</users/tobiyama/epics_M7/iocBoot/iocfbppc/st.iocfbfb4j.cmd
kekBootLog
printTime(60)
のように、自分の所のブートファイルを読みに行くように設定します。 なお、EPICS_CA_MAX_ARRAY_BYTESはクライアント側も設定しておかないと 長いwaveformを読む事が出来ません。
2枚の18k10ボードを使用する時のスタートアップファイル(の関係部分)は次のようになります。
dbLoadRecords("db/FB_BCMKB2.db","USER=FBL, CHAN=C0")
dbLoadRecords("db/FB_BCMKB2.db","USER=FBH, CHAN=C1")

dev18k10KB2Config(2,0x09000000,0x5,0x90)
dbpf "FBL:BCM:IRQENB","1" dbpf "FBH:BCM:IRQENB","1" dbpf "FBL:BCM:TRG_ENB","1" dbpf "FBH:BCM:TRG_ENB","1" dbpf "FBL:BCM:IRQENB","1" dbpf "FBH:BCM:IRQENB","1" dbpf "FBL:BCM:TRG_ENB","1" dbpf "FBH:BCM:TRG_ENB","1"

7.動作など

最大入射レートが50Hzなので、トリガーが入ってから18K10のデータを 読み、さらにReflective memoryにデータを書き終わり、EPICSレコードに 反映するまでが20ms以内に収まる必要があります。VMEバスアナライザ のTimingモードで、VMEアクセスの様子を見たものが、以下の図です。

このうちの、前半でデータを読み取っているところが18K10からバンチ電流 情報をCPUに転送しているところ(64×4)、後半がReflective memoryへ 同じデータを書き込んでいるところです。いずれもAMコードは0Fで、32bit BLTモード転送をしています。18K10からの読み出しが、Reflectiveメモリー と比べて約4倍時間がかかっていますが、これはFPGAとVME制御用のCPLD の間のバスが狭いため、4データ読むのに4アクション近くかかっているためです。

バスアナライザをステートモードにして、割り込みからデータ転送終了までの 時間を測定したところ、大体11ms弱でしたので、50Hzの動作には問題無く 対応出来ます。

KEKB時代に使用していたDelphiで書いたバンチ電流表示ソフトを、R314対応に して書き直しました。以下のように、ちゃんと表示できています。



8.おわりに

バンチ電流モニター18K10のデバイスサポートについて紹介しました。
Makoto Tobiyama
5/May/2015

Return to FB Home Page...