FPGA初心者の自分による、SDSoCを使ってZedBoard上にサンプルのC++プログラムをハードウェア化、LAN経由で実行するまでの過程を今後のために残しておきます。
- SDSoCとは
- Xilinx社の提供する、C++で書かれたコードからハードウェアの生成をしたり、生成された実行ファイルをSDカードにコピーしZedBoardに挿して動作させたりといったことができる開発環境の1つです。
本記事ではこれらの機能を、同じくXilinx社のツール「SDx IDE」から利用します。
- Xilinx社の提供する、C++で書かれたコードからハードウェアの生成をしたり、生成された実行ファイルをSDカードにコピーしZedBoardに挿して動作させたりといったことができる開発環境の1つです。
実行までの手順は6つに分けられ、それぞれ
- プロジェクトの作成
- プロジェクトのビルド
- ビルドしてできたファイルをSDカードへコピー
- LANへつなぐ
- ZedBoardのipアドレスを調べる
- ssh
です。これらについて下記で詳細を説明していきます。
環境
- windows10 64bit
- SDx IDE 2019.1
- ボード
- ZedBoard
1. プロジェクトの作成
SDx IDEを起動し、ウィンドウ左上のFile→New→SDx Application projectと選びプロジェクトの作成に移ります。
プロジェクト名を決めます。今回は適当にsampleとでもしておきます。
「Next」を押して、次にボードの種類を選びます。今回は「zed」を選択します。
次の画面「System configuration」ですが、今回はデフォルト値を用いることにします。何も変更を加えず「Next」を押します。
プロジェクトのテンプレートを選ぶ画面です。テンプレートには例えばFIRフィルター、行列の計算などがありますが、ここでは「Array_zero_copy」(配列をただコピーして返すだけの機能を持つ)を選択します。
「Finish」を押すとプロジェクトが作成されます。
2. プロジェクトのビルド
まずプロジェクトのビルドをすることでZedBoardを動かすのに必要なファイルを生成します。
先ほど作成したプロジェクトを開くと、下のような画面が表示されます。
画面左上あたりにハンマーのマークがありますが、そこをクリックして出てくる選択肢のうち「Debug」を押してビルドを開始します。
注意点として、この時「Debug」ではなく「Release」を押してしまうとビルドに数時間かかってしまうことがあります。
ビルドには数分かかるので気長に待ちましょう。
ビルドが完了すると画面下の「Console」タブに「Build Finished」と表示されます。(図中の水色の枠で囲った部分)
3. ビルドしてできたファイルをSDカードへコピー
ビルド後、Debug/sd_card/
下に数個ファイルが生成されます。今回の場合は下の図の水色で囲った箇所のように4つ作成されていると思います。
このうちsample.elfが実行ファイルで、「Array_zero_copy」の機能(配列をただコピーして返す)を持っています。これをZedBoardにsshでログインした状態で実行するのが目標です。
これらのDebug/sd_card/
下のファイルを全部SDカードの直下にコピーします。
コピーしたらSDカードをPCから取り出しZedBoardに差し込みます。
4. LANへつなぐ
LANケーブルの一方をZedBoardに、もう一方をルーターに繋ぎます。さらにZedBoardに電源をつなぎ、下の図の水色の枠で囲ったスイッチを横にスライドして起動します。
5. ZedBoardのipアドレスを調べる
Advanced IP Scannerのインストール
LANに接続されたZedBoardにsshするために、ZedBoardのローカルipアドレスを知る必要があります。これはAdvanced IP Scannerという、同じLANに接続されている機器の情報を取得できるツールを用いると手軽に行うことができます。以下のサイトからダウンロードできます。
https://www.advanced-ip-scanner.com/jp/
ダウンロードできたら実行し、インストールを開始できます。画面の指示に従ってインストールしましょう。
ipアドレススキャン
Advanced IP Scannerをインストール後、起動すると次のようなウィンドウが表示されます。
左上の「スキャン」を押すと同じLANに接続されている機器の情報を取得できます。LANに、起動中のZedBoardがつながっていることを確認したらこれを実行します。(少し時間がかかる場合があります。)

どんな機器がLANに繋がっているかによって結果は変化しますが、上の画像のように検出できるかと思います。
製造者が「Xilinx」となっている行の情報がZedBoardに関する情報となります。
その行の、「IP」列にあるipアドレスがZedBoardのipアドレスです。画像の場合であれば192.168.1.5が該当します。
(もしZedBoard以外にXilinx製の機器がLANに繋がっている場合この限りではありませんが、FPGA初心者の方であればすでに別のFPGAをつないでいる、あるいはよほど特殊なものをLANに繋いでいるなどの心当たりがなければおそらく大丈夫です。)
6. ssh
sshでログイン
得られたipアドレスを使ってZedBoardにsshでログインします。powershellを開き
ssh root@192.168.1.5
と打ち込みます。今回は192.168.1.5が得られたのでこのように入力していますが、LANの状況によってどんなipアドレスが得られるかは変わってくるので適宜変更してください。
実行すると下の画像のように「今までに接続したことないipアドレスだけど大丈夫?」といったことを聞いてくることがあります。ここではyesと入力し続行します。
これでZedBoardに入ることができました。
(ユーザー名、パスワードがそれぞれroot,rootとなっており比較的メジャーなものであるため、セキュリティを考えて後で変更しておくといいかもしれません。)
実行ファイルの起動
先ほどSDカードにコピーしたファイルは/mnt/
に入っています。
cd /mnt/
を実行してここに移動します。
上の画像のように、移動した後ls
で中身を確認すると、確かに先ほどコピーしたファイルが入っていることがわかります。実行ファイルsample.elfを起動します。
./sample.elf
と打ち込んで実行してみます。

だいたい上の画像のようになればZedBoard上でのsample.elfの実行が成功していることになります。ここまでお疲れさまでした。
再度接続するときの注意点
-
一度ZedBoardの電源を落として、もう一度起動したりするとipアドレスが変わることがあります。
-
2回目以降ZedBoardにsshしようとすると以下のように表示され、接続に失敗する場合があります。
- SSHでは初回接続時に接続先ホストの公開鍵を保存しておき、次回接続時にホスト鍵を比較して前回と同じホストに接続したかを確認するような仕組みになっています。そのため、IPアドレスの振り直しなどでホスト鍵が変わってしまった場合、次のようなエラーメッセージが出てSSH接続が失敗してしまいます。(参考)
この場合は例えば接続したいipアドレスが192.168.1.5であった場合、ssh-keygen -R 192.168.1.5
と打つことによって鍵の情報をリセットでき、再度接続できるようになります。
- SSHでは初回接続時に接続先ホストの公開鍵を保存しておき、次回接続時にホスト鍵を比較して前回と同じホストに接続したかを確認するような仕組みになっています。そのため、IPアドレスの振り直しなどでホスト鍵が変わってしまった場合、次のようなエラーメッセージが出てSSH接続が失敗してしまいます。(参考)