内部レジスタ
Cosmo-Zには32bit幅の多くの内部レジスタがあります。
これらのレジスタを操作することで、各種の計測モード等を設定します。
Cosmo-Zのコンソールから書くときには、
/cosmoz.elf regwr アドレス データ
とします。
コンソールでレジスタの値を読み出すときには
/cosmoz.elf regrd アドレス
または
/cosmoz.elf dump
とします。
アドレスおよびデータは、数字のみで書けば10進数として解釈されます。0xを付けて書くと16進数として解釈されます。
例 /cosmoz.elf regwr 0x07 0x01
内蔵レジスタ一覧
全体コントロールレジスタ
0x00 ireg0 (R)
古い機能レジスタ。過去に使われていたが、現在は使用されていない。将来の拡張用に予約。
0x01 FPGA_VERSION (R)
FPGAのバージョンが8桁の16進数で返される。例) "15061501"
ADC設定
0x02 SPI読み出し
ADCチップの制御に使われる。ユーザは操作してはならない。
0x03 SPI状態
ADCチップの制御に使われる。ユーザは操作してはならない。
0x04 キャリブレーション状態(ch0~ch15)
ADCのリンクアップが正常が行われたかどうかを示す。
bit0はCH0のLow側、bit1はCH0のHigh側。
bit2はCH1のLow側、bit3はCH1のHigh側。・・
0x05 キャリブレーション状態(ch16~ch31)
前のレジスタと同様にCH16~CH31のリンクアップ状態を示す。
48bitタイムスタンプ
0x06 48bitタイムスタンプ操作
このレジスタを読み出すと、キャプチャされた48bitタイムスタンプが16bitずつ読み出せるようになっている。48bitタイムスタンプは、FPGAが起動してからの経過時間を10ns単位で計っている。このカウンタは48bitなので、約34日でオーバーフローする。
bit0 このビットが0→1に変わったときに、48bitタイムスタンプがキャプチャされる
bit2..1 00:下位16bitが読み出される 01:中位16bitが読み出される 10:上位16bitが読み出される
したがって、読み出すときにはbit0に0を書き込んだあと、1にする。
それから、bit2..1に00を書き込んで、このレジスタを読み出す。bit2..1に01を書き込んで、このレジスタを読み出す。bit2..1に11を書き込んで、このレジスタを読み出す。
タイムスタンプは自動的にカウントアップするので、ユーザは変更できない。
割り込み制御
0x07 割り込みコントロール
bit0(RW) 割り込み許可ビット
bit1(RW) 割り込み発生フラグ
bit31..2 予約済み
キャプチャ(データロギング)が終了するとbit1が自動的にHになる。bit0とbit1のANDがCPUの割り込みラインにつながっている。したがって、割り込みを発生させたい場合は、このレジスタに0x00000001を書くこと。
ADC設定
0x08 ADCコマンド (W)
bit31 ADCの再キャリブレーション(通常動作時は0にする)
bit30 テストモード(通常動作時は0にする)
bit29 0:旧ボード(シリアル番号001~005) 1:新ボード(シリアル番号006以降)
bit26:24 ADCボードの枚数 (1~4を設定。ハードウェア的な意味はない)
bit23:16 ADC周波数の分周比
bit12 表示形式 0:10進 1:16進(ハードウェア的な意味はない)
bit11 ADC周波数変更開始
bit10:8 ADC周波数設定
000:80MHz 001:100MHz 010:125MHz
bit1 テストパターン出力(通常動作時は0にする)
レジスタ9 読み書きチャネル
bit5:0 次の各レジスタが、どのADCチャネルのものを読み出し、あるいは操作するかを指定する。
ADC生データ、ゲイン補正とオフセット、チャネル遅延、トリガレジスタ、トリガコントロール、ペデスタルレベル、パルスカウント、パルスハイト
レジスタ10 ADC生データ
ADCの変換結果がそのまま読み出される。読み出したいチャネルはレジスタ0x09で選択する。
レジスタ11 ADCチャネル選択
bit7:0 SPIでレジスタを操作したいADCを選択する
bit0 '1'ならばADC1を操作する
bit1 '1'ならばADC2を操作する
bit2 '1'ならばADC3を操作する
bit3 '1'ならばADC4を操作する
bit4 '1'ならばADC5を操作する
bit5 '1'ならばADC6を操作する
bit6 '1'ならばADC7を操作する
bit7 '1'ならばADC8を操作する
bit9:8 どのADCチャネルを取得するか
"00" ADC CH1~CH8を取得する
"01" ADC CH9~CH16を取得する
"10" ADC CH17~CH24を取得する
"11" ADC CH25~CH32を取得する
レジスタ12 ゲイン補正とオフセット
bit31:16 ADC結果に乗じる。8.8bit固定小数点形式。0x1000は16倍を示す。通常は0x0100(ゲイン1倍)を設定する。
bit15:0 ADC結果に加算するオフセット。符号付き16bitの整数。通常は0x0000を設定する。
レジスタ13 チャネル遅延
bit9:0 各ADCのチャネルのデータを0~1023個分遅らせることができる。通常は使わないので0にする。
トリガ設定
レジスタ14 トリガレジスタ
bit19:0 トリガレジスタ rdwrchレジスタ(レジスタ9)で選択する
bit[ADC_BITS-1:0] トリガ値
bit18:16 トリガのタイプ
- 000 => 常にトリガ状態
- 001 => トリガ値以上でトリガ状態(upper)
- 010 => トリガ値以下でトリガ状態(lower)
- 011 => トリガ値を横切ったらトリガ状態(cross)
- 100 => ディスクリ (パルス波形処理回路からのトリガを使用)
- 101 => 規定値を横切って立ち上がったらトリガ状態(rising edge)
- 110 => 規定値を横切って立ち下がったらトリガ状態(fallilng edge)
- 111 => 予約 (常にトリガ状態)
レジスタ15 トリガコントロール
bit1:0 00 ADCX0ではトリガを発生させない
01 ADCX0でレベルトリガを発生
10 ADCX0が0→1になったらトリガ
11 ADCX0が1→0になったらトリガ
bit3:2 00 ADCX1ではトリガを発生させない
01 ADCX1でレベルトリガを発生
10 ADCX1が0→1になったらトリガ
11 ADCX1が1→0になったらトリガ
bit5:4 00 ADCX2ではトリガを発生させない
01 ADCX2でレベルトリガを発生
10 ADCX2が0→1になったらトリガ
11 ADCX2が1→0になったらトリガ
bit7:6 00 ADCX3ではトリガを発生させない
01 ADCX3でレベルトリガを発生
10 ADCX3が0→1になったらトリガ
11 ADCX3が1→0になったらトリガ
bit31 1なら、どれか1つのチャネルがHになるとトリガ状態(ORトリガ)
0なら、すべてのチャネルがHにならないとトリガがかからない(ANDトリガ)
キャプチャ(データロガー)
これらのレジスタは、キャプチャ(データロガー)の機能をコントロールするために用いられる。
Cosmo-Zの計測モードには以下のものがある
- データロガーモード (モード0)
- パルス計測モード (モード1)
- パルス計測モード (モード2)
- マルチチャネルアナライザモード (モード3)
- 長時間データロガーモード (モード4)
- 繰り返し計測モード(モード5)
データロガーモードは、ADCのデータをただひたすら格納していくモードである。
長時間データロガーモードは、
波形測定モードは、ADCのデータにヘッダを付けてパケット化したものを格納していくモードである。低レートモードでは、波形データを含む。高レートモードは波形データを含まずヘッダのみ記録する。
マルチチャネルアナライザモードは、一定の時間間隔でMCAのスペクトラムを出力しつづけるモードである。
長時間データロガーモードは、常に計測はしているが、プレトリガの期間が長いのが特徴である。
繰り返し計測モードは、パルスレーザの実験などで用いる。トリガが入ってからのADCデータを何度も繰り返し測定するモードである。
レジスタ16 キャプチャ長 capture_length
bit29:0 キャプチャするデータ長を30bitで指定する。
データロガーモードのとき、この個数のデータをキャプチャすると、キャプチャは終了する。
波形測定モードではこのレジスタは使用しない。
レジスタ17 キャプチャ・チャネル capture_channel
各ビットが、キャプチャしたいチャネルに対応する。
つまり、bit0が1の場合、CH0をキャプチャする。このようにして、32個のチャネルの任意のチャネルを計測するように指定できる。
レジスタ18 キャプチャアドレス capture_saddr / capture_waddr
書き込みを行うと、キャプチャされたデータが、メモリに格納される先頭アドレスが設定される。通常は、0x20000480を指定する。
読み出しを行うと、最後にキャプチャされたデータの格納されているアドレスが読み出される。
レジスタ19 キャプチャ時間 capture_time
パルス波形測定モードのとき、この時間が経過するとキャプチャを終了する。
1LSBが約0.65ms単位である。(正確には65536*10ns)
レジスタ20 キャプチャコントロール/キャプチャステータス
bit0 このビットが0→1に変わると、キャプチャを開始する。キャプチャ中に0にすると、キャプチャは終了する。
bit1 0の場合、トリガが入るまで実際のキャプチャ動作を保留する。1の場合、トリガに関わらず即座にキャプチャを開始する。
bit2 0の場合、データロガーモードとして動作する。1の場合、波形測定モードとして動作する。
レジスタ21 繰り返し回数 W:max_iteration / R:capture_count
書き込むと、最大繰り返し回数を指定する。(未実装)
読み出すと、現在のキャプチャカウント数が読み出される。
レジスタ22 キャプチャ遅延
パルス波形測定モードでは、プリトリガの量と、キャプチャする全体の長さを指定する。
15:0は、トリガ後の長さ。30:16は、トリガ前の長さ。
31で固定長/可変長のモードを切り替える。
レジスタ23 未使用
放射線パルス測定 (V0.7でアドレス移動)
レジスタ32 ペデスタルレベル
レジスタ33 カウント/秒
レジスタ34 パルスハイト
レジスタ35 MCA設定
bit0 MCAをスタートする
bit1 MCAをリセットする
内蔵XADC (V0.7でアドレス移動)
レジスタ40 温度
レジスタ41 VCCINT
レジスタ42 VCCAUX
レジスタ43 VCCDDRO
GPSインタフェース (V0.7以降で新設)
レジスタ44 GPS時刻秒(秒単位で32bit)
GPSの時刻を秒単位に直し、ソフトウェアでこのレジスタに書き込む。
GPSのパルスが入るたびに、自動的にカウントアップされる。
時刻の基準は任意であるが、UNIX時刻にしておくのが望ましい。
レジスタ45 GPS時刻10ns(10ns単位で32bit)
内蔵100MHzクロックでカウントアップし、GPSのパルスが入ると0にクリアされる。
すなわち、現在のGPS時刻はREG(44) + (double)REG(45)÷(double)REG(46)で取得できる。
レジスタ46 GPS時刻補正
GPSの1秒パルスから次のパルスまでの内部カウンタの値を保持する。
この値が例えば、100001234であった場合、内部クロックはGPSの値に対して12.3ppm進んでいることになる。
レジスタ47 キャプチャ時GPS時刻(秒)
キャプチャトリガが入った時点でのGPS時刻を返す
レジスタ48 キャプチャ時GPS時刻(10ns)
キャプチャトリガが入った時点でのGPS時刻(10ns)を返す
すなわち、キャプチャ時のGPS時刻はREG(47) + (double)REG(48)÷(double)REG(46)で取得できる。
波形整形回路 (オプション)
レジスタ50 波形整形回路ゲイン1
レジスタ51 波形整形回路ゲイン2
レジスタ52 波形整形回路時定数1
レジスタ53 波形整形回路時定数2
レジスタ54 波形整形回路コントロール



