1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1500円ZYNQ基板でPSからPL(FPGA)へ再ダウンロードする方法

Posted at

はじめに

1500円 ZYNQ 基板( EBAZ4205 )で、起動後に PS(ARM)から PL(FPGA) を再ダウンロードする方法を解説します。

EBAZ4205 以外の ZYNQ 基板でも、同じ方法で書き換えができます。

PetaLinux が動いているまま、LAN 経由で FPGA を書き換えることができるので、周辺回路の接続を変更せずに済み、便利に開発ができます。

なぜ、再ダウンロードか

ZYNQ がブートするとき、FSBL が ブートイメージに含まれる FPGA のダウンロードを実施しています。

FPGA に新しい回路を追加するとき、microSD や NAND フラッシュのブートイメージごと更新するのは面倒です。

FPGA だけを更新できれば、すぐに動作を調べることができます。

デバイスツリーが変わらない事が前提ですが、何度でも再ダウンロードして試すことができます。

__PYNQ__と似ていますが、プログラムも PetaLinux 上で gcc でコンパイルできますので、より組み込み志向な開発ができます。

※デバイスツリーごと上書きする方法もあるようですが、試していません

使用環境

  1. Windows10 Pro (20H2)
  2. EBAZ4205 (自作 PetaLinux 2020.1 ブートイメージで起動)
  3. TeraTerm

PetaLinux ブートイメージは、以前の記事 1500円ZYNQ基板でNANDブートの実現 で作成したものを使います。

参考資料

Solution Zynq PL Programming With FPGA Manager
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841645/Solution+Zynq+PL+Programming+With+FPGA+Manager

FPGAをLinuxからコンフィグするxdevcfgの使い方 - なひたふさん
http://nahitafu.cocolog-nifty.com/nahitafu/2018/01/devxdevcfg-accc.html

※以前の PetaLinux で PS → PL ダウンロードに利用できた、
 cat system.bit.bin > /dev/xdevcfg
 は廃止されてしまったようで、動きませんでした。

 現在は fpga_manager を使う事になっているようです。

作業の流れ

  1. Vivado が出力した bit ファイルを、PS ダウンロード用にバイトスワップします。
  2. 変換したファイルを、SCP で PetaLinux へ転送します。
  3. PetaLinux で、fpga_manager からダウンロードします。
  4. C 言語ソースも転送してコンパイルできます。

実際の作業

1. FPGA ダウンロードデータの準備

PS から PL へのダウンロードには、.bit をバイトスワップした専用の FPGA データが必要です。
Vivado で作成された .bit ファイルを、Vivado ツールの Bootgen で変換します。

ここでは、参考資料にある なひたふ さんのページで公開されている、
bit2bin.bat
を使用させていただきました。

私の環境では、Vivado のインストール先は、C:\Xilinx2020.1\Vivado\2020.1
です。
これに合わせて、参照先を変更しています。

bit2bin.bat
@if "%1"=="" goto ERR
@echo all:{%1} > all.bif
C:\Xilinx2020.1\Vivado\2020.1\bin\bootgen.bat -image all.bif -w -process_bitstream bin
move %1.bin %~dp0
pause -1
exit /b
:ERR
@echo "ビットストリームファイル名が必要です"
@echo "Usage: bit2bin.bat <bit_file_name>"
pause -1

bit2bin.bat と、Vivado が出力した .bit ファイル(今回は system.bit )を同じフォルダにコピーしておきます。
11.png

bit2bin.bat のアイコンの上に system.bit ファイルをドロップします。
12.png

変換情報 all.bif と、変換された FPGA ダウンロードファイル system.bit.bin が作成されました。
13.png

2. EBAZ4205 の PetaLinux へ転送

通常、EBAZ4205 のコンソール操作用には UART で接続した TeraTerm を利用しています。
ファイル転送には、LAN から ssh 接続して、scp でファイルを送り込みます。

UART の TeraTerm で、ifconfig して割り当てられた IP アドレスを調べます。
1.png

File - New Connection で EBAZ4205 の IP アドレスを指定して ssh 接続します。
2.png
3.png

root/root でログインできます。
4.png

File - SSH SCP...
を選択して、ファイル転送を始めます。
5.png

転送したい FPGA ダウンロードファイルをドロップして、Send ボタンを押します。
6.png
7.png

EBAZ4205 のカレントのディレクトリに転送されています。
8.png

3. PS からダウンロード

EBAZ4205 で、下記の通りにコマンドを実行します。
必ず、/lib/firmware というフォルダを作成してダウンロードファイルをコピーして、ダウンロードする必要があります。

echo 0 > /sys/class/fpga_manager/fpga0/flags      : フラグを設定する
mkdir -p /lib/firmware           : ダウンロード専用のフォルダを作成
cp system.bit.bin /lib/firmware/       : ダウンロード専用フォルダに、.bit をコピー
echo system.bit.bin > /sys/class/fpga_manager/fpga0/firmware   : ダウンロード実行

ダウンロードは、一瞬で終わります。

9.png

EBAZ4205 では、PL の EMIO を経由して LAN の PHY を接続しているため、ダウンロード中は LAN のリンクが切れます。
リンクが復活した後、DHCP で IP アドレスが再割り当てされ、TeraTerm の ssh 接続が復活します。

IP アドレスが再割り当てで変わってしまうと、ssh 接続は復活しません。

#ダウンロードする FPGA は、PHY 接続部がブート時の FPGA と同じになっている必要があります。
 EBAZ4205 のブート FPGA に、ユーザー回路を追加して作成した FPGA を上書きダウンロードすれば、リンクが復活します。

4. C 言語ソースのコンパイル

scp でソースを送り込んで、コンパイルすることもできます。

hello_world.c
# include <stdio.h>

int main()
{
  printf("Hello World!\n");
}

scp で転送して、gcc でコンパイルして、実行します。
10.png

まとめ

EBAZ4205 で、LAN 経由で FPGA の再コンフィグレーションが実現できました。
専用ダウンロードケーブルが無くてもよく、またリモートで FPGA の開発ができます。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?