サイドチャネル攻撃評価用ボードとして知られるSAKURAにはXilinxのFPGAである、Spartan-6シリーズが2つ乗っています。上部がメインFPGAという括りになっており、コアに電圧を供給する端子にSMAコネクタが付いており、オシロスコープに接続して波形を観測することによって、電力解析攻撃が用意にできるモノです。

下部のFPGAはコントローラFPGAという名称であり、「暗号処理をメインFPGA」「PCとの通信やメインFPGAとの仲介役をコントローラFPGA」という様に役割を分担させることによって、暗号処理のみの解析が可能になるものだと思われます。

最近のFPGAはZnyqやSpartan-7といったVivadoで開発することができるモノが多く、「ISEは使ったことが無い!」という学生もいるのではないでしょうか?

ISEの状況

ISEはすでにメンテナンスされておらず、Windows7以前の環境でのみ動作確認がされている、枯れた環境となっています。ISEの最終バージョンは14.7となっており、最終更新日も2013年10月となっています。

ISE14.7は最新のWindows10(と言っても2015年リリースだが)では不具合が多く動かすのに一苦労します。(私もWindows10にISE14.7をインストールしてみたが、ライセンスファイルの選択でエクスプローラが死ぬ)

しかし、 Spartan-6の最低出荷期限が2027年まで と、一応サポート期間ですし、多くのボードに搭載されています。そのためXilinxさんはWindows10でも動かす方法を模索した結果、仮想マシン上のLinuxで動かすという力技になったようです。

なので、Windows10使いの方でISEを使いたい方は、『14.7 Windows 10』をインストールするか、『Windows7』や『Linuxマシン』を用意してISE14.7をインストールしてください。私は大学に持っていくノートPCには『14.7 Windows 10』をインストールして、自宅で使う「Ryzen5+RAM32GBマシン」ではVirtualBoxにWindows7をインストールしてISE14.7を入れてます。Windows7は64bit版でUltimateです。メモリ割り当ては8GBくらいにしました。ライセンスは初めてPC自作したときに買ったモノです。こんなところで使う機会が来るとは思ってもみなかった。。

VHDLを書こう!

今回の記事は仮想マシン上のISE14.7を使います。Windows10版のISEのインストールが完了するとデスクトップにショートカットが生成されますので、「Project Navigator」をダブルクリックします。すると勝手にVMが起動して、ISEも起動します。(私の環境は)スタートメニューにも登録されていますのでどっちでもいいです。

ISEが起動したら、新規プロジェクトを作成します。

newproject1

プロジェクトに適当な名前をつけます。今回は、LEDが10個ついているので、一定のクロックサイクル数で2進数で「0000000000」から「1111111111」まで数えるモノを作ります。

newproject2

FPGAの型番や設定を行います。今回はコントローラFPGAでプログラムしますので、LX9を選択しました。詳しい型番は SAKURA公式ページの説明書 に記載されています。

また、デフォルトでは「Verilog」が設定されていますが、単調な「VHDL」の方が好きですので、そのへんの設定もしておきます。この記事ではHDLの解説はしませんので、自分の得意なものでいいです。

newproject3setting

設定の確認画面が出てきますので、OKを押し、制約ファイルを読み込みます。

newproject3add

これも SAKURA公式サイト のサンプルプログラムにucfファイルがありますので、その辺を活用しても良いでしょう。私はサンプルプログラム中のucfファイルからコントローラFPGA側のledの箇所だけ抜き取りました。

newproject4

次に、肝心のVHDLファイルを記述します。VHDLの説明をすると長くなりそうなので、出来上がったものを読み込みます。LEDを光らせるだけのコードですので、そこら中にサンプルコードがあると思います。

newproject5VHDL

VHDLが完成したら、コンパイル、ビルドを行います。書き込み用ファイルも一括で生成してくれる「Generate Programming file」をダブルクリックします。

gen-program

コンパイルやら色々始まりますので、気長に待ちます。書き込みファイルができたら、チェックマークが付きますので、「iMPACT」と記載された項目をダブルクリックします。

gen-program

FPGAに書き込もう!

書き込みツールであるiMPACTが起動します。

とりあえず、仮想マシンの「デバイス」メニューから「USB」の「Xilinx」をVMに繋げるようにします。

そして、SAKURAの電源を入れましょう。USB給電ですので、USBポート側にスイッチを入れます。

SAKURAにはAESの処理のサンプルプログラムが組み込まれてますので、待機中はLEDがピコピコしています。

sakura-aes

iMPACTのウィンドウで「Boundary Scan」をダブルクリックすると、「Boundary Scan」タブが開きます。

impact1

メニューから「Initialize Chain」をクリックして、書き込むファイルを選択します。

impact2

書き込むファイルを指定したいので、ここでは「Yes」を選択します。

impact3

作成したプロジェクト名のディレクトリに「.bit」ファイルが存在します。これがFPGAに書き込むことのできるファイルです。

impact4

FPGAといえば、書き込んで電源を落とすとデータが消えるのが普通だと思っていましたが、SAKURAでは不揮発性メモリに書き込めるらしいです。今回は動作試験をしたいので、電源を落としたらデータが消えても問題ありません。よって、「No」を選択します。

impact5

プロパティが表示されますので、確認をして「OK」を押します。

impact6

最後に、「iMPACT Processes」から「Program」をダブルクリックします。するとFPGAへの書き込みが始まり、FPGAで動作します。

impact7

「000000000」「0000000001」「0000000010」「0000000011」…のようにLEDが点灯していきます。

動作Gif

電源を落とすと、AESのサンプルプログラムが読み込まれます。

今後の記事として、ソフトコアCPUであるMicroblazeを用いたメインFPGAとコントロールFPGAの連動やVivado2015.4を用いた高位合成、オシロスコープに繋いでの解析、とかやっていこうかなと思います。