FC2カウンター FPGAの部屋 2018年01月26日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる12(FPGAのコンフィギュレーション)

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる11(パッケージのインストール)”の続き。

前回は、Debian が起動してから、使用するパッケージをインストールした。今回は、そのDebian を使用して、UltraZed-EG Starter Kit でFPGA のコンフィギュレーション、FPGA のクロック設定、UIO を設定して、アプリケーションソフトを動作させてみよう。

参考にするのは、”UltraZed 向け Debian GNU/Linux で FPGA をコンフィギュレーション

今回、FPGA にコンフィギュレーションする回路は@ikwzm さんと同じ回路だが自分で作ったGPIO の回路とする。IP インテグレータで作成するとデフォルトでは、IP のアドレス範囲が 4 k バイトになる。@ikwzm さんの回路ではIP のアドレス範囲は 64 k バイトなので、そこは違っている。

UltraZed-EG Starter Kit で Debian を立ち上げる。

fpga ユーザーでログインする。

fpga ディレクトリの下に examples ディレクトリを作成する。
mkdri examples
cd examples


ファイル一式を gpio ディレクトリにダウンロードする。( git clone です)
git clone https://github.com/ikwzm/ZynqMP-FPGA-Linux-Example-0-UltraZed gpio
cd gpio
ls

UltraZed-EG_StKit_Linux_156_180126.png

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる2(Sample FPGA Design編)”で作成したビットファイルの uzed_eg_ex1_wrapper.bit をUltraZed-EG Starter Kit の /home/fpga/examples/gpio にアップロードした。
UltraZed-EG_StKit_Linux_157_180126.png

Python の fpga-bit-to-bin.py を使って、ビットファイルを変換する。
python3 fpga-bit-to-bin.py -f uzed_eg_ex1_wrapper.bit uzed_eg_ex1_wrapper.bin
UltraZed-EG_StKit_Linux_159_180126.png

uzed_eg_ex1_wrapper.bin が生成された。

uzed_eg_ex1_wrapper.bin を /lib/firmware にコピーした。
sudo cp uzed_eg_ex1_wrapper.bin /lib/firmware
UltraZed-EG_StKit_Linux_160_180126.png

次は、Device Tree Overlay による FPGA のコンフィギュレーションなのだが、独自のビットファイルを使用しているので、dts を書き換える必要がある。
元になる fpga-load.dts を表示した。
UltraZed-EG_StKit_Linux_161_180126.png

fpga-load.dts をコピーして fpga-load_uzed.dts を作成し、ビットファイル名を uzed_eg_ex1_wrapper.bin に変更した。
cp fpga-load.dts fpga-load_uzed.dts
vi fpga-load_uzed.dts

UltraZed-EG_StKit_Linux_162_180126.png

dts をコンパイルして、FPGAのコンフィギュレーションを行う。
dtc -I dts -O dtb -o fpga-load_uzed.dtb fpga-load_uzed.dts (下の図のコマンドは間違っている。以前、コンパイルしておいたのでOKだった)
sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load_uzed.dtb /config/device-tree/overlays/fpga/dtbo

つまり、/config/device-tree/overlays に fpga ディレクトリを作って、そこにデバイスツリーをロードすればビットファイルをFPGA にコンフィギュレーションできるようだ。
UltraZed-EG_StKit_Linux_175_180124.png

このTrea Term のウインドウは、IP で開いているので表示が出ないが、COMポートのTrea Term ウインドウに fpga_manager の表示が出た。
UltraZed-EG_StKit_Linux_176_180124.png

FPGAのクロックを設定する。
fclk0-zynqmp.dts を表示した。これは修正する必要が無い。
UltraZed-EG_StKit_Linux_177_180124.png

dtc -I dts -O dtb -o fclk0-zynqmp.dtb fclk0-zynqmp.dts
sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

UltraZed-EG_StKit_Linux_178_180124.png

同様にCOMポートのTrea Term ウインドウを見ると、クロック設定のメッセージが出た。
UltraZed-EG_StKit_Linux_179_180124.png

正常にFPGA のクロックがコンフィギュレーションされたようだ。

UIO の設定。
uio.dts を uio_uzed.dts にコピーして設定を変更する。IP のアドレス範囲が 4k バイトなので、その領域指定とアドレスを変更する。
cp uio.dts uio_uzed.dts
vi uio_uzed.dts

UltraZed-EG_StKit_Linux_180_180124.png

修正済みの uio_uzed.dts
UltraZed-EG_StKit_Linux_181_180124.png

dtc -I dts -O dtb -o uio_uzed.dtb uio_uzed.dts
sudo mkdir /config/device-tree/overlays/uio
sudo cp uio_uzed.dtb /config/device-tree/overlays/uio/dtbo
ls -la /dev/uio*
をすると、/dev/uio0, /dev/uio1, /dev/uio2 の 3 個の UIO を見ることができた。
UltraZed-EG_StKit_Linux_182_180124.png

LED を点滅させる led_on.py を実行する。
sudo python3 led_on.py スーパーユーザー権限で led_on.py を実行すると、LEDが順番に点灯した。
led_on.py を実行するためには、UIO の権限を 666 にする。UIO のオーナーは root なので、一般ユーザーに使えるように 666 にしておこう。
すると、スーパーユーザー権限がなくても led_on.py が実行できた。
sudo chmod 666 /dev/uio*
python3 led_on.py

UltraZed-EG_StKit_Linux_183_180124.png

UltraZed-EG Starter Kit のピンクの四角で囲ったLED が点滅した。
UltraZed-EG_StKit_Linux_183_2_180125.jpg
  1. 2018年01月26日 04:49 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0