Zynq-7000 で TOPPERS/FMPカーネル(マルチプロセッサ向けRTOS)を動かす

# はじめに
Windows上で[Xilinx SDK](https://japan.xilinx.com/products/design-tools/embedded-software/sdk.html)を用いて．マルチプロセッサ用RTOSである[TOPPERS/FMPカーネル](http://www.toppers.jp/fmp-kernel.html)(以下，FMPカーネル)を[Zynq-7000](https://japan.xilinx.com/products/silicon-devices/soc/zynq-7000.html)で動作させる方法について説明します．

これまでFMPカーネルを動作させるには，高価なボードやICEが必要でしたが，Zynqですと1～2万でボードが手に入り，気軽に始めることができます．

2017年度には，FMP+Zynqの[公開講座](https://www.nces.is.nagoya-u.ac.jp/NEP/courses/list.html)を開講予定です．

# 用意するハードウェア
以下のボードに関しては，Xilinx SDK用のプロジェクトを用意しています．これら以外のボードでも動作させることは可能です．

- [ZYBO](https://japan.xilinx.com/products/boards-and-kits/1-4azfte.html)
 - 秋月電子等から2万強で購入可能です．
 - FPGAを使用しなければバスパワーで動作します．
- [ArduZynq](https://japan.xilinx.com/products/boards-and-kits/1-ckymk9.html)
 -  特殊電子回路株式会社から1.5万で購入可能です． 
- Windows PC
 - Windows7とWindows10で動作を確認しています．
 
#ソフトウェア
- [Xilinx SDK](https://japan.xilinx.com/products/design-tools/embedded-software/sdk.html)
 - 2016.4 で動作確認しています．これより古いバージョンは問題が発生する可能性があります．
- [TOPPERS/FMPカーネル](https://www.toppers.jp/fmp-e-download.html)
 - 上記リンクからfmp_zynq_gcc-20170308.zipをダウンロードして展開して下さい． 

# ビルド&実行の手順

## 1.ワークスペースの作成とプロジェクトとのインポート
- スタートメニュー等からXilinx SDKを起動します．

- Xilinx SDKが起動するとワークスペースの指定画面が表示されるため次のフォルダを指定します．以下ではZyboを例に説明します．

Zyboの場合
 - \fmp_1.4.0\target\zynq_gcc\zybo_sdk
ArduZynqの場合
 - \fmp_1.4.0\target\zynq_gcc\arduzynq_sdk

![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/183d8246-0932-ce94-2024-428d9d0548dc.jpeg)

- ワークスペースの指定後にOKを押します．

![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/836d7ce2-7641-19d7-3334-b1f2af3434f4.jpeg)

次の手順でプロジェクトをワークスペースにインポートします．

- メニューからFile -> Import... を選択します．
- General -> Existing Projects into Workspace を選択してNextを押します．

![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/598f39e8-d207-bfe5-611a-e1a2d2273797.jpeg)

- Select root directory の右のBrowseを押します．するとフォルダー参照のウィンドウが表示されるので”OK”ボタンを押します．
- Projects に下記のようにチェックされた状態で表示されていることを確認して下の"Finish"ボタンを押します．

![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/1de997ee-747a-34af-cf76-701193c276d2.jpeg)


- Welcom の右の×ボタンを押すとプロジェクトが表示されます．
- 左のペインのプロジェクトビューからsample1を選択し，ツリーを展開するとサンプルプログラムとFMPカーネルの各ファイルを見ることができます．

![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/35b20e54-be45-0944-c036-d5aef059ed5b.jpeg)


## 2.ビルド
sample1を選択した状態でビルドボタンを押すとビルドが開始されます．

![WS000010.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/f59f371b-d840-b89e-6b4d-47666cdbf3ef.jpeg)

## 3.ボードの接続
- ボードをUSBケーブルでwindowsPCに接続して下さい．ドライバのインストールが開始され，COMポートが１つ追加されます．


## 4.ダウンロード&実行
- ボードの接続後，sample1に含まれているsample1.launch を右クリックして Debug as -> sample1を選択します．

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/106870/3480f429-a713-145b-e03a-b96035144101.jpeg)

- ダイアログが幾つか表示されますが，全てOKを押します．
- Teratermもしくは，Xilinx SDKの下に表示されるSDK Terminal を開き，次に上記で追加されたポートに対して，115200bps, 8bit, Parity none, Stop 1bit, フロー制御なしで接続します．
- 
![名称未設定 3.jpg](https://qiita-image-store.s3.amazonaws.com/0/106870/02012e4f-3df8-f3d0-f339-cbca0cd33f11.jpeg)

- APUを選択してメニューから"Resume"ボタンを押すとカーネルが起動して実行が開始されます．

![sdk.jpg](https://qiita-image-store.s3.amazonaws.com/0/106870/9c9466be-1f0c-b072-8a70-fee2df0e36e7.jpeg)

- コンソールにログが出力されます．

![sdk1.jpg](https://qiita-image-store.s3.amazonaws.com/0/106870/b000f092-3dc4-526a-f894-47bd40b259be.jpeg)


#新規プロジェクト

- 新規にプロジェクトを作成する場合はフォルダsample1内のMakefile，プログラムソース，sample1.lunchのみをコピーしてsample2等に名前を変更します．
- 次にFile -> New でウィンドウを開き，C/C++ -> Makefile Project with Existing Code で追加したフォルダを選択します．
あとは最初に書いたようにビルドが可能です．

# おわりに
[TOPPERS/FMPカーネル](http://www.toppers.jp/fmp-kernel.html)を手軽にビルド＆実行する方法について説明しました．
是非試して見てください．