FPGA Cloud Connectivity Kitを使ってみた

# **はじめに**
Terasic社が販売する「FPGA Cloud Connectivity (FCC) Kit」は、FPGAを搭載したエッジデバイスをクラウドに接続するための、Microsoft Azureの認証を受けた開発キットです。

FCCキットは大きく分けて2つのパーツで構成されています。

1. Intel Cyclone V SoC FPGAをベースにした人気のDE10-Nanoキット。
2. Wi-FiとBluetoothの無線通信機能に加え、環境光、温度・湿度センサー、加速度計、ジャイロスコープなどの各種センサーを搭載したRFSボード。

この製品は、海外の[Terasic社](https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=165&No=993&PartNo=1)に直接注文するか、日本国内の[代理店](http://solitonwave.shop/?pid=157968458)に注文することができます。
注：Terasic社のウェブサイトでは、標準バージョンよりも安いBluetooth機能を持たないWifiバージョンが提供されています。

FPGA初心者の私は、今回Terasicから購入して使ってみしたので、チュートリアルに沿って環境作りとデモプロジェクトの実践を紹介したいと思います。

# **FCCキットの内容**
パッケージの中の内容物です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/da9051c2-be98-8694-e3b4-be79d0f630d1.png)

1. クイックスタートガイド
2. DE10-ナノボード
3. RFSドーターカード
4. 40ピンIDCからボックスヘッダーケーブル
5. タイプAからミニBへのUSBケーブルx1
6. タイプAからマイクロBへのUSBケーブルx1
7. 電源DCアダプター（5V）
8. microSDカード（装着済み）
9. 4つのシリコンフットスタンド

# **DE-10 Nanoキット**
まずはコアパーツである「DE10-Nano」キットをご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/c25ea7f7-0392-8ea5-2ded-f85b7a238d85.png)
以下の手順は、[オンラインガイド](https://www.intel.com/content/www/us/en/developer/articles/guide/terasic-de10-nano-get-started-guide.html)に沿って実行されます。
詳細はガイドをご参照ください。

## 組み立てとセットアップ
届いたパッケージには、MicroSDカードがカードソケット（基板の下側）に挿入され、6ピンのDIPスイッチが正しく設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/a9321550-2c94-ed24-9155-3a8aa3a2aebd.png)
電源ケーブル（DC 5V）を差し込んでボードの電源を入れるだけです。
ボードは、LEDの点滅で示されるブートシーケンスで起動します。

## PCとの接続
本機をPCに接続するには、2つの方法があります。
1. Ethernet over USB
2. シリアル接続
この記事では、USB OTGポートにMicro-B USBケーブルを使用して、Ethernet over USBを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/d5c1605a-fa7a-f21c-6656-8982521b32ae.png)
USBケーブルをPC（ここではWindows 10 20H2）に接続すると、ファイルエクスプローラーに新しいデバイス「DE10-Nano」が表示され、その中にSDカードの内容が含まれていることが確認できます。

先に進む前に、Ethernet over USBを有効にするためのドライバーを手動でインストールする必要があります。

1. 「デバイスマネージャー」を開き、未知のデバイス 「RNDIS」が確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/2df68f40-a228-66f6-6501-bce035c26ba8.png)
2. デバイスを右クリックして 「Update driver」を選択する。
3. 「Browser my computer for drivers」を選択し、"Next」をクリックする。
4. ドライバーファイルが入っている「DE10-Nano\Drivers」フォルダを選択し、「次へ」をクリックする。

しかし、ドライバーのインストール時に<font color="Red">エラー</font>が出てしまう。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/95db0e5b-d672-4abd-8dd0-f4f1f3f2addf.png)

## ドライバーインストールのトラブルシューティング
インターネットで少し調べてみたところ（[リンク](http://www.terasic.com.tw/wiki/Set_%22Disable_Driver_Signature_Enforcement%22_on_Win10)）、原因はWindows10にデフォルトで搭載されている「ドライバー署名の強制」によるものでした。
ドライバをインストールするためには、一時的に「ドライバ署名の強制を無効にする」を設定する必要があります。

1. 「設定」→「更新とセキュリティ」→「回復」をクリックする。
2. 「PCの起動をカスタマイズする」→「今すぐ再起動」をクリックする。
3. 「トラブルシューティング」→「詳細オプション」→「スタートアップの設定」を選択する。
4. キーボードの「7」または「F7」を押して、「ドライバ署名の強制を無効にする」を設定する。
5. PCを再起動した後、再度ドライバーをインストールする（Windowsのセキュリティ警告がポップアップしてもインストールを続行する）。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/54b71570-aafa-16e3-1f0a-a0566d08c02c.png)
6. ドライバーが正常にインストールされます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/3f394dbc-b6f7-a892-e7ed-5a8041a0130f.png)

:::note info
注）「ドライバ署名の強制を無効にする」の設定は、次回のシステム再起動時に解除されます。
:::

これで、PCのウェブブラウザにIPアドレスhttp://192.168.7.1 を入力して、ボードがホストするウェブサイトにアクセスすることができます。いくつかの学習教材や楽しいデモが提供されています。

さらに、これらの3つの方法でボードのデスクトップに接続し、より多くのデモアプリケーションを試すことができます。

- Virtual Network Computing (VNC)
- Secure Shell (SSH)
- HDMI
   - USB OTGポート経由でのマウス/キーボードの接続

## チュートリアルのプロジェクト
オンラインガイドには、初心者の方が最初の印象をつかみやすいように、いくつかのチュートリアルのプロジェクトが用意されています。

- [Explore GPIO Example Application](https://www.intel.com/content/www/us/en/developer/articles/guide/terasic-de10-nano-get-started-guide.html#explore-gpio)
- [Explore FFT Example Application](https://www.intel.com/content/www/us/en/developer/articles/guide/terasic-de10-nano-get-started-guide.html#explore-fft)
- [On-board Accelerometer Tutorial](https://www.intel.com/content/www/us/en/developer/articles/guide/terasic-de10-nano-get-started-guide.html#on-board-accelerometer-tutorial)
- [Debug 'Hello World'](https://www.intel.com/content/www/us/en/developer/articles/guide/terasic-de10-nano-get-started-guide.html#debug-hello-world)
- [My First FPGA](https://www.intel.com/content/www/us/en/developer/articles/guide/terasic-de10-nano-get-started-guide.html#my-first-fpga)

ここでは、FPGA上で点滅するLEDプログラムを作成する方法を示すFPGAデモを例に挙げています。
詳細は[オンラインガイド](https://www.intel.com/content/www/us/en/developer/articles/training/how-to-program-your-first-fpga-device.html)を参照してください。

**ソフトウェア**
Intel® Quartus® Prime Software Suite Lite Edition
インテル Cyclone V デバイスには、FPGAのデザインソフトウェアを無料でご利用いただけます。最新バージョン(21.1)のLite版を選択して[ダウンロード](https://fpgasoftware.intel.com/21.1/?edition=lite&platform=windows)してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/4fb3472a-ab52-9226-07af-cb55d7ecc78f.png)
インストールファイルは大きいので、すべてのファイルをダウンロードするのではなく、必要なファイルだけをダウンロードすることをお勧めします。
- Quartus Prime (Nios II EDSを含む) - 1.6GB
- Cyclone Vデバイスサポート - 1.3GB

**手順**
詳細な手順は、チュートリアルに記載せれています。

1. インテル Quartus ソフトウェアでプロジェクトの作成
    - デフォルトのディレクトリ（例えばC:intelFPGA_lite\21.1\）はQuartus Primeツール内のもので、プロジェクトを保存することはできません。別のフォルダを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/84afd24a-a973-e5eb-3581-57cfc43a7724.png)
2. HDLファイルの作成
3. Verilogモジュールの作成
4. PINアサインの選択
5. SDCファイルの作成
6. Verilogコードのコンパイル
7. FPGAのプログラム
    - FPGAをプログラムする前に、SDカードを取り外す必要があります。
    - 「Auto Detect」をクリックすると、デフォルトのデバイスリストがまだ更新されていないため、警告メッセージが表示されます。 「Yes」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/1f492ccd-07d0-2b56-8d33-24fa9dafc2ca.png)
8. 点滅するLEDを確認する

その結果、右端のLED-0が、コードによって設計された1秒間に3回点滅していることがわかります。
もちろん、Verilogコードを修正して、ボード上のより多くのLEDを制御することで、より多くの実験を行うことができます。

# **RFSボード**
さて、いよいよRFSのボードを見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/36aee76a-4705-8575-2007-6d3c01e61ab7.png)
RFSボードは、GPIOインターフェースを介してDE10-Nanoボードに接続されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295537/94ec92b0-a031-ab41-8126-878a4faed8bc.png)

FCCキットのCD-ROMには、RFSのマニュアルといくつかのデモプログラムが収録されています（[ダウンロード](https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=165&No=993&PartNo=4)）。

RFSボードにはIoTデバイスとして多くのセンサーが搭載されているので、Microsoft Azureサーバーに接続することで、取得したIoTデータを活用するプロジェクトを開発することができます。

DE10-Nanoをベースにした開発環境の構築方法を、4つのステップで紹介する日本語のチュートリアルを掲載しています。

1. [FPGA クラウド・コネクティビティー・キット・チュートリアル・モジュール 1 Azure* IoT Edge ランタイムをインストールする](https://www.intel.co.jp/content/www/jp/ja/products/docs/programmable/cloud-connectivity-kit-tutorial-module-1.html)
2. [FPGA クラウド・コネクティビティー・キット・チュートリアル・モジュール 2 Visual Studio Code を使用して Azure* コンテナーベースのアプリケーションを構築する](https://www.intel.co.jp/content/www/jp/ja/products/docs/programmable/cloud-connectivity-kit-tutorial-module-2.html)
3. [FPGA クラウド・コネクティビティー・キット・チュートリアル・モジュール 3 センサーデータを収集し、Azure* Container Registry (ACR) に保存する IoT Edge モジュールを構築する](https://www.intel.co.jp/content/www/jp/ja/products/docs/programmable/cloud-connectivity-kit-tutorial-module-3.html)
4. [FPGA クラウド・コネクティビティー・キット・チュートリアル・モジュール 4 コンテナ・アプリケーションを使用して Azure* Cloud から FPGA をリコンフィグレーションする](https://www.intel.co.jp/content/www/jp/ja/products/docs/programmable/cloud-connectivity-kit-tutorial-module-4.html)

それを使ってAzureに接続したいですが、そこまではできていません。次回続きを書こうと思います。
ご興味のある方はぜひお試しください。

# **Notices & Disclaimers**
Intel technologies may require enabled hardware, software or service activation.
No product or component can be absolutely secure.
Your costs and results may vary.

© Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries. Other names and brands may be claimed as the property of others.

The products described may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.​

Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade.