LoginSignup
4
5

More than 3 years have passed since last update.

Zynq XADCの使い方

Last updated at Posted at 2019-07-23

環境

  • ボード
    • Arty Z7(zynq評価ボード)
  • ツール
    • Vivado2018.3(Windows10)
    • petalinux2018.3(Ubuntu 16.04)

やりたいこと

zynqのXADCを使って、3ch分のアナログデータを取得します。
今回使用するボードには、XADCのCH1、CH6、CH9につながるピンがある為それを利用します。
(言い訳)
私はソフト屋なのですが、FPGA使える人間がいないとのことで回ってきました。
その為、回路のことは正直よく理解していません・・・

ハードウェアの作成

PSの配置

定番ですがPSを配置します。
1_初期.png

XADCコアの配置

XADC WizardがIPに登録されているので配置し、自動配線します。
2_ウイザード.png

XADCコアの設定

デフォルトの設定だと、1ch分のデータしか取得できません。今回は3ch分のデータを取得するために、「Startup Channel Selection」を「Channel Sequencer」に変更します。
3_channelseq.png

変更すると「Channel Sequencer」タブが表示されるので必要なチャネルを有効化します。
4_チャネル設定.png

ポート接続

アナログ入力を接続します。
5_ポート接続.png

ピン設定は固定なので変更できません。接続するだけで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

をやると取得することができました。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5