#環境
- ボード
- Arty Z7(zynq評価ボード)
- ツール
- Vivado2018.3(Windows10)
- petalinux2018.3(Ubuntu 16.04)
#やりたいこと
zynqのXADCを使って、3ch分のアナログデータを取得します。
今回使用するボードには、XADCのCH1、CH6、CH9につながるピンがある為それを利用します。
(言い訳)
私はソフト屋なのですが、FPGA使える人間がいないとのことで回ってきました。
その為、回路のことは正直よく理解していません・・・
#ハードウェアの作成
##PSの配置
定番ですがPSを配置します。
##XADCコアの配置
XADC WizardがIPに登録されているので配置し、自動配線します。
##XADCコアの設定
デフォルトの設定だと、1ch分のデータしか取得できません。今回は3ch分のデータを取得するために、「Startup Channel Selection」を「Channel Sequencer」に変更します。
変更すると「Channel Sequencer」タブが表示されるので必要なチャネルを有効化します。
ピン設定は固定なので変更できません。接続するだけでOKです。
#ソフトの作成
##Linux
デバイスツリーにXADCが接続されていることを記述する必要がありますが、便利なことに自動で吐き出してくれました。
その為、プロジェクト作成以外は特別なことはしていません。
##値の取得
XADCに割り当てられたアドレスが、0x43C00000になります。
デフォルトの設定で動くといいなと思いながら、とりあえず現在のADCされたデータが取得できるレジスタをリードしてみます。
- リードアドレス
- CH1:0x43C00244
- CH6:0x43C00258
- CH9:0x43C00264
ターミナルを起動し、
#devmem 0x43C00244 w
と入力するとレジスタの値を取得できます。
繰り返し読むとCH1は値が変化しているので何となく読めていそうです。
しかし、CH6、CH9は常に同じ値しか取得できないので失敗です。そんな甘くはありませんでした・・・。
##Sequence registerの設定
マニュアルをちゃんと読んでみると「Sequence register」なるものがいます。どうやら、このレジスタに対して読みたいチャンネルのビットを立てれば読めそうです。
#devmem 0x43C0324 w 0x00000242
をして
#devmem 0x43C00244 w
#devmem 0x43C00258 w
#devmem 0x43C00264 w
をやると取得することができました。