開始行:
* AMT-VME [#qff10614]
Atlas Muon TDC として開発されたチップを VMEのボードとして...
- 制作者、KEKの[[新井氏のページ>http://research.kek.jp/pe...
-- [[AMT chip のページ>http://research.kek.jp/group/atlas...
--- [[AMT-3 chip のマニュアル>http://research.kek.jp/grou...
-- [[AMT-VMEのページ>http://research.kek.jp/group/atlas/t...
- 個人的にまとめた情報
-- [[AMT-VME data format and parameters>https://docs.goog...
-- NKS2実験でのDAQプログラムとDSPプログラムのシークエンス...
* High rate 環境下で使用する場合の問題 [#f81ce552]
AMT-VME ボードは、チャンネル単価が約5000円とこの手のモジ...
そのため、うちの研究室でも多数購入して使用しています。
通常の使用ではあまり顕著ではありませんが、common stop モ...
原因の理解と対策のため、AMT chip の制作者である新井氏相談...
また、DSPプログラムの開発環境およびフラッシュメモリにプロ...
実験データでのTDC分布及び、プログラムの解析の結果分かった...
** 内容 [#n058280d]
- 現象
-- [[NKS2実験での測定条件>#y1871935]]
-- [[TDC 分布>#v9c3467f]]
- 対策
-- [[ボード制御プログラムの改造>#v0421b4b]]
-- [[パラメータの設定方法>#ha6a8c16]]
-- [[ビームテストの結果>#m5ee566a]]
** 現象 [#zcb3b835]
*** NKS2実験での測定条件 [#y1871935]
我々は、NKS2実験でドリフトチェンバーの時間測定のために AM...
NKS2 実験は標識化実光子ビームを用いたハドロン物理の研究を...
実際は、標識化されていないものが約2, 3十倍 あり、標識化ビ...
この環境下で、一台のPCあたり12枚あるいは14枚のAMT-VME ボ...
*** TDC 分布 [#v9c3467f]
#ref(AMT-VME/AMT-VME_TDC_distribution_s.png,right,around)
測定するTDCのレンジは、Module Control parameter の Time r...
VMEメモリと Module Control parameters の対応はマニュアル...
- [[AMT-VME data format and parameters>https://docs.googl...
なお、AMT-VME ボード付属の CD-ROM に複数のマニュアルが入...
Time range count は、12 bit の整数で、1カウント 25 ns の...
これは、AMT chip 内でのカウンターの時間幅がクロックでそろ...
NKS2 実験のシステムでは、チェンバーのシグナルが AMT-VME ...
TDC の時間幅は、クロックを PLL で 1/32 にしたものを使用し...
つまり、TDC 1 ch = 25/32 = 0.78125 ns の時間幅を持ってい...
測定されたデータを見てみると、0x10000辺りから 0x1FFFF ま...
結論からいうと、これは common stop が入った後も AMT chip ...
#clear
#ref(AMT-VME/AMT_data_flow_s.png,right,around)
AMT-VME ボードでは、入力 64 ch を 三つのAMT chip で請け負...
ボード上の DSP プログラムは、四つの AMT chip のステータス...
右図(大きな図へのリンクは''[[こちら>http://lambda.phys.t...
AMT chip 内での時間のカウンターは 12bit の coarse counte...
一方、DSPの内部では、32bit の整数で処理をした後 20 bit の...
カウンターのウインドウの位置により、17 bit のマイナスの値...
イベント・マッチングと count offset, time window が commo...
- [[Event Rejection and Time Window on AMT-VME>AMT-VME/Ev...
#ref(Block_Diagram_of_the_AMT-3_s.png,right,around)
Common stop のシグナルは、AMT3 に入ります。
同時に CPLD に入り内部でクロックと同期した後、各 AMT chip...
以下、Trigger mode で AMT-VME ボードを使用しているとしま...
AMT chip は、trigger にシグナルが入力されると、それまで ...
右に示したのは、AMT-3 User's Manual の p.6 にある、AMT ch...
(大きな図は、''[[こちらのリンク>http://lambda.phys.tohok...
チップひとつ当たり 24 ch の入力がありますが、それぞれのチ...
その情報が、Level 1 buffer (256 words) に送られ、Trigger ...
Matching に関するパラメータは、mask_window, search_window...
この三つの変数は AMT chip の CSR レジスタで変更可能ですが...
#clear
値はそれぞれ、
CSR1: mask_window = 0 (AMT0-3)
CSR2: search_window =2038(AMT0-2), 2056(AMT3)
CSR3: matching_window = 2030(AMT0-2), 2048(AMT3)
に固定されています。
この matching_window は、trigger timing のカウンターに対...
trigger timing のカウンターは、coarse counter に対して、 ...
Common stop mode で使用する場合に、bounch_count_offset は...
NKS2実験では、Time range count は約 1 μs ですので、そ...
つまり、common stop から約 50 μs も後の方にタイム・ウ...
これが原因となり、非常に高レートの環境下ではマイナス時刻...
** 対策 [#tbbd0316]
*** ボード制御プログラムの改造 [#v0421b4b]
AMT-VME ボード上では、DSPとCPLDの二種類のプログラム可能な...
CPLDの方は、DSPからのシグナルをクロックに同期させたあとに...
マイナスのTDCの値が出ないようにするために、以下の三つのこ...
最終的に採用したのは三番目のものです。
+ DSP プログラムの改造(1)
-- マイナスのTDCに値に相当するデータが出たら捨てるように ...
-- 値は出なくなったが、AMT から出てくるデータ量は変わらな...
--- DSP で 1 hit 処理するのに約 5 μs かかる。
-- この方法は得にならないのでボツ。
+ Common stop が入ったあと AMT chip を止め、測定を行わな...
-- AMT chip の Measurement Start/Stop は、DSP プログラム...
-- しかし、CPLDのプログラムを見てみると CNTR に Stop が設...
-- 今回は、DSP プログラムの書き換えツールのみを借りており...
+ DSP プログラムの改造(2)
-- DSP プログラムは、パラメータ設定モードと測定モードを交...
-- Time window に関連するパラメータをVME 側から設定できる...
-- Time window を調整することで、Trigger matching により ...
--- Trigger matching にかかる時間は、1 hit あたり、1 Cloc...
DSP用のプログラムは複数のファイルから構成されていますが、...
追加部分は
429: unsigned int *mask_win, *search_win, *match_win;
439: mask_win = (unsigned int*)0x8f91; // mask_...
440: search_win = (unsigned int*)0x8f93; // searc...
441: match_win = (unsigned int*)0x8f95; // match...
501: // Tohoku Univ. version, added by M.Kaneta
502: if ( (uiRunStatus&0x0200)==0x0200 ) {
503: for (u=0;u<3;u++) {
504: amtcsr_init[u][1] = 0x0fff&(*mask_win); ...
505: amtcsr_init[u][2] = 0x0fff&(*search_win); ...
506: amtcsr_init[u][3] = 0x0fff&(*match_win); ...
507: }
508: }
になります。
なお、各行の最初の数字と:は行番号を示していて、実際のコー...
プログラム中の uiRunStatus という変数は、アムスク制作の U...
マニュアルの記述では、Bit0 - Bit7, Bit28 - Bit30 だけが使...
(''注意! マニュアルには記述がありませんが、Bit8 にフラ...
オリジナルのプログラムでは使われていない Bit9 が 1 の場合...
504から506行目で、配列変数 amtcsr_init に値を代入していま...
この変数は、AMT chip の CSRレジスタの値を設定するために使...
一つ目の配列の添え字は AMT chip の番号、二つ目のものは CS...
(CSRレジスタについては、"''[[AMT2&3 User's Manual (V0.34,...
Module Control Parameters 等の AMT-VMEボードに関連する変...
*** パラメータの設定方法 [#ha6a8c16]
NKS2実験では、SBS Technologies (Bit3) 社製 PCI-VME アダプ...
デバイスドライバ及びVMEデバイスへアクセスするためのライブ...
ドライバとライブラリの関数の詳しい使用方法は以下のリンク...
- [[榎本三四郎氏のページ>http://www.awa.tohoku.ac.jp/~san...
-- [[vmedrvのページ>http://www.awa.tohoku.ac.jp/~sanshiro...
-- [[vmeslibのページ>http://www.awa.tohoku.ac.jp/~sanshir...
AMT-VMEボードへのパラメータの設定方法は、ソフトにより異な...
以下に、NKS2実験で用いているDAQプログラムの一部を抜粋・省...
AMT-VMEボードは5枚使用する場合の例で、それぞれのVMEメモ...
// 変数定義等
#include <vmeslib.h>
#define AMT_ACCESS_MODE VME_A24D32 // アドレス幅 24b...
#define AMT_TRANFER_MODE VME_NORMAL // 標準モード (Pr...
#define AMT_CTR_ADDRESS 0x071f00 // VME_BASE (0x06...
#define AMT_DAT_ADDRESS 0x072000 // VME_BASE (0x06...
#define AMT1 0x100000 // VMEメモリマップの先頭のアド...
#define AMT2 0x200000 // ボード上のディップスイッチ(S...
#define AMT3 0x300000 //
#define AMT4 0x400000 //
#define AMT5 0x500000 //
#define AMT1ID 1
#define AMT2ID 2
#define AMT3ID 3
#define AMT4ID 4
#define AMT5ID 5
static int AMTList[] = {
AMT1, AMT2, AMT3, AMT4, AMT5
};
static int AMTIDList[] = {
AMT1ID, AMT2ID, AMT3ID, AMT4ID, AMT5ID
};
static const int nAMT = sizeof(AMTList)/sizeof(int);
const int* dat_base[30];
int* ctr_base[30];
#define SIZE 0x100 // マッピングする領域...
#define DAT_SIZE 0xc000 // バッファ一つ分のサ...
// 0x3000 / NUM_PART...
#define NUM_PART 0x4 // number of patition...
#define TIME_RANGE 0x25 // 37 = 925 ns (TDC c...
VMEMAP* amt_ctr_map[30]; // VMEMAP は vmeslib で定義...
VMEMAP* amt_dat_map[30]; //
// Module Control Parameters の ctr_base[]に対するポイン...
// ここでは、long で定義されていますが、int でかまわない
// ctr_base[] の型が int なので、0x01 のオフセットは 4 b...
const long ePcount = 0x00;
const long eRunStatus = 0x01; // Run Status
const long eTimeRange = 0x02; // TDCの最大値の設定
const long eModuleID = 0x03; // モジュールID
const long eCHenable1 = 0x04; // チャンネルマスク
const long eCHenable2 = 0x05; // チャンネルマスク
const long eNumPartition = 0x06; // 複数バッファで使用...
const long eIcount = 0x07; //
const long eMaskWindow = 0x08; // 新たに設定, mask_w...
const long eSearchWindow = 0x09; // 新たに設定, search...
const long eMatchWindow = 0x0a; // 新たに設定, match_...
const long eEchoPoint = 0x38; //
const long eAMTStatus = 0x39; //
const long eScount = 0x3a; //
// VMEメモリのマッピング
for(i=0; i<nAMT; i++){
// コントロール・アドレスのマッピング
// マッピングに失敗した場合は、エラー出力にメッセージ...
if((amt_ctr_map[i] =
vme_mapopen(AMT_ACCESS_MODE,AMTList[i]+AMT_CTR_ADD...
perror("ERROR : AMT-TDC ctr mapopen()");
exit(EXIT_FAILURE);
}
// データ・アドレスのマッピング
// マッピングに失敗した場合は、エラー出力にメッセージ...
if((amt_dat_map[i] =
vme_mapopen(AMT_ACCESS_MODE,AMTList[i]+AMT_DAT_ADD...
perror("ERROR : AMT-TDC dat mapopen()");
exit(EXIT_FAILURE);
}
// マッピングされた領域の先頭を指すポインタ
ctr_base[i]=vme_mapbase(amt_ctr_map[i]);
dat_base[i]=vme_mapbase(amt_dat_map[i]);
}
上記のプログラムにより、VME メモリ上の Module Control Par...
各ボードに対して以下の様に設定を行います。
for(i=0; i<nAMT; i++){
*( ctr_base[i] + eRunStatus ) = 0x0000;
*( ctr_base[i] + ePcount ) = 0x0000;
*( ctr_base[i] + eIcount ) = 0x0000;
*( ctr_base[i] + eScount ) = 0x0000;
*( ctr_base[i] + eEchoPoint ) = 0x0000;
*( ctr_base[i] + eAMTStatus ) = 0x0000;
*( ctr_base[i] + eTimeRange ) = TIME_RANGE; // Time ra...
*( ctr_base[i] + eModuleID ) = AMTIDList[i];
*( ctr_base[i] + eCHenable1 ) = 0xffffffff; // ch. 0-3...
*( ctr_base[i] + eCHenable2 ) = 0xffffffff; // ch.32-6...
*( ctr_base[i] + eNumPartition ) = NUM_PART;
// Time windows are default values
//long run_status = 0x0006; // 0000 0000 0000 0110 r...
//long run_status = 0x000e; // 0000 0000 0000 1110 r...
// Time windows will be changed
long run_status = 0x0206; // 0000 0010 0000 0110 r...
//long run_status = 0x020e; // 0000 0010 0000 1110 r...
// || |||| |||
// || |||| ||+---- 1...
// || |||| |+----- 1...
// || |||| |
// || |||+-+------ 0...
// || |||
// || |++--------- 0...
// || +----------- 0...
// |+------------- 0...
// +-------------- 1...
*( ctr_base[i] + eRunStatus ) = run_status;
*( ctr_base[i] + ePcount ) = 0x01;
*( ctr_base[i] + eMaskWindow ) = 0; /...
*( ctr_base[i] + eSearchWindow ) = TIME_RANGE + 8; /...
*( ctr_base[i] + eMatchWindow ) = TIME_RANGE; /...
}
// Run Status bit information (original)
// 31 |30-28|27-8| 7 | 6-5 | 4-3 | ...
//-----+-----+----+--------+--------+----------------+--...
// not |width|not |0:Trig |subtract|edge detection |0:...
// used| |used|1:Normal|offset |0:rising |1:...
// | | | | |1:rising&falling| ...
// | | | | |2:falling | ...
// | | | | |3:rising&width | ...
Run Status の 各 bit の意味については、「''[[スプレッド・...
この中で、Common Stop モードでの 測定領域に関するパラメー...
*( ctr_base[i] + eTimeRange ) = TIME_RANGE; /...
*( ctr_base[i] + eMaskWindow ) = 0; /...
*( ctr_base[i] + eSearchWindow ) = TIME_RANGE + 8; /...
*( ctr_base[i] + eMatchWindow ) = TIME_RANGE; /...
の四行です。
なお、Time Window に関するパラメータの元々の値は、DSPプロ...
mask_window = 0
search_window = 2038
match_window = 2030
に設定されています。
TIME_RANGE は、1 count = 25 ns の幅を持つ(クロックの幅と...
このパラメータは、AMT chip のCSR4(reject_count_offset)と ...
CSR4 (reject_count_offset) = 0xFFF - (0x08 + TIME_RANGE)
CSR6 (bunch_count_offset) = 0xFFF - (0x04 + TIME_RANGE)
の値になるようにDSPプログラム内で設定されています。
AMT chip のマニュアルにある例では、この二つのオフセットは...
これは、trigger timing が AMT chip へのヒット入力よりも先...
AMT-VME ボードの common stop mode の場合は、common stop ...
Event matching を行う trigger がヒットより後に来ますので...
そのため、12bit のマイナスになるように 0xFFF から TIME_RA...
また、それぞれ 0x08, 0x04 の さらなるオフセットがあります。
安全のため少しずらしてあるのではと想像しますが、元々の開...
AMT-VME ボード上での動作としては、TIME_RANGE よりも過去の...
つまり、この値より過去のヒットはデータとして出てきません。
mask_window は、time window に関係するパラメータなので、...
元々の初期値はゼロなので、私が使用する際はゼロに設定して...
Trigger signal がAMTに入った時点から、search_window に入...
この条件に充たさないヒットは捨てられることになり、common ...
*** ビームテストの結果 [#m5ee566a]
2010年4月26-28日に、東北大学電子光理学研究センター(旧核...
本実験のセットアップで time window のパラメータを変えた場...
パラメータは、TIME_RANGE = 0x25 = 37 に固定し
- オリジナル
-- mask_window = 0
-- search_window = 2038
-- match_window = 2030
- Plan A
-- mask_window = 0
-- search_window = 2038
-- match_window = TIME_RANGE
- Plan B
-- mask_window = 0
-- search_window = TIME_RANGE + 8
-- match_window = TIME_RANGE
の三種類の組み合わせをテストしました。
Plan A は search_window はオリジナルのものと同じだが、mat...
つまり、マイナスの値が出ないようにしたものです。
Plan B は、search_window も狭くしたものですが、オリジナル...
Trigger が AMT chip に入ったときに、search_window に入っ...
それらは、次の trigger が入ったときには event rejection ...
Plan A と Plan B の違いは、search_window より後にあったヒ...
各パラメータの組み合わせに対して、加速器の(電子の)ビー...
加速のビームカレントが完全に安定しているわけではないので...
下に、結果の図を示しました。
#ref(daq_efficiency.png,center)
最初の四つの図は、Trigger Accepted(1行目), DAQ efficie...
(なお、光子ビームレートは、標識化出来ている光子について...
左下の図はビームレートに対する Trigger Requested のレート...
図中オープン・シンボル(黒)で書かれたものが、time window...
赤と青がtime windowを変えたものです。
DAQ効率が向上していることが、見て取れます。
event size と TDC 分布がどのように変わったかについては、[...
を見て下さい。
終了行:
* AMT-VME [#qff10614]
Atlas Muon TDC として開発されたチップを VMEのボードとして...
- 制作者、KEKの[[新井氏のページ>http://research.kek.jp/pe...
-- [[AMT chip のページ>http://research.kek.jp/group/atlas...
--- [[AMT-3 chip のマニュアル>http://research.kek.jp/grou...
-- [[AMT-VMEのページ>http://research.kek.jp/group/atlas/t...
- 個人的にまとめた情報
-- [[AMT-VME data format and parameters>https://docs.goog...
-- NKS2実験でのDAQプログラムとDSPプログラムのシークエンス...
* High rate 環境下で使用する場合の問題 [#f81ce552]
AMT-VME ボードは、チャンネル単価が約5000円とこの手のモジ...
そのため、うちの研究室でも多数購入して使用しています。
通常の使用ではあまり顕著ではありませんが、common stop モ...
原因の理解と対策のため、AMT chip の制作者である新井氏相談...
また、DSPプログラムの開発環境およびフラッシュメモリにプロ...
実験データでのTDC分布及び、プログラムの解析の結果分かった...
** 内容 [#n058280d]
- 現象
-- [[NKS2実験での測定条件>#y1871935]]
-- [[TDC 分布>#v9c3467f]]
- 対策
-- [[ボード制御プログラムの改造>#v0421b4b]]
-- [[パラメータの設定方法>#ha6a8c16]]
-- [[ビームテストの結果>#m5ee566a]]
** 現象 [#zcb3b835]
*** NKS2実験での測定条件 [#y1871935]
我々は、NKS2実験でドリフトチェンバーの時間測定のために AM...
NKS2 実験は標識化実光子ビームを用いたハドロン物理の研究を...
実際は、標識化されていないものが約2, 3十倍 あり、標識化ビ...
この環境下で、一台のPCあたり12枚あるいは14枚のAMT-VME ボ...
*** TDC 分布 [#v9c3467f]
#ref(AMT-VME/AMT-VME_TDC_distribution_s.png,right,around)
測定するTDCのレンジは、Module Control parameter の Time r...
VMEメモリと Module Control parameters の対応はマニュアル...
- [[AMT-VME data format and parameters>https://docs.googl...
なお、AMT-VME ボード付属の CD-ROM に複数のマニュアルが入...
Time range count は、12 bit の整数で、1カウント 25 ns の...
これは、AMT chip 内でのカウンターの時間幅がクロックでそろ...
NKS2 実験のシステムでは、チェンバーのシグナルが AMT-VME ...
TDC の時間幅は、クロックを PLL で 1/32 にしたものを使用し...
つまり、TDC 1 ch = 25/32 = 0.78125 ns の時間幅を持ってい...
測定されたデータを見てみると、0x10000辺りから 0x1FFFF ま...
結論からいうと、これは common stop が入った後も AMT chip ...
#clear
#ref(AMT-VME/AMT_data_flow_s.png,right,around)
AMT-VME ボードでは、入力 64 ch を 三つのAMT chip で請け負...
ボード上の DSP プログラムは、四つの AMT chip のステータス...
右図(大きな図へのリンクは''[[こちら>http://lambda.phys.t...
AMT chip 内での時間のカウンターは 12bit の coarse counte...
一方、DSPの内部では、32bit の整数で処理をした後 20 bit の...
カウンターのウインドウの位置により、17 bit のマイナスの値...
イベント・マッチングと count offset, time window が commo...
- [[Event Rejection and Time Window on AMT-VME>AMT-VME/Ev...
#ref(Block_Diagram_of_the_AMT-3_s.png,right,around)
Common stop のシグナルは、AMT3 に入ります。
同時に CPLD に入り内部でクロックと同期した後、各 AMT chip...
以下、Trigger mode で AMT-VME ボードを使用しているとしま...
AMT chip は、trigger にシグナルが入力されると、それまで ...
右に示したのは、AMT-3 User's Manual の p.6 にある、AMT ch...
(大きな図は、''[[こちらのリンク>http://lambda.phys.tohok...
チップひとつ当たり 24 ch の入力がありますが、それぞれのチ...
その情報が、Level 1 buffer (256 words) に送られ、Trigger ...
Matching に関するパラメータは、mask_window, search_window...
この三つの変数は AMT chip の CSR レジスタで変更可能ですが...
#clear
値はそれぞれ、
CSR1: mask_window = 0 (AMT0-3)
CSR2: search_window =2038(AMT0-2), 2056(AMT3)
CSR3: matching_window = 2030(AMT0-2), 2048(AMT3)
に固定されています。
この matching_window は、trigger timing のカウンターに対...
trigger timing のカウンターは、coarse counter に対して、 ...
Common stop mode で使用する場合に、bounch_count_offset は...
NKS2実験では、Time range count は約 1 μs ですので、そ...
つまり、common stop から約 50 μs も後の方にタイム・ウ...
これが原因となり、非常に高レートの環境下ではマイナス時刻...
** 対策 [#tbbd0316]
*** ボード制御プログラムの改造 [#v0421b4b]
AMT-VME ボード上では、DSPとCPLDの二種類のプログラム可能な...
CPLDの方は、DSPからのシグナルをクロックに同期させたあとに...
マイナスのTDCの値が出ないようにするために、以下の三つのこ...
最終的に採用したのは三番目のものです。
+ DSP プログラムの改造(1)
-- マイナスのTDCに値に相当するデータが出たら捨てるように ...
-- 値は出なくなったが、AMT から出てくるデータ量は変わらな...
--- DSP で 1 hit 処理するのに約 5 μs かかる。
-- この方法は得にならないのでボツ。
+ Common stop が入ったあと AMT chip を止め、測定を行わな...
-- AMT chip の Measurement Start/Stop は、DSP プログラム...
-- しかし、CPLDのプログラムを見てみると CNTR に Stop が設...
-- 今回は、DSP プログラムの書き換えツールのみを借りており...
+ DSP プログラムの改造(2)
-- DSP プログラムは、パラメータ設定モードと測定モードを交...
-- Time window に関連するパラメータをVME 側から設定できる...
-- Time window を調整することで、Trigger matching により ...
--- Trigger matching にかかる時間は、1 hit あたり、1 Cloc...
DSP用のプログラムは複数のファイルから構成されていますが、...
追加部分は
429: unsigned int *mask_win, *search_win, *match_win;
439: mask_win = (unsigned int*)0x8f91; // mask_...
440: search_win = (unsigned int*)0x8f93; // searc...
441: match_win = (unsigned int*)0x8f95; // match...
501: // Tohoku Univ. version, added by M.Kaneta
502: if ( (uiRunStatus&0x0200)==0x0200 ) {
503: for (u=0;u<3;u++) {
504: amtcsr_init[u][1] = 0x0fff&(*mask_win); ...
505: amtcsr_init[u][2] = 0x0fff&(*search_win); ...
506: amtcsr_init[u][3] = 0x0fff&(*match_win); ...
507: }
508: }
になります。
なお、各行の最初の数字と:は行番号を示していて、実際のコー...
プログラム中の uiRunStatus という変数は、アムスク制作の U...
マニュアルの記述では、Bit0 - Bit7, Bit28 - Bit30 だけが使...
(''注意! マニュアルには記述がありませんが、Bit8 にフラ...
オリジナルのプログラムでは使われていない Bit9 が 1 の場合...
504から506行目で、配列変数 amtcsr_init に値を代入していま...
この変数は、AMT chip の CSRレジスタの値を設定するために使...
一つ目の配列の添え字は AMT chip の番号、二つ目のものは CS...
(CSRレジスタについては、"''[[AMT2&3 User's Manual (V0.34,...
Module Control Parameters 等の AMT-VMEボードに関連する変...
*** パラメータの設定方法 [#ha6a8c16]
NKS2実験では、SBS Technologies (Bit3) 社製 PCI-VME アダプ...
デバイスドライバ及びVMEデバイスへアクセスするためのライブ...
ドライバとライブラリの関数の詳しい使用方法は以下のリンク...
- [[榎本三四郎氏のページ>http://www.awa.tohoku.ac.jp/~san...
-- [[vmedrvのページ>http://www.awa.tohoku.ac.jp/~sanshiro...
-- [[vmeslibのページ>http://www.awa.tohoku.ac.jp/~sanshir...
AMT-VMEボードへのパラメータの設定方法は、ソフトにより異な...
以下に、NKS2実験で用いているDAQプログラムの一部を抜粋・省...
AMT-VMEボードは5枚使用する場合の例で、それぞれのVMEメモ...
// 変数定義等
#include <vmeslib.h>
#define AMT_ACCESS_MODE VME_A24D32 // アドレス幅 24b...
#define AMT_TRANFER_MODE VME_NORMAL // 標準モード (Pr...
#define AMT_CTR_ADDRESS 0x071f00 // VME_BASE (0x06...
#define AMT_DAT_ADDRESS 0x072000 // VME_BASE (0x06...
#define AMT1 0x100000 // VMEメモリマップの先頭のアド...
#define AMT2 0x200000 // ボード上のディップスイッチ(S...
#define AMT3 0x300000 //
#define AMT4 0x400000 //
#define AMT5 0x500000 //
#define AMT1ID 1
#define AMT2ID 2
#define AMT3ID 3
#define AMT4ID 4
#define AMT5ID 5
static int AMTList[] = {
AMT1, AMT2, AMT3, AMT4, AMT5
};
static int AMTIDList[] = {
AMT1ID, AMT2ID, AMT3ID, AMT4ID, AMT5ID
};
static const int nAMT = sizeof(AMTList)/sizeof(int);
const int* dat_base[30];
int* ctr_base[30];
#define SIZE 0x100 // マッピングする領域...
#define DAT_SIZE 0xc000 // バッファ一つ分のサ...
// 0x3000 / NUM_PART...
#define NUM_PART 0x4 // number of patition...
#define TIME_RANGE 0x25 // 37 = 925 ns (TDC c...
VMEMAP* amt_ctr_map[30]; // VMEMAP は vmeslib で定義...
VMEMAP* amt_dat_map[30]; //
// Module Control Parameters の ctr_base[]に対するポイン...
// ここでは、long で定義されていますが、int でかまわない
// ctr_base[] の型が int なので、0x01 のオフセットは 4 b...
const long ePcount = 0x00;
const long eRunStatus = 0x01; // Run Status
const long eTimeRange = 0x02; // TDCの最大値の設定
const long eModuleID = 0x03; // モジュールID
const long eCHenable1 = 0x04; // チャンネルマスク
const long eCHenable2 = 0x05; // チャンネルマスク
const long eNumPartition = 0x06; // 複数バッファで使用...
const long eIcount = 0x07; //
const long eMaskWindow = 0x08; // 新たに設定, mask_w...
const long eSearchWindow = 0x09; // 新たに設定, search...
const long eMatchWindow = 0x0a; // 新たに設定, match_...
const long eEchoPoint = 0x38; //
const long eAMTStatus = 0x39; //
const long eScount = 0x3a; //
// VMEメモリのマッピング
for(i=0; i<nAMT; i++){
// コントロール・アドレスのマッピング
// マッピングに失敗した場合は、エラー出力にメッセージ...
if((amt_ctr_map[i] =
vme_mapopen(AMT_ACCESS_MODE,AMTList[i]+AMT_CTR_ADD...
perror("ERROR : AMT-TDC ctr mapopen()");
exit(EXIT_FAILURE);
}
// データ・アドレスのマッピング
// マッピングに失敗した場合は、エラー出力にメッセージ...
if((amt_dat_map[i] =
vme_mapopen(AMT_ACCESS_MODE,AMTList[i]+AMT_DAT_ADD...
perror("ERROR : AMT-TDC dat mapopen()");
exit(EXIT_FAILURE);
}
// マッピングされた領域の先頭を指すポインタ
ctr_base[i]=vme_mapbase(amt_ctr_map[i]);
dat_base[i]=vme_mapbase(amt_dat_map[i]);
}
上記のプログラムにより、VME メモリ上の Module Control Par...
各ボードに対して以下の様に設定を行います。
for(i=0; i<nAMT; i++){
*( ctr_base[i] + eRunStatus ) = 0x0000;
*( ctr_base[i] + ePcount ) = 0x0000;
*( ctr_base[i] + eIcount ) = 0x0000;
*( ctr_base[i] + eScount ) = 0x0000;
*( ctr_base[i] + eEchoPoint ) = 0x0000;
*( ctr_base[i] + eAMTStatus ) = 0x0000;
*( ctr_base[i] + eTimeRange ) = TIME_RANGE; // Time ra...
*( ctr_base[i] + eModuleID ) = AMTIDList[i];
*( ctr_base[i] + eCHenable1 ) = 0xffffffff; // ch. 0-3...
*( ctr_base[i] + eCHenable2 ) = 0xffffffff; // ch.32-6...
*( ctr_base[i] + eNumPartition ) = NUM_PART;
// Time windows are default values
//long run_status = 0x0006; // 0000 0000 0000 0110 r...
//long run_status = 0x000e; // 0000 0000 0000 1110 r...
// Time windows will be changed
long run_status = 0x0206; // 0000 0010 0000 0110 r...
//long run_status = 0x020e; // 0000 0010 0000 1110 r...
// || |||| |||
// || |||| ||+---- 1...
// || |||| |+----- 1...
// || |||| |
// || |||+-+------ 0...
// || |||
// || |++--------- 0...
// || +----------- 0...
// |+------------- 0...
// +-------------- 1...
*( ctr_base[i] + eRunStatus ) = run_status;
*( ctr_base[i] + ePcount ) = 0x01;
*( ctr_base[i] + eMaskWindow ) = 0; /...
*( ctr_base[i] + eSearchWindow ) = TIME_RANGE + 8; /...
*( ctr_base[i] + eMatchWindow ) = TIME_RANGE; /...
}
// Run Status bit information (original)
// 31 |30-28|27-8| 7 | 6-5 | 4-3 | ...
//-----+-----+----+--------+--------+----------------+--...
// not |width|not |0:Trig |subtract|edge detection |0:...
// used| |used|1:Normal|offset |0:rising |1:...
// | | | | |1:rising&falling| ...
// | | | | |2:falling | ...
// | | | | |3:rising&width | ...
Run Status の 各 bit の意味については、「''[[スプレッド・...
この中で、Common Stop モードでの 測定領域に関するパラメー...
*( ctr_base[i] + eTimeRange ) = TIME_RANGE; /...
*( ctr_base[i] + eMaskWindow ) = 0; /...
*( ctr_base[i] + eSearchWindow ) = TIME_RANGE + 8; /...
*( ctr_base[i] + eMatchWindow ) = TIME_RANGE; /...
の四行です。
なお、Time Window に関するパラメータの元々の値は、DSPプロ...
mask_window = 0
search_window = 2038
match_window = 2030
に設定されています。
TIME_RANGE は、1 count = 25 ns の幅を持つ(クロックの幅と...
このパラメータは、AMT chip のCSR4(reject_count_offset)と ...
CSR4 (reject_count_offset) = 0xFFF - (0x08 + TIME_RANGE)
CSR6 (bunch_count_offset) = 0xFFF - (0x04 + TIME_RANGE)
の値になるようにDSPプログラム内で設定されています。
AMT chip のマニュアルにある例では、この二つのオフセットは...
これは、trigger timing が AMT chip へのヒット入力よりも先...
AMT-VME ボードの common stop mode の場合は、common stop ...
Event matching を行う trigger がヒットより後に来ますので...
そのため、12bit のマイナスになるように 0xFFF から TIME_RA...
また、それぞれ 0x08, 0x04 の さらなるオフセットがあります。
安全のため少しずらしてあるのではと想像しますが、元々の開...
AMT-VME ボード上での動作としては、TIME_RANGE よりも過去の...
つまり、この値より過去のヒットはデータとして出てきません。
mask_window は、time window に関係するパラメータなので、...
元々の初期値はゼロなので、私が使用する際はゼロに設定して...
Trigger signal がAMTに入った時点から、search_window に入...
この条件に充たさないヒットは捨てられることになり、common ...
*** ビームテストの結果 [#m5ee566a]
2010年4月26-28日に、東北大学電子光理学研究センター(旧核...
本実験のセットアップで time window のパラメータを変えた場...
パラメータは、TIME_RANGE = 0x25 = 37 に固定し
- オリジナル
-- mask_window = 0
-- search_window = 2038
-- match_window = 2030
- Plan A
-- mask_window = 0
-- search_window = 2038
-- match_window = TIME_RANGE
- Plan B
-- mask_window = 0
-- search_window = TIME_RANGE + 8
-- match_window = TIME_RANGE
の三種類の組み合わせをテストしました。
Plan A は search_window はオリジナルのものと同じだが、mat...
つまり、マイナスの値が出ないようにしたものです。
Plan B は、search_window も狭くしたものですが、オリジナル...
Trigger が AMT chip に入ったときに、search_window に入っ...
それらは、次の trigger が入ったときには event rejection ...
Plan A と Plan B の違いは、search_window より後にあったヒ...
各パラメータの組み合わせに対して、加速器の(電子の)ビー...
加速のビームカレントが完全に安定しているわけではないので...
下に、結果の図を示しました。
#ref(daq_efficiency.png,center)
最初の四つの図は、Trigger Accepted(1行目), DAQ efficie...
(なお、光子ビームレートは、標識化出来ている光子について...
左下の図はビームレートに対する Trigger Requested のレート...
図中オープン・シンボル(黒)で書かれたものが、time window...
赤と青がtime windowを変えたものです。
DAQ効率が向上していることが、見て取れます。
event size と TDC 分布がどのように変わったかについては、[...
を見て下さい。
ページ名: