BPM 向け Pulse 列発生に向けた情報交換 - MRF, Nov.1-18.2016

=====
BPM 向け Pulse 列発生に向けた飯塚氏と古川の情報交換
MRF EVG-EVR について (SINAP EVO-EVE に関しては別 File)
期間:Nov.1-18.2016.
情報共有:飯塚、宮原、佐藤政、諏訪田、中村達、古川
関連:打ち合わせ Memo, Nov.22.2016

===
Nov.1.2016. k.furukawa
Beam に同期しない Revolution 信号は Multiplexed counter (MXC) で生成し、Distributed bus で分配することができる
(RF group も作ってくれるらしい)
Harmonic number 230 と同期するために Prescaler 値は 5 または 10
MR RF 同期と DR RF 同期の双方が必要らしい

BPM 用の信号(Beam 同期の Revolution 信号)は MXC では作れない、例えば Sequencer に生成させることができると思われる
適当な長さの Event 列を Sequencer に書き込み、Recycle させる
Event clock と Beam bucket の Offset を Bucket number から計算しておき、EVR の出力 Delay を Pulse 毎に調整する

Nov.2.2016. k.furukawa
[A] Revolution clock の生成
* EVG 側
(A1) RF Clock の Divider を 5 として Event clock を生成する
(A2) Multiplexed counter を 46 として Distributed bus #0 に接続する
* EVR 側
(A3) Distributed bus #0 を 出力に接続する (A4) Revolution clock (RF/230) を確認する
[B] BPM 用信号の生成
* EVG 側
(B1) AC divider/phase-shifter を bypass する
(B2) Sequencer RAM 1 に、Event clock 46 個毎に例えば 4 回 Event #1 を、そして最後に End sequence code 0x7f を書いておく
(B3) Sequencer RAM 1 を Not single、Recycle とする
* EVR 側
(B4) Event #1 を出力に接続する
(B5) AC 入力から始まる Revolution clock (RF/230) を確認する

===
Nov.4.2016. iitsuka
東日本技術研究所の飯塚です。

 11/2(水)の打ち合わせで伺った509MHzの230分周でパルスを
出し続ける機能について、とりあえず実現する事はできました。
使用した方法は下記の通りで、それぞれについてデメリットが
あります。

(1) MXC+TriggerEvent
    外部からのTTL信号でトリガー出来ない。
    (IOC起動とともにパルスが出続ける)
    ※DbusではうまくいかなかったのでTriggerEventを使ってみました。

(2) SeqRAM+RecycleMode
    なぜかパルス出力開始とともに、ChannelAccessできなくなる。
    (ただしIOCは動作している模様)

自席に動作環境がありますので、ご覧頂く事も可能です。

===
Nov.4.2016. k.furukawa
こんにちは、飯塚さま、古川です。

早速の連絡をありがとうございます。

一昨日お願いした件の Memo を、
<http://www-linac2.kek.jp/cont/trigger/dr/dr-event-161102.pdf>
<http://www-linac2.kek.jp/cont/trigger/dr.html>
に置きました。

(1) [A] で Distributed bus が使えないのは不思議ですが、最低限
MXC+TriggerEvent が Starting point かと思います。外部 TTL 信号で起動で
きないのは仕様ですね。

MXC+TriggerEvent は他の Event と重ねられないと思うので、全体構成を良く
考える必要があると思います。Distributed bus で実現できると、他の Event
と重ねられるので、もう少し試していただけますか。

(2) [B] について、考え方が正しいのかどうか、Jukka に一昨日質問しました。
回答待ちです。特に、Recycle を指定した Sequencer を、AC input で Re-
trigger できるのかどうかなど気になっているところがあります。だめかもし
れません。

Channel access できない、ということは、VxWorks の Prompt も来ないとい
うことでしょうか。別問題もあるかもしれないですね。別の機能が Enable に
なっていて、Conflict しているかもしれません。

まずは、Recycle 無しで数発だけ Event を送り、Pulse を出すなどから確認
してみていただけますか。

よろしくお願いします。

===
Nov.4.2016. iitsuka
東日本技術研究所の飯塚です。

> (1) [A] で Distributed bus が使えないのは不思議ですが、最低限

 すみません。Dbus については説明が不足していました。
 パルスを出す事は可能なのですが、Duty 比がほぼ 50% で変えられそう
になかったため、うまくいかないと申しました。頂いた資料では Duty 比
を 20% とするような記載がありましたので、そう判断致しました。こちら
の勘違いでしたら申し訳ございません。

> Channel access できない、ということは、VxWorks の Prompt も来ないとい
> うことでしょうか。

  vxWorks のプロンプトは返ってきます。その状態で i コマンドや、EPICS の
dbl コマンド等も動作いたします。

> まずは、Recycle 無しで数発だけ Event を送り、Pulse を出すなどから確認
> してみていただけますか。

  こちらは既に確認済みで、Recycle でなければ、問題なく動作する事が確認
できております。

===
Nov.8.2016. k.furukawa
こんにちは、飯塚さま、古川です。

申し訳ありませんが、昨日の試験で忘れたことが 2 件あります。確認をお願い
します。

(1) 最後のころの試験で、AC input 調整の Bypass を行いました。その前に行っ
た Sequencer の Recycle の試験では、出力が AC input に同期しませんでした
が、その時には、Bypass になっていたでしょうか。Bypass になっていなかった
としたら、Bapass にした上で、Sequencer 出力が AC input に同期するかどう
か、確認してもらえますか。

(2) Channel access の確認には caget (相当) の Command を使用して、
Sequencer を Recycle にすると PV が見つからなくなりました。Recycle 前に
camonitor (相当) の Command で PV に接続しておき、その後 Recycle を
Enable すると、接続は維持されて、値は取れる、ということがないか、確認し
てもらえますか。

===
Nov.8.2016. iitsuka
東日本技術研究所の飯塚です。

以下、回答になります。

(1) あの時にはBypass設定されておりませんでしたので、本日Bypass設定に
    して確認してみましたが、同期しませんでした。

(2) Recycleに設定後、PV値の更新が停止し、しばらく後に"Virtual circuit
    unresponsive"と表示されました。
    以下はその時のログになります。

    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:43.202275 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:44.202275 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:45.202275 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:46.202275 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:47.202275 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:48.202475 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:49.202475 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:50.202475 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:14:51.204475 1
    hig-i:DRTM:EVR0:Monitor:EventNum 2016-11-08 09:17:46.769654 *** disconnected
    CA.Client.Exception...............................................
        Warning: "Virtual circuit unresponsive"
        Context: "iocccctmp7:5064"
        Source File: ../tcpiiu.cpp line 945
        Current Time: Tue Nov 08 2016 09:17:46.769619000
    ..................................................................

===
Nov.8.2016. iitsuka
東日本技術研究所の飯塚です。

 (2)のRecycleモードを使用すると、Channel Accessが出来なくなる件ですが、
以下の事が分かりました。

  EVRの割込みを使用しないようにして起動すると、cagetでPVが読めます。
  また、EVRの割込みを有効にした状態でも、EVRFIFOタスクの優先度を、CA
サーバー関連タスクより下げてあげれば、cagetでPVを読む事が出来ました。

  上記から、Channel Accessが出来なくなる原因は、EVRのイベント受信割込み
が頻発してCA関連のタスクが動けなくなるためと思われます。

===
Nov.8.2016. k.furukawa
こんにちは、飯塚さま、古川です。

連絡をありがとうございます。

残念ですが、了解しました。次の Action は Jukka からの回答を待って考えた
いと思います。

===
Nov.8.2016. k.furukawa
こんにちは、飯塚さま、古川です。

連絡をありがとうございます。

割り込みを掛けているとは思いませんでした。2.2MHz で割り込みが掛かってい
たということですね。割り込みが多過ぎると Console に Error message が出る
のではないかと思うのですが、Error message は無かったということでしょうか。
いずれにせよ、誤解していたようです。

今回は割り込みは必要無いので一応解決ということですね。この Event とは別に
20ms に一回程度の割り込みは掛けたいと思いますが、それは別 Event とすれば、
可能ですね。

ただ、AC input 同期ができていないので、やはり Jukka の回答待ちです。

===
Nov.8.2016. iitsuka
東日本技術研究所の飯塚です。

 イベントがきちんと出ているかどうかを確認するために
セットしておいたのが仇になったようです。お騒がせして
申し訳ありませんでした。

  それと、エラーメッセージの表示はありませんでした。

===
Nov.10.2016. iitsuka
東日本技術研究所の飯塚です。

  ACとのズレの件ですが、テストとして以下の処理を試してみました。

  パルスは32,000回でいいという事だったと思いますので、SequenceRAM上に
2,000回分のイベントを格納し、それを16シーケンス分送出すれば32,000回に
なります。
  この状態で、16シーケンス目の送出はNormalモードで送り、送出完了時に
Recycleに戻すという処理を加えたところ、短期的な経過観察ではありますが、
ACとの同期ずれが観測されなくなりました。
  ただし、Normal⇔Recycleの変更に時間がかかるのか、ACを40Hzより大きく
すると、次のTriggerが受け取れなくなる現象が発生するようになります。

  以上、まだ試験不足の部分もあるかと思いますが、取り急ぎご報告させて
頂きます。

===
Nov.10.2016. k.furukawa
こんにちは、飯塚さま、古川です。

連絡をありがとうございます。返答遅くなりました。

ちょっと理解できていません。どのようにして、16 回目の Recycle で Normal
に戻しているのでしょうか。私は良い方法が無いかと思っていました。

Sequence の最後に割り込み用の Event を入れているのでしょうか。そうすると、
16 回続けて割り込みが掛かるということですね。900 μs 毎に割り込み、とい
うのは、少し重いかもしれないですね。実は、全て間に合っているわけではなく、
間に合わない場合もあって、16 回以上廻っている可能性もあるのでしょうか。

===
Nov.11.2016. iitsuka
東日本技術研究所の飯塚です。

  以下に回答させて頂きます。

> Sequence の最後に割り込み用の Event を入れているのでしょうか。そうすると、

  割込み用のイベントは入れておりません。
  先日少しお話をさせて頂いたと思いますが、シーケンスRAMの
送出完了後に割込みがかけられるようになっておりまして、その
割込みを使用して送出回数をカウントしております。

> 間に合わない場合もあって、16 回以上廻っている可能性もあるのでしょうか。

  オシロをしばらく観察していましたが、AC 40Hz以下ならば、
私が見ていた限りでは、そういった事はなかったように思います。

===
Nov.11.2016. k.furukawa
こんにちは、飯塚さま、古川です。

連絡をありがとうございます。

そういう手がありましたね。確認ありがとうございます。

繰り返しが変わっても、Interrupt の間隔は約 900 μs で一定なので、繰り返
しが影響する理由がにわかにはわかりませんが、最大 1 秒間に 16 x 50 回の
割り込みに耐えられなければならないので、全体としては大き過ぎる Load で
すね。

まずは、来週以降の SINAP module の進展に期待したいと思います。

並行して、SINAP module での Data buffer や Distributed bus の扱いについ
て尋ねています。

===
Nov.11.2016. iitsuka
東日本技術研究所の飯塚です。

> 繰り返しが変わっても、Interrupt の間隔は約 900 μs で一定なので、繰り返
> しが影響する理由がにわかにはわかりませんが、最大 1 秒間に 16 x 50 回の

  Interruptの間隔は900μsで一定ですが、ACの周波数が変わる事で、
最後のシーケンス転送が完了してから、次のTrigger待ちのために、
Recycleに戻して次のTriggerに備える処理にかけられる時間が変わっ
てくると思います。
  32000パルスの出力は14.46msですから、40Hzですと10.54msですが、
50Hzになると、5.54ms内に完了させなければならない計算になると
思います。
  ただ、Recycle->Normalへの変更は900μs内に出来ているはずなのに、
なぜNormal->Recycleは5.54msでも完了しない場合があるのかという
疑問は残ります。

===
Nov.11.2016. k.furukawa
こんにちは、飯塚さま、古川です。

連絡をありがとうございます。

処理時間は数十μs x n 程度だと思いますので、不思議です。

今後、他の処理も行わなければならないので、現在の試験 Code だけで CPU が
足りないのは論外ですね。

その速度だけが問題ならば、現在は、EPICS の PV Link で処理していると思い
ますが、Driver 内に C で処理を書けば問題なくなるでしょうから、遅くなる原
因の理解は必要でしょう。

===
Nov.11.2016. iitsuka
東日本技術研究所の飯塚です。

> 今後、他の処理も行わなければならないので、現在の試験 Code だけで CPU が
> 足りないのは論外ですね。

  もしくは、単純にCPUの処理速度だけではなくて、EVGのファーム内部の処理に
時間が必要と言う可能性はないでしょうか?
  CPU側から見れば Recycle→Normal も Normal→Recycle も処理内容としては
大差ない訳わけですから、Normal→Recycle だけ時間がかかるというのは不思議
です。
  ともかく、時間のある時に、この辺りのドライバ処理を見てみます。

===
Nov.14.2016. iitsuka
東日本技術研究所の飯塚です。

 Recycleモードでの繰り返し回数の制御を、mrfioc2ドライバを改造して、
C言語で書いてみました。また、制御の方法を下記 (1) から (2) に変更
してみました。

  (1) 15回目のシーケンス送出完了後に転送モードをNormalにし、
      16回目のシーケンス送出完了後に転送モードをRecycleに戻す
  (2) 16回目のシーケンス送出完了後にPauseによる送出の中断と
      Enableによる再許可を同時に行う。

  この方法ならば、AC 60Hz でも問題なく動作しているようです。
  (2)の方法は、転送モードの変更が必要ない分、高速に処理できるのかも
しれません。ただし、中断と再許可を16シーケンス送出後に行っているので
パルスは32,000+α回出力されます。

===
Nov.18.2016. iitsuka
東日本技術研究所の飯塚です。

 mrfioc2 を改造して EVG で 32,000 回パルスを出力する試験
につきまして、TDC を使用してトリガー抜けが発生していないか
の確認を行いました。

  トリガー周期を 50Hz として、昨日の 18 時から試験を開始して、
本日 12 時までの 18 時間に渡って試験を行い、その間にトリガー
抜けが発生していない事が確認できました。

=====

<kazuro.furukawa@kek.jp>, Linac, KEK, Nov.26.2016.
[今回打ち合わせ Memo] [DR Timing] [Linac Event Timing] [Linac Timing Another] [Control] [Linac] [Accelerator] [KEK]