[FPGA] Intel® Cyclone® 10 LP Evaluation Kitを試す

#はじめに
ある記事をきっかけに、[インテル® Cyclone® 10 LP 評価キット](https://www.altera.co.jp/products/boards_and_kits/dev-kits/altera/cyclone-10-lp-evaluation-kit.html)の存在を知り、購入しました。
~~[購入サイト](https://www.buyaltera.com/PartDetail?partId=7347650)で注文したところ、~~Invoice等のメール通知が無くDigi-Key経由で行きなり送られてきました。配達業者はFedExであり、後日に1200円の消費税請求書が同社から送られてきました。
***
####訂正及び追記
消費税請求書から一ヶ月後、FedExより10,000円を超える送料に関する請求書が送られてきました。確認したところ、送料と燃料割増金の合計金額であることがわかりました。結果的に支払った額はボード2枚分に相当します。これならDigi-Key Japanで注文した方が良さそうです。個人ユーザーは、[buyaltera.com](https://www.buyaltera.com/)で注文することはおすすめできません。
***
なお、記事執筆時点現在(2017年10月15日)、Cyclone 10 LPに関して[ワークショップ](http://www.altima.jp/seminar/special/technology-day_2017.html)が無料で特別開催として実施されており、参加するとこの評価キットがもらえるようです。太っ腹ですね。
今回は、Quartus使い方の備忘録も兼ねて、インテル® Cyclone® 10 LP 評価キットのサンプルデザインを合成、FPGAに書き込んでみました。

#Intel® Cyclone® 10 LP Evaluation Kitの特徴
詳しくは[同ページ](https://www.altera.co.jp/products/boards_and_kits/dev-kits/altera/cyclone-10-lp-evaluation-kit.html)に記載されているので個人的な印象を簡単に書く程度で留めます。
このKitの特徴は、なんと言ってもボードにHyperRAMが搭載されていることです。HyperRAMは高速I/O技術「HyperBus」に対応したメモリであり、DDR DRAM等に比べてI/O数が少なくコンパクトなチップになります。
本ボードでは、[Synaptic Labs社](https://synaptic-labs.force.com/s/)の無償評価ライセンス(1年間)が含まれており、同社の[HyperBusコントローラIP](https://synaptic-labs.force.com/s/ip-hbmc)を使用することで、対応したFPGAを設計することができます。
miniUSBポートが搭載されており、電源とFPGAのフラッシュに使用することができます。
ボードの大きさとしては、[MAX® 10 FPGA 評価キット](https://www.altera.co.jp/products/boards_and_kits/dev-kits/altera/kit-max-10-evaluation.html)と同程度の大きさです。

#セットアップ
##Quick Setup
評価キットには、Quick Setupの紙が同梱されており、以下のように記載されています。
>Step 1: Using the provided USB cable, connect the board to a PC.
>Step 2: Verify that the 4 user LEDs are blinking.
>Step 3: Launch a web browser and go to www.altera.com/lp to get the kit documentation and design files

自分の場合、Step 1, 2は問題ありませんでしたが、最後のWebサイトで以下の問題に直面しました。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Intel Cyclone 10LP Evaluation Kit<br> 1. PCとボードを付属のケーブルでつなげ→OK<br> 2.Lチカするハズだ→OK<br> 3. <a href="http://www.altera.com/lp">www.altera.com/lp</a> にあるdoc見ろ→ｵﾜﾀ＼(^o^)／ <a href="https://t.co/A01rbAlx1S">pic.twitter.com/A01rbAlx1S</a></p>&mdash; tethys (@tethys_seesaa) <a href="https://twitter.com/tethys_seesaa/status/916838774591516672?ref_src=twsrc%5Etfw">2017年10月8日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
この日はあきらめました。

##直接サイトにアクセスする
リソースページを見つけたので、ここからドキュメントやサンプルデザインをダウンロードしました。
Quartusのセットアップ等も記載してあります。
https://www.altera.com/products/fpga/cyclone-series/cyclone-10/cyclone-10-lp/design-tools/evaluation-kit.html

ここで強調しておきますが、今回の記事ではQuartusは、__無償のLite Editionで実行することができます。__


#HyperBus IP(S/Labs HyperBus Memory Controller (HBMC) IP)を入手する
本キットではHyperRAMのコントローラIPがキモであるため、Synaptic Labs社の[アカウントを作成してLicenseを入手する](https://synaptic-labs.force.com/s/ip-hbmc?tabset-98c60=2)ことが必要となります。
アカウント作成/Lincense入手には上記リンク先に表示されているスライドのようなページで、ライセンス条項を読みつつメールアドレス、住所、電話番号を同社に登録する必要があります。
また登録には、上記に加えてIntel® Cyclone® 10 LP Evaluation Kitのシリアル番号も必要です。
ライセンスは、1年間無償で使用できる__Basic Edition__と3ヶ月無償で使用できる__Full Edition__の2種類があります。Editionの違いなどの詳細は、下記をご覧下さい。
http://media.synaptic-labs.com/pub/2017-Brochures/SynapticLabs-HBMC-2Editions-Licenses-Pricing.pdf

今回はBasic Edisionをチョイスしました。

先ほどのスライドのようなライセンス条項から登録まで至る部分を満たすと、ライセンスファイルと、ライセンスファイルのコメントに記載されているURLからIPをダウンロードすることができます。
IPを、例えば /usr/intelFPGA_lite/17.0/ip/SynapticLabs といった、QuartusのIPディレクトリ以下に作成し、コピーすると、QuartusがIPとして認識してくれます。
![IP Catalog](https://qiita-image-store.s3.amazonaws.com/0/32925/908eed3d-7e70-3fb1-6634-0e9e6399e0ab.png)

ライセンスファイルを ${LM_LICENSE_FILE} 等の環境変数設定を使用すると、Quartus上でライセンスとして現れます。
![License](https://qiita-image-store.s3.amazonaws.com/0/32925/9c21d885-8ffd-c1a5-7a9a-af5fb11eb206.png)

IPは、RTLシミュレータとしてModelSim Intel Editionが使用できるようです。

#HyperBus IPのサンプルデザインを合成する
今回は、CentOS 7上でQuartus Lite Edition 17.0を使用してみました。
SynapticLabs社のサイトにある「S/Labs HyperBus Memory Controller (HBMC) IP
Installation Guide with Detailed Step-by-Step Instructions」にしたがって、サンプルデザインを合成してみました。
http://media.synaptic-labs.com/pub/2017-Brochures/SynapticLabs-HBMC-Installation-Guide-StepByStep.pdf

サンプルデザインのProjectは、以下にあります。
https://cloud.altera.com/devstore/platform/17.0.0/Standard/boot-from-epcq-serial-flash-example/
このサイト上では、必要となるQuartusは「Standard」となっていますが、ここからダウンロードできる「HyperRAM EPCQ Reference Project」は、__無償のLite Editionで実行できます。__

Quartusを起動し、「HyperRAM EPCQ Reference Project」を読み込ませます。「NIOS HyperRAM」がトップ名となるようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/6ccbfc15-d606-2ad0-1739-1be78432e6d8.png)

「Compile Design」をダブルクリックし、ネットリストまで作成します。作成完了までに
4個のCritical Warningが出力されますが、問題なくフローは終了するようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/ecdb9e97-1d08-93c5-efd6-5641a7dc071f.png)

#FPGAに書き込む
ボードを付属のUSBケーブルにてCentOS 7が起動しているPCに接続することで電源ONとなります。Programmerを起動すると、以下のようにCyclone 10 LPが接続された状態となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/0cf58ee6-6721-4d2f-636b-5ad829b92b1e.png)

ただし、このままでは「Start」ボタンがグレーのままのでFPGAを書き込むことはできません。「Hardware Setup」ボタンを押して、改めて認識させる必要があります。
「Hardware Setup」ボタンを押すと、以下のようにIntel® Cyclone® 10 LP Evaluation Kitが認識するので「Cyclone 10 LP Evaluation Kit」にCurrently secreted hardwareをチョイスします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/b9337062-6f3a-b385-8454-08c866f5b169.png)

実は、このままだとJTAG構成が正しくありません。Intel® Cyclone® 10 LP Evaluation KitはFlash Programmer用デバイスとしてMAX10が搭載されています。ここでは、「Auto Detect」を押してハードウェアをスキャンし、「Add File」でoutput_filesディレクトリにあるsofファイルを再読込します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/2c09f091-6939-d21e-b905-fffac9d9d0a4.png)

最終的には、Cyclone 10 LPが前段にあり、VTAP10(MAX 10)が後段に来る構成にします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/fb4ddb17-fa19-4b2f-9cb9-55bd14295e52.png)

右上の「Progress」が100%(Successful)と緑色表示になれば、書き込み完了です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/32925/257c9476-c269-eff4-be19-1fef6d84b4e5.png)

#Flow Summary
このプロジェクトのサマリーは以下の通りです。内部メモリを半分以上消費しており、HyperRAMを積極的に使う必要がありそうです。

```shell-session
+----------------------------------------------------------------------------------+
; Flow Summary                                                                     ;
+------------------------------------+---------------------------------------------+
; Flow Status                        ; Successful - Sun Oct 15 19:54:23 2017       ;
; Quartus Prime Version              ; 17.0.2 Build 602 07/19/2017 SJ Lite Edition ;
; Revision Name                      ; NIOS_HyperRAM                               ;
; Top-level Entity Name              ; NIOS_HyperRAM                               ;
; Family                             ; Cyclone 10 LP                               ;
; Device                             ; 10CL025YU256I7G                             ;
; Timing Models                      ; Final                                       ;
; Total logic elements               ; 7,304 / 24,624 ( 30 % )                     ;
;     Total combinational functions  ; 6,170 / 24,624 ( 25 % )                     ;
;     Dedicated logic registers      ; 4,568 / 24,624 ( 19 % )                     ;
; Total registers                    ; 4592                                        ;
; Total pins                         ; 34 / 151 ( 23 % )                           ;
; Total virtual pins                 ; 0                                           ;
; Total memory bits                  ; 393,408 / 608,256 ( 65 % )                  ;
; Embedded Multiplier 9-bit elements ; 6 / 132 ( 5 % )                             ;
; Total PLLs                         ; 1 / 4 ( 25 % )                              ;
+------------------------------------+---------------------------------------------+
```

#おわりに
とてもコンパクトなボードであり、NIOSと組み合わせるとちょっとしたシステムができそうです。ボード自体はEthernetポートがあり、ArduinoやPMODが備わっていることもあって、それなりに組み込みボードをお持ちの方ならIntel/Altera FPGAを調べるのにちょうど良い感じです。

HyperRAMはIoTのエッジ向けを狙っているのでしょうかね？
Cyclone 10 LPのプロセスはIntel?TSMC?

1年間の無償評価ライセンスを活用して、HyperRAMの実力を知るようなRTLシミュレーションや基板評価をしてみたいと思います。

#おまけ
Linux(CentOS 7)でのUSB Blasterの設定

/etc/udev/rules.d/51-usbblaster.rules

```shell-session
# USB-Blaster
SUBSYSTEMS=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6002", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6003", MODE="0666"

# USB-Blaster II
SUBSYSTEMS=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE="0666"
```

以下のコマンドでエラーとなっていないか、確認する。

```shell-session
$ udevadm test /etc/udev/rules.d
```