SDSoCチュートリアル

ソースコードはGitHUBにある

EDDPキットのプロジェクトのソースコードはこちら (http://github.com/Xilinx/IIoT-EDDP)に公開されています。ソースコードが提供されているので、モーター制御のプログラムを独自にカスタマイズしていくことが可能です。

開発にはSDSoC 2017.2を使う

開発にはXilinxが提供するSDSoCを使います。SDSoCはZynq向けの開発環境で、ハードウェア記述言語を書かなくてもZynqの開発が可能です。C/C++ベースで開発したプログラムを、ハードウェア化したい関数を選択することで自動的にハードウェアとソフトウェアに分けられてビルドされます。

自動生成されるハードウェアアクセラレータとソフトウェアとの接続といった部分はSDSoCが最適化を行い、最終的にFPGA configuration用のビットストリームファイルと、ブート可能なSDカードイメージが生成されます。

このような一連の開発を効率的に行うことのできる非常に強力なツールです。

今回はSDSoC 2017.2を使いチュートリアルを行います。これ以外のバージョンでの動作は未確認ですのでご注意ください。

サンプルプロジェクトの解説

サンプルプロジェクトのデザインは次の図のようになっています。

 

 

灰色のブロック部分がArty 7Zボード上で動くソフトウェア・ハードウェアのブロック図、緑色がモーター駆動ボード内のブロック図になります。

https://github.com/Xilinx/IIoT-EDDP からダウンロードしたソースコードを適当なディレクトリ(ここではIIoT-EDDP-master)に解凍しておきましょう。SDSoCを立ち上げ、workplaceとするディレクトリを選択します。先ほど解凍したディレクトリを選択します。

 

SDSoCが立ち上がったら、file>New>Otherとクリックすると、次のようなwizard画面が出てきます。

 

 

新しいSDxプロジェクトを作成するので、Xilinx>Xilinx SDx Projectを選択しnextをクリックします。プロジェクトの名前はFOC Buildとしておきます。

 

 

名前を入力したら下部にあるnextをクリックし、プロジェクトのターゲットとなるハードウェアプラットフォーム選択画面に移ります。Add Custom Platformボタンをクリックし、IIot-EDDP-master/SDSoC/platforms/arty_7z_10_focを選択します。

 

 

arty_7z_10_focが追加されるので、それを選択しnextをクリックします。

 

次のような設定になっていることを確認しNextを押します。

Field Oriented Control with Web UIを選択しfinish。

 

これでプロジェクトの設定が完了します。

 

プロジェクトトップページのHardware Functionsにはfocという関数が選択されています。この関数ではFOCアルゴリズムの計算を行います。SDSoCではハードウェア化したい関数を選択することで、自動的にHWアクセラレータを作成してくれます。SW/HWの切り替えるには、Project Exploreからsrc/foc.cppを右クリックし、Toggle SW/HWをクリックします。

 

サンプルプロジェクトではdlライブラリが必要なので、リンカの設定を行います。

(SDSoCのバージョンが異なると、dlopenが見つからないというエラーが出る)

Project ExpoloreからFOC Buildを右クリック、C/C++ Build Settingsを開きます。C/C++ Build/SettingsからSDS++LinkerにあるLibrariesをクリックします。Libraries(-l) の横にある+マークをクリックし、dlと入力してOKをクリックします。次のようになればOKです。

 

設定が完了したので、プロジェクトをビルドします。Project ExploreからFOC Buildを右クリック、Build Projectをクリックします。ビルドには20~30分程度かかるようです。ビルドが完了するとDebugフォルダの中にsd_cardというフォルダが作られています。この中にはLinuxのブートイメージやFPGAのbitstreamなどが含まれています。以降は「制御プログラムの操作」の手順と同様です。

 

TEC0053のご購入はこちらです