ADCの操作

adcコマンドはADCの操作をします。adcコマンドには様々なサブコマンドが用意されています。サブコマンドを指定しない場合は、adcコマンドは現在のadc値をサンプリングして表示します。

ADC値の表示

root@cszmini:~# /cosmoz.elf adc
CH1: val=8455
CH2: val=8726
CH3: val=8659
CH4: val=9581
CH5: val=2048
CH6: val=2048
CH7: val=2048
CH8: val=2049

 

サブコマンド

val

adc valコマンドは、adcサブコマンドなしで実行した場合と同じです。現在のADCの値をサンプリングして表示します。

root@cszmini:~# /cosmoz.elf adc val
CH1: val=8458
CH2: val=8722
CH3: val=8662
CH4: val=9581
CH5: val=2048
CH6: val=2048
CH7: val=2048
CH8: val=2049

reset

adc resetコマンドは、ADCをリセットします。リセットというのはLVDSによるADCの伝送線路の位相調整を行うもので、計測データにノイズが混ざるような場合や、同期が外れた場合に直すために使います。

root@cszmini:~# /cosmoz.elf adc reset
ADC reset.
reset start

enumerate

adc enumerateコマンドは、接続されているADCを探索し、表示します。

以下はCosmo-Z Miniの場合の例で、1個のADCが発見されています。

root@cszmini:~# /cosmoz.elf adc enumerate
ADC enumerate: 1 ADCs are found.
 0:AD9253(14bit) 125MHz

regdump

adc regdumpコマンドは、ADCのレジスタ(AD9633チップ内部のコントロール・ステータス・レジスタ)の値をダンプして表示します。ADCが複数ある場合は最初の1個のみを表示します。

root@cszmini:~# /cosmoz.elf adc regdump
ADCReg(0x  0) = 18  SPI port configuration
ADCReg(0x  1) = 8F  Chip ID (global)
ADCReg(0x  2) = 63  Chip grade (global)
ADCReg(0x  4) = 0F  Device Index 2
ADCReg(0x  5) = 3F  Device Index 1
ADCReg(0x FF) = 00  Transfer
ADCReg(0x  8) = 00  Power modes (global)
ADCReg(0x  9) = 01  Clock (global)
ADCReg(0x  B) = 00  Clock divide(global)
ADCReg(0x  C) = 00  Enhancement control
ADCReg(0x  D) = 00  Test mode (local except for PN sequence resets)
ADCReg(0x 10) = 00  Offset adjust (local)
ADCReg(0x 14) = 00  Output mode
ADCReg(0x 15) = 20  Output adjust
ADCReg(0x 16) = 03  Output phase
ADCReg(0x 18) = 04  VREF
ADCReg(0x 19) = 80  USER_PATT1_LSB (global)
ADCReg(0x 1A) = 80  USER_PATT1_MSB (global)
ADCReg(0x 1B) = 80  USER_PATT2_LSB (global)
ADCReg(0x 1C) = 80  USER_PATT2_MSB (global)
ADCReg(0x 21) = 30  Serial control (global)
ADCReg(0x 22) = 00  Serial channel status (local)
ADCReg(0x100) = 00  Resolution/ sample rate override
ADCReg(0x101) = 00  User I/O Control 2
ADCReg(0x102) = 00  User I/O Control 3
ADCReg(0x109) = 00  Sync

regwr

adc regwrコマンドはADCレジスタの値を書き換えます。ADC自体に内蔵されたテストパターンの切り替えや、消費電力低減効果の実験などに使用します。

regrd

adc regwrコマンドはADCレジスタの値を読み出します。

test

adc testコマンドは、ADCからのサンプリングデータを使用するか、テスト波形を使用するかを選択します。adc test onで、ADCデータではなくFPGA内で生成したテスト波形が用いられるようになります。adc test offで、再びADCデータが用いられるようになります。

adc testと入力すると、現在の状態を表示します。

root@cszmini:~# /cosmoz.elf adc test
ADC Test mode is OFF.
root@cszmini:~# /cosmoz.elf adc test on
root@cszmini:~# /cosmoz.elf adc test
ADC Test mode is ON.

freq

adc freqコマンドはサンプリング周波数を設定したり、現在の設定を読み出します。

adc freq <周波数>を指定すると、ADCのサンプリングレートをMHz単位で設定できます。有効な値は1,2,4,5,8,10,16,20,25,40,50,80,100,125です。ただし、ADCのサンプリングクロックは80MHz,100MHz,125MHzのいずれかなので、それ以外の値はデシメーションによって作られます。

例えば25MHzの設定はクロック100MHzを4分の1にデシメーションして実現しているので、80MHz版のCosmo-Zではオーバークロックとなることにご注意ください。

root@cszmini:~# /cosmoz.elf adc freq 25
ADC freq set to 25MHz.
reset start

引数の<周波数>を付けない場合は、現在の周波数を表示します。

root@cszmini:~# /cosmoz.elf adc freq
ADC freq is 16MHz.

info

adc infoコマンドは、ADCのサンプリングクロック、デシメーション比、分解能などの詳細な情報を表示します。

root@cszmini:~# /cosmoz.elf adc info
basefreq=100
decimation_ratio=4
sampling_freq_mhz=25.000000
adc_num=2
testmode=1
device_max_freq=125
device_resolution=14
current_resolution=10
device_type
0:AD9253(14bit) 125MHz
1:none
2:none
3:none
4:none
5:none
6:none
7:none

maxch

adc maxchコマンドはADCの最大チャネル数を表示します。

root@cszmini:~# /cosmoz.elf adc maxch
ADC max CH is 8

detect

adc detectコマンドはADCの検出結果をJSON形式で返します。これはCGIインタフェースのために作られたコマンドなのでユーザが使用する必要はありません。

root@cszmini:~# /cosmoz.elf adc detect
{"adcchip":[{"chip":"AD9253(14bit) 125MHz","maxfreq":125},{"chip":"none","maxfreq":125}
,{"chip":"none","maxfreq":125},{"chip":"none","maxfreq":125},{"chip":"none","maxfreq":
125},{"chip":"none","maxfreq":125},{"chip":"none","maxfreq":125},{"chip":"none","max
freq":125}]}

clkphase

adc clkphaseコマンドは、ADCクロックをシステムのベースクロックに対して位相調整します。システムのベースクロックは一定のタイミングで刻んでいますが、ADCのクロックは位相調整が可能です。この機能は等価サンプリングなどを行う場合に考慮するものであって、普通の計測では意識する必要はありません。

DACのクロックはADCのクロックと同期しているため、DACの値がひずんでいる場合に、このコマンドで歪が取れて綺麗になることがあります。

root@cszmini:~# /cosmoz.elf adc clkphase 100
Phase adjust done.

DACのクロック位相が合っていない場合は下の図のようにノイズが多くなります

/cosmoz.elf adc clkphase 100 コマンドを何回か実行することで、綺麗な波形になります。